zoukankan      html  css  js  c++  java
  • Kubernetes的基本术语和概念

      Kubernetes 中的大部分概念如 Node、Pod、Replication Controller、Service等都可以看做是一种“资源对象”,几乎所有的资源对象都可以通过Kubernetes提供的kubectl工具(或者API编程调用)执行增删改查等操作,并将其保存在etcd中持久换存储。从这个角度来看,Kubernetes其实是一个高度自动化的资源控制系统,它通过跟踪对比etcd库里保存的“资源期望状态”与当前环境中的“实际资源状态”的差异来实现自动控制和自动纠错的高级功能。

    • No.1 Master

      Kubernetes里的Master指的是集群控制节点,每个Kubernetes集群里需要有一个Master节点来负责整个集群的管理和控制,基本上Kubernetes所有的控制命令都是发给它,它来负责具体的执行过程。Master节点通常会单独占用一个服务器,一个主要的原因就是它太重要了,它是整个集群的“首脑”,如果它宕机或者不可用,那所有的控制命令都将失效。

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

      1.Kubernetes API Server(kube-apiserver),提供了HTTP Rest接口的关键服务进程,是Kubernetes里所有资源的增删改查等操作的唯一入口,也是集群控制的入口进程。

      2.Kubernetes Controller Manager(kube-controller-manager),Kubernetes里所有资源对象的自动化控制中心,可以理解为资源对象的“大总管”。

      3.Kubernetes Scheduler(jube-scheduler),负责调度(pod调度)的进程,相当于公交公司的“调度室”。

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

    • No.2 Node

      除了Master,Kubernetes集群中的其他机器被称为Node节点,在较早的版本中也被称为Minion。与Master一样,Node节点可以是一台物理主机,也可以是一台虚拟机。Node节点才是Kubernetes集群中的工作负载节点,每个Node都会被Master分配一些工作负载(Docker容器),当某个Node宕机时,其上的工作负载会被Master自动转移到其他节点上去。

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

      1.kubectl:负责pod对应的容器的创建、启停等任务,同时与Master节点密切协作,实现集群管理的基本功能。

      2.kube-proxy:实现Kubernetes Service的通信与负载均衡机制的重要组件。

      3.Docker Engine(docker):Docker引擎,负责机器上的容器创建和管理工作。

      Node节点可以在运行期间动态增加到Kubernetes集群中,前提是这个节点上已经正确安装配置了上述关键进程,在默认情况下kubectl会向Master注册自己,这也是Kubernetes推荐的Node管理方式,一旦Node被纳入集群管理范围,kubectl进程就会定时向Master节点汇报自身的情报,例如操作系统、Docker版本、机器的cpu和内存情况,以及之前有哪些Pod在运行等,这样Master可以获知每个Node的资源使用情况,并实现高效均衡的资源调度策略。二某个Node超过指定的时间不上报信息时,会被Master判定为“失联”,Node的状态被标记为不可用(Not Ready),随后Master会触发“工作负载大转移”的自动流程。

      我们可以执行命令:kubectl get nodes 来查看集群中有多少Node

      

      然后可以通过 kubectl describe node <node name> 来查看node的具体信息

       上述命令展示了Node的如下关键信息。

      1.Node的基本信息:名称、标签、创建时间等。

      

      2.Node当前的运行状态,Node启动后会做一系列的自检工作,比如磁盘是否满了,若果满了 OutOfDisk会被标记为True。  

      3.Node的主机名与主机地址,资源总数、可分配资源量、主机系统信息、当前pod列表、资源使用概要,相关Events信息。

    • No.3 Pod

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

    为什么设计一个全新的Pod概念:

          1.在一组容器为一个单元的情况下,难以对整体简单进行判断,引入业务无关切不容易死亡的Pause容器作为Pod根容器,以它状态来代表容器组的状态。

          2.Pod里多个业务容器共享Pause容器的IP、挂接的Volume、简化了密切关联容器通信和文件共享问题。Kubernetes要求底层网络支持集群内任意两个Pod之间的TCP/IP直接通信,通常采用虚拟二层网络技术实现,如Flannel、Openvswitch等 使一个Pod里的容器于其它主机Pod容器能够直接通信

          3.Pod 资源限额  以千分之一个cpu来划分   100~300m  指0.1到0.3个CPU    内存 64Mi   分配64M  

    • No.4 Label

      Label:一个label就是一个key=value的键值对,key和value均可自己指定。Label可以附加到各种资源对象上,一个资源对象可以定义任意数量的Label。 通途 通过给指定的资源对象捆绑一个或者多个不同的Label来实现多维度的资源分组管理功能,以便于灵活、方便地进行资源分配、调度、配置、部署等管理工作,例如:部署不同的版本到不同的环境中

      Label Selector:当给资源对象打上标签以后,就可以通过label selector查询和筛选这些资源对象。一般有两种label selector表达式,如

      • 基于等式:

        • name=demo 匹配所有具有标签name=demo的资源对象
        • name!=demo 匹配所有不具有name=demo的对象
      • 基于集合:
        • name in (dev, test) 匹配所有具有name=dev或者name=test的资源对象
        • name not in (dev, test) 匹配所有不具备name=dev或者name=test的资源对象

      Label Selector的使用场景:

      • kube-controller进程通过资源对象RC上定义的Label Selector来筛选要监控的Pod副本数量,从而实现Pod副本数量始终符合预期设定的全自动控制流程
      • kube-proxy 进程通过service的label selector来选择对应的pod,自动建立起每个service到pod的请求转发路由表,从而实现service的智能均衡负载机制
      • 通过对某些Node定义特定的label,并且在pod定义文件中使用NodeSelector进行定向调度
    • No.5 Replication Controller (RC)

      RC 简单来说定义了一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个预期值。

        RC包括以下几个部分:

          1. replicas  Pod期待的副本数             //如果为了删除所有的Pod,可以将replicas设置为0,然后更新该RC

          2.selector  用于筛选目标Pod的Label Selector

          3.template  当Pod的副本数小于预期数量的时候,用于创建新Pod的Pod模板。

      由于Replication Controller与kubernetes中的模块Replication Controller同名,所以在kubernetes 1.2 ,它升级为Replica Set ,与之前的RC的唯一区别是支持基于集合的Label selector ,而RC只支持基于等式的Label Selector 这使得Replica Set的功能更强。

      总结RC(Replica Set)的一些特性及作用:

        在大多数情况下,我们通过定义一个RC实现Pod的创建过程以及副本数量的自动控制。

        RC里包括完整的Pod定义模板;

        RC通过Label Selector 机制实现对Pod副本的自动控制;

        通过改变RC的Pod副本数量,可以实现Pod的扩容和缩容功能;

        通过改变RC里Pod模板中的镜像版本,可以实现Pod的滚动升级功能。

    • No.6 Deployment

      Deployment为Pod和Replica Set提供声明式更新。目的是为了更好地解决Pod的编排问题。为此,Deployment在内部使用了Replica Set来实现目的,无论从Deployment的作用与目的,它的yaml定义,还是从它的具体命令行操作来看,我们都可以把它看做RC的一次升级,两者相似度超过90%。

      Deployment相对于RC的一个最大升级是我们可以随时知道当前Pod“部署”的进度。实际上由于一个Pod的创建、调度、绑定节点及在目标Node上启动对应的容器这一完整过程需要一定的时间,所以我们期待系统启动N个Pod副本的目标状态,实际上是一个连续变化的“部署过程”导致的最终状态。

      Deployment的典型使用场景如下:

    1. 使用Deployment来创建ReplicaSet。ReplicaSet在后台创建pod。检查启动状态,看它是成功还是失败。
    2. 然后,通过更新Deployment的PodTemplateSpec字段来声明Pod的新状态。这会创建一个新的ReplicaSet,Deployment会按照控制的速率将pod从旧的ReplicaSet移动到新的ReplicaSet中。
    3. 如果当前状态不稳定,回滚到之前的Deployment revision。每次回滚都会更新Deployment的revision。
    4. 扩容Deployment以满足更高的负载。
    5. 暂停Deployment来应用PodTemplateSpec的多个修复,然后恢复上线。
    6. 根据Deployment 的状态判断上线是否hang住了。
    7. 清除旧的不必要的 ReplicaSet。
    • No.7 Horizontal Pod Autoscaler (HPA)

      简称HPA,意思是Pod横向自动扩容,也属于Kubernetes的一种资源对象

      实现原理: 通过追踪分析RC控制的所有目标Pod的负载变化情况,来确定是否需要针对性的调整目标Pod的副本数

      HPA有以下两种方式来作为HPA的负载指标

        1.CPUUtilizationPercentage  是指Cpu利用率的平均值(通常是1分钟,目前是通过Heapster扩张组件来得到这个值),用当前CPU的使用量除以它的Pod Request值 ,高于指定值(targetCPUUtilizationPercentage)就会创建新的Pod副本数(最大不超过设置的maxReplication)

        2.应用程序自定义的度量标准,比如服务在每秒内的响应的请求数(TPS或QPS)

    • No.8 Service

      服务,Kubernetes的每个Service就是我们经常提起的微服务架构中的一个微服务

      1.Service与其后端Pod副本集群之间通过label Selector 来实现无缝对接的,Kubernetes通过在每个node节点的kube-proxy实现智能负载均衡,Service不是共用一个负载均衡器的ip,而是每个Service分配了一个全局的唯一的虚拟IP(Cluster IP)

      Cluster IP:

        1.Cluster IP仅仅作用于Kubernetes Service这个对象,并由kubernetes管理和分配IP池

        2.Cluster IP无法被ping,因为没有一个实体网络对象来相应

        3.Cluster IP只能结合Service Port组成一个具体的通信端口,单独的Cluster IP 不具备TCP/IP通信的基础,并且它们只属于Kubernetes集群这样一个封闭的空间,集群之外的节点要访问这个通信端口,则要做一些额外的工作

        4.在Kubernetes集群之内,Node IP网、Pod IP网与Cluster IP网之间的通信,采用的是Kubernetes自己设计的一种编程方式的特殊的路由规则,与我们熟知的IP路由有很大的不同。

      外部网络访问service是通过Nodeport来访问的。

    • No.9 Volume

      存储卷(Volume)是Pod中能够被多个容器访问的共享目录。与Pod的生命周期相同,支持多种类型的volume,例如GlusterFS,Ceph等。

      Volume类型:

        1.emptyDir pod分配到Node时创建的。 用途:临时空间、长时间任务的中断过程CheckPoint的临时保存目录、多容器共享目录

        2.hostPath pod挂在宿主机上的文件和目录

        3.gcePersistentDisk 

        4.NFS

    • No.10 Persisten Volume 

      kubernetes集群中某个网络存储中对应的一块存储,它与Volume很类似,区别如下:

        PV只能是网络存储,不属于任何node,但可以在每个node上访问

        不是定义在Pod上的

        目前只有几种类型 GCE Persistent Disks 、NFS、RBD、iSCSCI、GlusterFS等。

    • No.11 Namespace 

      用于实现多租户的资源隔离,Namespace通过将集群内部的资源对象分配到不同的namespace中,形成逻辑上分组的不同项目、小组和用户组

      默认分配到名为default的NameSpace中,一旦创建了namespace就可以指定哪些资源属于哪个namespace

      还可以结合Kubernetes的资源配额管理,限定不同租户能占用的资源。

    以上即为Kubernetes的核心组件,他们共同组成了Kubernetes的系统的框架和计算模型,通过对他们进行灵活组合,用户可快速方便的对容器集群进行配置、创建、和管理。

  • 相关阅读:
    WCF进行大数据传输时的相关配置(转)
    自定义绑定(转)
    菜鸟学TSQLSQL2005读书笔记1
    再别康桥英文及译文
    自定义绑定2
    我要读的书
    菜鸟学TSQLSQL2005读书笔记
    Bad Habbits
    实践测试驱动开发
    针对接口写测试用例
  • 原文地址:https://www.cnblogs.com/cooper-73/p/9755991.html
Copyright © 2011-2022 走看看