Master

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

在生产环境中不建议在 Master 节点上部署集群核心组件外的任何容器,公司业务程序的容器更是不建议部署到 Master 节点上,以免升级或者维护时对业务造成影响。

关键进程

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

  • Kubernetes API Server(kube-apiserver)

    • 整个集群的控制中枢,提供集群中各个模块之间的数据交换,并将集群状态和信息存储到分布式键-值(key-value)存储系统 Etcd 集群中。

    • 集群管理资源配额集群安全机制的入口,为集群各类资源对象提供增删改查以及 watch 的 REST API 接口

  • Kubernetes Scheduler(kube-scheduler)

    • 集群 Pod 的调度中心,主要通过调度算法将 Pod 分配到最佳的 Node 节点,它通过 API Server 监听所有 Pod 的状态,一旦发现新的未被调度到任何 Node 节点的 Pod(PodSpec.NodeName 为空),就会根据一系列策略选择最佳节点进行调度,对每一个 Pod 创建一个绑定(Binding),然后被调度的节点上的 Kubelet 负责启动该 Pod

    • Scheduler 是集群可插拔式组件,它跟踪每个节点上的资源利用率以确保工作负载不会超过可用资源。因此,Scheduler 必须知道资源需求资源可用性以及其他约束和策略,例如服务质量、亲和性/反亲和性要求、数据位置等。

    • Scheduler 将资源供应与工作负载需求相匹配以维持系统的稳定和可靠性,因此 Scheduler 在调度的过程中需要考虑公平资源高效利用效率等方面的问题。

  • Kubernetes Controller Manager(kube-controller-manager)

    • 集群的状态管理器保证 Pod 或其他资源达到期望值

    • 当集群中某个 Pod 的副本数或其他资源因故障和错误导致无法正常运行,没有达到设定的值时,Controller Manager 会尝试自动修复并使其达到期望状态。

  • Etcd

    • 用于可靠地存储集群的配置数据,是一种持久型、轻量型、分布式的键-值(key-value)数据存储组件

    • Etcd 作为 Kubernetes 集群的持久化存储系统,集群的灾难恢复状态信息存储都与其密不可分,所以在 Kubernetes 高可用集群中,Etcd 的高可用是至关重要的一部分,在生产环境中建议部署大于 3 的奇数个数的 Etcd,以保证数据的安全性和可恢复性。

    • Etcd 可与 Master 组件部署在同一个节点上,大规模集群环境下建议部署在集群外,并且使用高性能服务器来提高 Etcd 的性能和降低 Etcd 同步数据的延迟。

补充说明

在 Kubernetes 架构中,虽然 Scheduler 和 Controller Manager 在多个节点上进行了部署,但执行工作的节点只有一个。

因为 Scheduler 和 Controller Manager 属于有状态服务,为了防止重复调度,多个节点的 Scheduler 和 Controller Manager 进行了选主工作,工作节点(主节点)信息保存在 Scheduler 和 Controller Manager 的 EndPoint 中。

可以通过 kubectl get leases -n kube-system 查看:

$ kubectl get leases -n kube-system
NAME                                   HOLDER                                                                      AGE
apiserver-hk4fzhyjdo2ayc5o2blltmf4pe   apiserver-hk4fzhyjdo2ayc5o2blltmf4pe_67f1a7cd-275b-4093-b1fd-744a70a324d5   26h
apiserver-l3o2wb47zcu4wv6xcvcptpja54   apiserver-l3o2wb47zcu4wv6xcvcptpja54_7f182e54-daa6-4b4a-8b85-c437c0218372   4h33m
kube-controller-manager                k8s-master01_8e8bcbb5-d248-408c-8729-691720fde6f8                           26h
kube-scheduler                         k8s-master02_3e94febc-9494-41b1-b2d6-d69863ac289f                           26h

最后更新于