1.5 Kubernetes组件
Kubernetes集群具有几个用于控制集群的主组件,以及在每个集群节点上运行的节点组件。这一部分将介绍这些组件,并解释它们是如何协同工作的。
1.5.1 主组件
主组件通常在一个节点上运行,但在高可用性集群或大型集群上,它们可以分布在多个节点上。
1.API服务器
Kube API服务器(Kube-API Server)提供Kubernetes REST API。由于其具有无状态性,因此它可以很轻松地水平缩放。它的所有数据都存储在etcd
集群中。API服务器是Kubernetes控制平面的体现。
2.etcd
etcd是一种非常可靠的分布式数据存储。Kubernetes使用它来存储整个集群状态。在小型的瞬态集群中,单个etcd可以与所有其他主组件在同一节点上运行。但考虑到冗余和高可用性,更大型的集群通常包含3个,甚至5个etcd集群。
3.控制器管理器
控制器管理器是各种管理器的集合,这些管理器被打包成一个二进制文件。它包含副本控制器、Pod控制器、服务控制器和端点控制器等。所有这些控制器通过API监控集群状态,它们的任务是将集群控制在目标状态。
4.调度器
Kube调度器负责将Pod调度到节点中。这是一个非常复杂的任务,因为它需要考虑多个相互作用的因素,例如以下几点。
- 资源需求。
- 服务要求。
- 硬/软件策略约束。
- 亲和性和反亲和性规范。
- 数据局部性。
- 截止日期。
5.DNS
从Kubernetes 1.3开始,DNS服务便成为标准Kubernetes集群的一部分。它被调度成一个普通的Pod。除Headless服务外的每个服务都会接收DNS名称,Pod也可以接收DNS名称,这对于自动化探索非常有用。
1.5.2 节点组件
集群中的节点需要几个组件与集群主组件交互,接收要执行的工作负载,并根据它们的状态更新集群。
1.代理
Kube代理在每个节点上进行低水平的网络维护,它用于呈现本地Kubernetes服务,可以执行TCP及UDP转发,通过环境变量或DNS寻找集群IP。
2.Kubelet
Kubelet是节点上Kubernetes的代表。它负责监控与主组件的通信并管理运行中的Pod,包括以下几个方面的内容。
- 从API服务器下载Pod机密。
- 装载卷。
- 运行Pod的容器(Docker或Rkt)。
- 报告节点和每个Pod的状态。
- 运行容器活性探针。
在本节中,我们通过Kubernetes的API以及用于控制管理集群的组件,深入研究了它的内在构成,从宏观的视角探讨了它的体系结构及其所支持的设计模式。1.6节将介绍Kubernetes支持的运行时。