Kubernetes组件介绍

控制节点组件

  • APIServer:APIServer是整个集群的控制中枢(无状态,数据保存在etcd中,看LB调度到哪个节点中的APIServer),提供集群中各个模块之间的数据交换(比如Scheduler和Controller Manager需要进行数据交换,都需要通过APIServer进行连接),并将集群状态和信息存储到分布式键-值(key-value)存储系统Etcd集群中。同时它也是管理集群、资源配额、提供完备的集群安全机制的入口,为集群各类资源对象提供增删改查以及watch 的REST API接口。
  • Scheduler:Scheduler是集群Pod的调度中心(有状态,选举机制。无论有多少个节点,工作的只有一个节点),主要是通过调度算法将Pod分配到最佳的Node节点,它通过APIServer监听所有Pod的状态,一旦发现新的未被调度到任何Node节点的Pod(PodSpec.NodeName为空),就会根据一系列策略选择最佳节点进行调度。
  • Controller Manager:Controller Manager是集群状态管理器(有状态,选举机制。无论有多少个节点,工作的只有一个节点),以保证Pod或其他资源达到期望值。当集群中某个Pod的副本数或其他资源因故障和错误导致无法正常运行,没有达到设定的值时,Controller Manager会尝试自动修复并使其达到期望状态。
  • Etcd:Etcd有CoreOS开发,用于可靠地存储集群的配置数据,是一种持久性、轻量型、分布式的键-值(key-value)数据存储组件,作为Kubernetes集群的持久化存储系统。

查看选举Scheduler和Controller Manager的选举状态:

# kubectl get leases -n kube-system 
NAME                      HOLDER                                              AGE
kube-controller-manager   k8s-master01_acfa3612-ea75-4d65-bf99-89ae2bcfe3c9   11d
kube-scheduler            k8s-master03_501a1433-ecf5-454a-9f01-5c71e34738d5   11d

工作节点组件

  • Kubelet:负责与Master通信协作,管理该节点上的Pod创建、删除、状态报告等操作,对容器进行健康检查及监控,同时负责上报节点和节点上面Pod的状态给APIServer,APIServer再保存在Etcd中。
  • Kube-proxy:负责各Pod之间的通信和负载均衡,将指定的流量分发到后端正确的机器上。
  • Runtime:负责容器的管理。
  • CoreDNS:用于Kubernetes集群内部Service的解析,可以让Pod把Service名称解析成Service的IP,然后通过Service的IP地址进行连接到对应的应用上。
  • Calico:符合CNI标准的一个网络插件,它负责给每个Pod分配一个不会重复的IP,并且把每个节点当做一个“路由器”,这样一个节点的Pod就可以通过IP地址访问到其他节点的Pod。