• kubenetes基本概念和术语


    一、Master

    集群的控制节点,每个kubenetes集群里需要有一个master节点来负责整个集群的管理和控制,基本上kubenetes所有控制命令都是发给它,它来负责具体的执行过程,是整个集群的大脑。

    Master节点上运行着以下一组关键进程

    • Kubenetes API(kube-apiserver),提供了HTTP接口的关键服务进程,是kubenetes里所有资源的增、删、改、查等操作的唯一接口,也是集群控制的入口进程。
    • kubenetes controller manager(kube-controller-manager),kubenetes里所有资源对象的自动化控制中心,可以理解为对象的“大部管”。
    • kubenetes scheduler(kube-scheduler),负责资源调度(POD)的进程,相当于公交公司的“调度室”。

    其实master节点上往往还启动一个etcd server进程,因为kubenetes里所有的资源对象的数据全部保存在etcd中的。

    二、Node

    每个Node节点上都运行着以下一组关键进程

    • kubelet:负责Pod对应的容的创建、启停等任务,同时与master节点密切协作,实现集群管理的基本功能。
    • kube-proxy:实现kubenetes service的通信与负载均衡机制的重要组件。
    • Docker Engine(docker):Docker引擎,负责本机的容器创建和管理工作。

    Node节眯可以在运行期间动态增加到kubenetes集群中,一旦Node被纳入集群管理范围,kubelet进程会定时向master节点汇报自身的情报,如操作系统,docker版本,机器的CPU和内存情况,以及之前有哪些POD在运行等,这样master可以获知每个NODE的资源使用情况,关实现高效均衡的资源调度策略。而某个Node超过指定时间不上报信息时,会被master判定为失聪,Node的状态被标记为不可用(Not Ready),随后master会触发“工作负载大转移”的自动流程。

    三、Pod

    kubenetes的最重要也最基本的概念,每个pod都有一个特殊的被称为“根容器”的pause容器。pause容器对应的镜像属于kubenetes平台的一部分,除了pause容器,每个pod还包含一个或多个紧密相关的用户业务容器。

    设计一个全新的pod容器的概念并且pod有这样特殊的组成结构

    原因一:在一组容器作为一个单元的情况下,我们难以对整体简单地进行判断及有效地进行行动,如,一个容器列亡了,此时算是整体死亡么?引入业务无关并且不易死亡的pause容器作为pod的根容器,以它的状态代表整个容器组的状态,就简单,巧妙地解决了这个难题。

    原因二:pod里的多个业务容器共享pause 容器的IP,共享pause容器挂载的volume,这样即简化了密切关联的业务容器之间的通信问题,也很好地解决了它们之间的文件共享问题。kubenetes为每个pod都分配了一个IP地址,称为podip,一个pod里的多个容器共享podip地址,要求底层网络支持集群内任意两个pod之间的tcp/ip直接通信。这通常采用的是虚拟二层网络技术来实现,例如:flannel,openvswitch等。因此我们需要牢记一点,在kubenetes里,一个pod里的容器与另外主机上的pod容器能直接通信。

    pod分为两类型:普通的pod及静态的pod(static pod),后者比较特殊,它并不存放在kubenetes的etcd里,而是存放在某个具体的node上的一个具体文件中,并且只在此node上启动运行,而普通的pod一旦被创建,就会被放入到etcd中存储,然后会被kubenetes master调度到某个具体的node上并进行绑定,随后该pod被对应的node上的kubelet进程实例化成一组相关的docker容器并运行起来。在默认情况下,当pod里的某个容器停止时,kubenetes会自动检测到这个问题并且重新启动这个pod(重启pod里的所有容器),如果pod所在的node宕机,则会将这个node上的所有pod重新调度到其他节点上,pod、容器与node的关系如下图

     我们可以执行以下命令查看集群中有多少个node

    [root@master ~]# kubectl get nodes
    NAME     STATUS     ROLES    AGE   VERSION
    master   Ready      master   24m   v1.16.4
    node01  Ready   <none>   13m   v1.16.4
    node02   Ready      <none>   13m   v1.16.4

    通过kubectl describe node node02来查看某个node详细信息

    [root@master ~]# kubectl describe node node02
    Name:               node02    #名称
    Roles:              <none>
    Labels:             beta.kubernetes.io/arch=amd64   #标签
                        beta.kubernetes.io/os=linux
                        kubernetes.io/arch=amd64
                        kubernetes.io/hostname=node02
                        kubernetes.io/os=linux
    Annotations:        flannel.alpha.coreos.com/backend-data: {"VtepMAC":"1e:71:ab:d1:3f:f0"}
                        flannel.alpha.coreos.com/backend-type: vxlan
                        flannel.alpha.coreos.com/kube-subnet-manager: true
                        flannel.alpha.coreos.com/public-ip: 192.168.1.222
                        kubeadm.alpha.kubernetes.io/cri-socket: /var/run/dockershim.sock
                        node.alpha.kubernetes.io/ttl: 0
                        volumes.kubernetes.io/controller-managed-attach-detach: true
    CreationTimestamp:  Tue, 18 Feb 2020 23:06:05 +0800    #创建时间
    Taints:             <none>
    Unschedulable:      false
    Conditions:
      Type             Status  LastHeartbeatTime    (当前状态)             LastTransitionTime                Reason                       Message
      ----             ------  -----------------                 ------------------                ------                       -------
      MemoryPressure   False   Tue, 18 Feb 2020 23:20:37 +0800   Tue, 18 Feb 2020 23:06:05 +0800   KubeletHasSufficientMemory   kubelet has sufficient memory available
      DiskPressure     False   Tue, 18 Feb 2020 23:20:37 +0800   Tue, 18 Feb 2020 23:06:05 +0800   KubeletHasNoDiskPressure     kubelet has no disk pressure
      PIDPressure      False   Tue, 18 Feb 2020 23:20:37 +0800   Tue, 18 Feb 2020 23:06:05 +0800   KubeletHasSufficientPID      kubelet has sufficient PID available
      Ready            True    Tue, 18 Feb 2020 23:20:37 +0800   Tue, 18 Feb 2020 23:08:36 +0800   KubeletReady                 kubelet is posting ready status
    Addresses:
      InternalIP:  192.168.1.222
      Hostname:    node02
    Capacity:
     cpu:                1      #cpu个数
     ephemeral-storage:  19266Mi
     hugepages-2Mi:      0
     memory:             977812Ki  #内存
     pods:               110      #最大调度的pod数量
    Allocatable:
     cpu:                1
     ephemeral-storage:  18181678665
     hugepages-2Mi:      0
     memory:             875412Ki
     pods:               110
    System Info:            #可分配资源。
     Machine ID:                 ef907a7e0bc44c678641abe2dc75995b
     System UUID:                e8174d56-49af-9d5b-a726-e03cda7ed8d1
     Boot ID:                    33f7bb05-4f4d-4c74-a1fa-28476d66137f
     Kernel Version:             5.5.4-1.el7.elrepo.x86_64
     OS Image:                   CentOS Linux 7 (Core)
     Operating System:           linux
     Architecture:               amd64
     Container Runtime Version:  docker://18.6.3
     Kubelet Version:            v1.16.4
     Kube-Proxy Version:         v1.16.4
    PodCIDR:                     10.244.2.0/24
    PodCIDRs:                    10.244.2.0/24
    Non-terminated Pods:         (2 in total)      #正在运行的pod列表摘要。
      Namespace                  Name                           CPU Requests  CPU Limits  Memory Requests  Memory Limits  AGE
      ---------                  ----                           ------------  ----------  ---------------  -------------  ---
      kube-system                kube-flannel-ds-amd64-fmxbr    100m (10%)    100m (10%)  50Mi (5%)        50Mi (5%)      14m
      kube-system                kube-proxy-2tctz               0 (0%)        0 (0%)      0 (0%)           0 (0%)         14m
    Allocated resources:
      (Total limits may be over 100 percent, i.e., overcommitted.)
      Resource           Requests    Limits
      --------           --------    ------
      cpu                100m (10%)  100m (10%)
      memory             50Mi (5%)   50Mi (5%)
      ephemeral-storage  0 (0%)      0 (0%)
    Events:
      Type    Reason                   Age                From                Message
      ----    ------                   ----               ----                -------
      Normal  Starting                 14m                kubelet, node02     Starting kubelet.
      Normal  NodeHasSufficientMemory  14m (x2 over 14m)  kubelet, node02     Node node02 status is now: NodeHasSufficientMemory
      Normal  NodeHasNoDiskPressure    14m (x2 over 14m)  kubelet, node02     Node node02 status is now: NodeHasNoDiskPressure
      Normal  NodeHasSufficientPID     14m (x2 over 14m)  kubelet, node02     Node node02 status is now: NodeHasSufficientPID
      Normal  NodeAllocatableEnforced  14m                kubelet, node02     Updated Node Allocatable limit across pods
      Normal  Starting                 14m                kube-proxy, node02  Starting kube-proxy.
      Normal  NodeReady                12m                kubelet, node02     Node node02 status is now: NodeReady

    三、Label

    一个Label是一个key=value的键值对,其中key与value由用户自己指定

    Label可以被附加到各种资源对象上,例如Node、Pod、Service、RC等,一个资源对象可以定义任意数量的Label,同一个Label也可以被添加到任意数量的资源对象上。Label通常在资源对象定义时确定,也可以在对象创建后动态添加或者删除。

    一些常用的Label示例如下。

    • 版本标签:"release":"stable"、"release":"canary"。
    • 环境标签:"environment":"dev"、"environment":"qa"、"environment":"production"。
    • 架构标签:"tier":"frontend"、"tier":"backend"、"tier":"middleware"。
    • 分区标签:"partition":"customerA"、"partition":"customerB"。
    • 质量管控标签:"track":"daily"、"track":"weekly"。
  • 相关阅读:
    穿透层的鼠标事件
    深入浅出HTML与XHTML的区别
    JQuery中一个简单的表单验证的实例
    JavaScript window.setTimeout() 的详细用法
    js动态创建及移除div的方法
    js插入节点appendChild和insertBefore
    sublime使用方法
    js移动客户端--触屏滑动事件
    jquery 延迟执行实例介绍
    JS页面延迟执行一些方法(整理)
  • 原文地址:https://www.cnblogs.com/liujunjun/p/12329148.html
Copyright © 2020-2023  润新知