Master节点和Node节点概念
Master节点
Master节点是Kubernetes集群的控制节点,在生产环境中不建议部署集群核心组件外的任何Pod,公司业务的Pod更是不建议部署到Master节点上,以免升级或者维护时对业务造成影响。
Master节点的组件包括:
APIServer:APIServer是整个集群的控制中枢,提供集群中各个模块之间的数据交换,并将集群状态和信息存储到分布式键-值(key-value)存储系统Etcd集群中。同时它也是集群管理、资源配额、提供完备的集群安全机制的入口,为集群各类资源对象提供增删改查以及watch的REST API接口。APIServer作为Kubernetes的关键组件,使用Kubernetes API和 JSON over HTTP提供Kubernetes的内部和外部接口。
Scheduler:Scheduler是集群Pod的调度中心,主要是通过调度算法将Pod分配到最佳的节点(Node),它通过APIServer监听所有Pod的状态,一旦发现新的未被调度到任何Node节点的Pod(PodSpec.NodeName为空),就会根据一系列策略选择最佳节点进行调度,对每一个Pod创建一个绑定(binding),然后被调度的节点上的Kubelet负责启动该Pod。Scheduler是集群可插拔式组件,它跟踪每个节点上的资源利用率以确保工作负载不会超过可用资源。因此Scheduler必须知道资源需求、资源可用性以及其他约束和策略,例如服务质量、亲和力/反关联性要求、数据位置等。Scheduler将资源供应与工作负载需求相匹配以维持系统的稳定和可靠,因此Scheduler在调度的过程中需要考虑公平、资源高效利用、效率等方面的问题。
Controller Manager: Controller Manager是集群状态管理器(它的英文直译名为控制器管理器),以保证Pod或其他资源达到期望值。当集群中某个Pod的副本数或其他资源因故障和错误导致无法正常运行,没有达到设定的值时,Controller Manager会尝试自动修复并使其达到期望状态。Controller Manager包含NodeController、ReplicationController、EndpointController、NamespaceController、ServiceAccountController、ResourceQuotaController、ServiceController和TokenController,该控制器管理器可与API服务器进行通信以在需要时创建、更新或删除它所管理的资源,如Pod、服务断点等。
Etcd: Etcd由CoreOS开发,用于可靠地存储集群的配置数据,是一种持久性、轻量型、分布式的键-值(key-value)数据存储组件。Etcd作为Kubernetes集群的持久化存储系统,集群的灾难恢复、状态信息存储都与其密不可分,所以在Kubernetes高可用集群中,Etcd的高可用是至关重要的一部分,在生产环境中建议部署为大于3的奇数个数的Etcd,以保证数据的安全性和可恢复性。Etcd可与Master组件部署在同一个节点上,大规模集群环境下建议部署在集群外,并且使用高性能服务器来提高Etcd的性能和降低Etcd同步数据的延迟。
Node节点
Node节点也被称为Worker或Minion,是主要负责部署容器(工作负载)的单机(或虚拟机),集群中的每个节点都必须具备容器的运行环境(runtime),比如Docker及其他组件等。Kubelet作为守护进程运行在Node节点上,负责监听该节点上所有的Pod,同时负责上报该节点上所有Pod的运行状态,确保节点上的所有容器都能正常运行。当Node节点宕机(NotReady状态)时,该节点上运行的Pod会被自动地转移到其他节点上。
Node节点包括:
Kubelet: 负责与Master通信协作,管理该节点上的Pod。
Kube-Proxy: 负责各Pod之间的通信和负载均衡。
Docker Engine: Docker引擎,负载对容器的管理。
Etcd:键值数据库。保存一些集群的信息,一般生产环境建议部署三个以上节点(奇数个)
kube-apiserver:集群的控制中枢。各个模块之间信息交互都需要经过kube-apiserver,同时它也是集群管理、资源配置、整个集群安全机制的入口
controller-manager:集群的状态管理器。保证Pod或其他资源达到期望值,也是需要和apiserver进行通信,在需要的时候创建、更新或者删除它所管理的资源
scheduler:集群的调度中心。它会根据指定的一系列条件,选择一个或者一批最佳的节点,然后部署我们的Pod
kubelet:负责监听节点上Pod状态,同时负责上报节点和节点上面Pod状态,负责与Master节点通信,并且管理节点上面的Pod
kube-proxy:负责pod之间的通信和负载均衡,将指定的流量分发到后端正确的机器上
ipvs工作模式:监听master节点增加和删除service以及endpoint的消息,调用netlink接口创建相应的IPVS规则,通过IPVS规则,将流量转发至相应的pod上
iptables:监听master节点增加和删除service以及endpoint的消息,对于每一个service,他都会创建一个iptables规则,将service的clusterIP代理到后端对于的Pod
calico:符合CNI标准的网络插件,给每个pod生成一个唯一的ip地址,并且把每个节点当做一个路由器
coredns:用于K8S集群内部service的解析,可以让pod把service名称解析成IP地址,然后通过service的IP地址进行连接到对应的应用上