精通Kubernetes
上QQ阅读APP看书,第一时间看更新

Kubernetes集群具有几个用于控制集群的主组件,以及在每个集群节点上运行的节点组件。这一部分将介绍这些组件,并解释它们是如何协同工作的。

主组件通常在一个节点上运行,但在高可用性集群或大型集群上,它们可以分布在多个节点上。

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.代理

Kube代理在每个节点上进行低水平的网络维护,它用于呈现本地Kubernetes服务,可以执行TCP及UDP转发,通过环境变量或DNS寻找集群IP。

2.Kubelet

Kubelet是节点上Kubernetes的代表。它负责监控与主组件的通信并管理运行中的Pod,包括以下几个方面的内容。

  • 从API服务器下载Pod机密。
  • 装载卷。
  • 运行Pod的容器(Docker或Rkt)。
  • 报告节点和每个Pod的状态。
  • 运行容器活性探针。

在本节中,我们通过Kubernetes的API以及用于控制管理集群的组件,深入研究了它的内在构成,从宏观的视角探讨了它的体系结构及其所支持的设计模式。1.6节将介绍Kubernetes支持的运行时。