zoukankan      html  css  js  c++  java
  • k8s知识2

    kubernetes到底有多难?
    看下面的白话: service 网络通信原理
    service 由k8s外面的服务作为访问端 内部里面其实是pod
    ——————————————————————————————————————————————————————
    那么说说pod: pod运行在node里面 pod的基础下有k8s的基础功能镜像支持,
    pod这个容器共享这Pause容器的网络栈和volume挂载卷(其实是挂起功能和docker的逻辑卷)
    _______________________________________________________________________________
    那么service 和pod之间有何关联:
    k8s给每个pod打上了一个标签(label)[懂docker的都知道],在此条件之上,比如咱们要找mysql容器
    那么他的选择条件就是name=mysql的pod,而这个pod现在被打了mysql的标签,自然serivce就找到了pod的容器
    这样就解决了service和pod的关联问题
    ———————————————————————————————————————————————————————
    那么问题来了 当你运行一段时间之后发现需要扩展k8s容器的pod,那么有个概念就叫做 kubernetes RC
    还是yaml ,为需要扩容的service关联的pod创建一个Replication Controller 就可以解决 扩容升级问题
    写法:
    (1) 目标Pod的定义 #就是就是name
    (2) 目标Pod需要运行的副本数量(Replicas) #看到yaml的数字吗 就是那里
    (3) 要监控的目标Pod的标签(Label) #就是你需要扩容servie关联的pod的标签
    ————————————————————————————————————————————————————————
    注意:Kubernetes的master如果宕掉 整个kubernetes集群就都会宕掉
    那么master为什么会宕机呢 答案是他所拥有的功能
    功能揭秘:
    kube-apiserver :提供了http Rest接口的关键服务进程 是kubernetes里所有资源的增删改查等操作的唯一入口,是集群控制的入口进程
    kube-controller-manager:kubernetes里所有的资源对象的自动化控制中心
    kube-scheduler:负责资源调度(Pod调度)的进程 #需要实现的cpu和gpu调度就是在需要在这里实现的
    etcd:kubernetes的所有资源对象的数据全都是保存在etcd中
    ————————————————————————————————————————————————————————
    如果你前面不懂node是什么:
    揭秘:集群当中除了Master,其他机器都是node节点,每个node都是被master分配负载docker容器,当某个node宕机,其上的工作负载会被master
    自动转移到其他节点上去。
    哎哟:node上竟然也有命令 不过不要着急 就三个:
    kubelet:负责pod对应容器的创建、停止。同时和master节点合作,实现集群管理的基本功能
    kube-proxy:实现kubernetes service的通信与负载机制的重要组件
    Docker Engine: Docker 引擎,负责本机的容器创建和管理工作 (docker熟练者就很简单了)
    —————————————————————————————————————————————————————————
    总结一下:
    在集群管理方面,Kubernets将集群中的机器划分为一个Master节点和一群工作节点(Node),
    其中,在Master节点上运行着集群管理相关的一组进程kube-apiserver、kube-controller-manager和kube-scheduler,
    这些进程实现了整个集群的资源管理、Pod调度、弹性收缩、安全控制、系统监控和纠错等管理功能,并且都是全自动完成的。
    Node作为集群中的工作节点,运行真正的应用程序,在Node上Kubernetes管理的最小运行单元是Pod。
    Node上运行着Kubernetes的kubelet、kube-proxy服务进程,这些服务进程负责Pod创建、启动、监控、重启、销毁、以及实现软件模式的负载均衡。

    ——
    txter:Mr.gao
    date: 2019.12.12/20:34 星期五
    天气:微风
    ————————————————————————————————————————————————————————————————————————————————————
    专门白话介绍一下pod:
    pod有什么功能我们知道 ,但是pod具体起了什么作用:
    原来pod都包含一个pause容器比如:gcr.io/google_containers/pause-amd64,除此之外还包含多个紧密相关的用户业务容器(user container1;user container2...)这就是pod里面包含的所有容器了
    那么pod为什么要设计成这个样子呢:
    1.Pause容器被设计成pod的根容器(感觉还和linux的理念很契合,原来不过是把linxu的文件概念变成了以镜像为基础。)那么它代表整个容器组的状态
    2.pod里的别个多个容器会共享Pause容器的ip,共享Pause容器挂接的Volume。
    总结:那么很显而易见了 这说清楚了pod的构造 以及pause容器为什么存在 和他的用户容器为何把pause作为根容器的意思
    那么思考一下:
    文章是说:
    Kubernetes为每个pod分配唯一的ip地址,一个pod里的多个容器共享ip :
    (注意:是pod里面的多个容器,代表pod1的容器应用pod的共享ip,来和pod2的应用pod的共享ip可以通信)
    采用虚拟二层网络技术进行pod间的通信
    PS:pod与pod之间当然要通信,不然怎么实现各种功能
    ——————————————————————————————————————————————————————————————————————————————————————
    etcd的存储:
    普通的pod:
    普通pod一旦被创建,就会被放到etcd中存储,随后被kubernetes master调度到某个具体的node上并进行绑定(Binding),随后pod所对应的node上的kubelet进程实例化
    成一组相关的docker容器运行。 当pod里的某个容器停止时,kubernetes会自动监测到这个问题并且重新启动这个pod(重启pod里的所有容器),如果pod所在的node宕机
    则会将这个node所有的pod从新调度到其他节点上
    总结:其实这也是间接的说明了kubernetes编排工具的功能
    静态pod(STatic Pod):
    静态pod是由kubelet进行管理的仅存在于特定的node上的pod,他们不能通过API server进行管理,无法与ReplicationController(RC),Deployment.或者DaemonSet进行关联
    并且kubelet也无法对他们进行健康检查,静态pod总是由kubelet进行创建的,并且总是在kubelet所在的node进行的 (这可tm绕嘴,还好我坚持看下来了,作者也是为了讲清楚)

    简单的说:就是kubelet在node上创建了一个静态pod 这个静态pod只能由node上的kubelet自己进行管理
    ________________________________________________________________________________________________________________________________
    创建静态Pod有两种方式:配置文件方式和HTTP方式

    1.配置文件方式

    首先,需要设置kubelet的启动参数"config",指定kubelet需要监控的配置文件所在的目录,kubelet会定期扫描该目录,并根据该目录中的*.yaml或*.json文件进行创建操作

    解释: 其实就是kubelet 启动的时候 指定config=xxx yaml xxx.json 我感觉是这样
    但是文章里的static-web.yaml 没一点卵用 没写centos的测试 先在这里搁浅一下,主要先知道这个再说

    ___________________________________________________________________________________________________________________________________-
    Endpoint
    Pod的IP加上这里的容器端口(container Port),就组成了一个全新的概念---Endpoint 它代表着此Pod里的一个服务进程的对外通讯地址。
    一个Pod也存在着多个Endpoint的情况,比如我们把Tomcat定义为一个Pod时,可以对外暴露端口与服务端口这两个Endpoint

    简单的说:就是yaml文件里写了这个字段 用来写服务端口和暴露端口 这个和docker容器一模一样的理念
    ___________________________________________________________________________________________________________________________________
    Event
    Event是一个事件的记录,记录里有最早生成时间,最后重现时间,重复次数,...等等.以及导致此事件的原因等众多信息,Event 会关联到某个具体的资源上,是排查故障的重要参考,
    Node描述信息包含了Event,而pod同样有Event记录.
    当发现pod迟迟无法创建的时候,可以用kubectl describe pod [pod名称] 来查看,定位问题

    简单的说:这个Event很重要了 一般服务就是 搭建 使用 拍错 这里就是拍错的重要东西。
    什么?不会找pod名称 命令是这个: kubectl get pods ##打印全部运行的容器 找到你需要的pod名称,比如喜欢的dashborad仪表板

    ————————————————————————————————————————————————————————————————————————————————————————————、

    做到这里就需要搭建起来kubernetes了 所以下一篇 开始搭建 将我之前的实验的kubernetes 弄掉 重新搭建一篇 发一篇k8s搭建集群的博客

    ————————————————————————————————————————————————————————————————————————————————————————————。

    txter:Mr.gao

    date:2019/12/14|16:34   星期六 

    天气:微风

  • 相关阅读:
    ActionBar 值 addTab 的小提示
    Android Studio Gradle project refresh failed No such property classpath for class
    Android Studio 初始新建项目时 build gradle project 超级慢的原因
    ActionBar之style出现Cannot resolve symbol 'Theme' 错误
    Android之ActionBar、Tabs、Fragment、ViewPager实现标签页切换并缓存页面
    Linux使用rsync客户端与服务端同步目录进行备份
    Linux服务器导入导出SVN项目
    CentOS6.3配置SVN之subversion1.7.7
    Linux增加swap分区大小
    CentOS6.2编译gcc失败,kernel-headers错误
  • 原文地址:https://www.cnblogs.com/sxgaofeng/p/12039742.html
Copyright © 2011-2022 走看看