Kubernetes从零入门(二):深入解析集群架构与核心组件工作原理
Kubernetes 集群由一个控制平面和一组用于运行容器化应用的工作机器组成, 这些工作机器称作节点(Node)。每个集群至少需要一个工作节点来运行 Pod。
工作节点托管着组成应用负载的 Pod。控制平面管理集群中的工作节点和 Pod。 在生产环境中,控制平面通常跨多台计算机运行,而一个集群通常运行多个节点,以提供容错和高可用。
本文概述了构建一个完整且可运行的 Kubernetes 集群所需的各种组件。
Kubernetes 组件
组成 Kubernetes 集群的关键组件概述。
本文章概述了一个正常运行的 Kubernetes 集群所需的各种组件。
图 1. Kubernetes 集群组件。
控制平面组件
控制平面组件会为集群做出全局决策,比如资源的调度。 以及检测和响应集群事件,例如当不满足 Deployment 的 replicas 字段时,要启动新的 Pod)。
控制平面组件可以在集群中的任何节点上运行。 然而,为了简单起见,安装脚本通常会在同一个计算机上启动所有控制平面组件, 并且不会在此计算机上运行用户容器。
这些控制平面组件(Control Plane Component)管理集群的整体状态:
公开 Kubernetes HTTP API 的核心组件服务器。
Kubernetes HTTP API:
它是一个标准的 RESTful API,您可以通过 HTTP/HTTPS 请求来管理整个集群。无论您使用何种工具(如
kubectl、仪表板或客户端库),最终所有指令都会被转换成对 Kubernetes API 的调用。Kubernetes 中的一切(如 Pod、Service、Deployment、Namespace 等)都被抽象为 API 对象。Kubernetes API 提供了对这些对象的增(Create)、删(Delete)、改(Update)、查(Get/Watch) 等全套操作。
etcd
具备一致性和高可用性的键值存储,用于所有 API 服务器的数据存储。
查找尚未绑定到节点的 Pod,并将每个 Pod 分配给合适的节点。
运行控制器来实现 Kubernetes API 行为。
控制器有许多不同类型。以下是一些例子:
- Node 控制器:负责在节点出现故障时进行通知和响应
- Job 控制器:监测代表一次性任务的 Job 对象,然后创建 Pod 来运行这些任务直至完成
- EndpointSlice 控制器:填充 EndpointSlice 对象(以提供 Service 和 Pod 之间的链接)。
- ServiceAccount 控制器:为新的命名空间创建默认的 ServiceAccount。
cloud-controller-manager (optional)
与底层云驱动集成。
Node 组件
在每个节点上运行,维护运行的 Pod 并提供 Kubernetes 运行时环境:
在集群的每个节点上运行,确保 Pod 及其容器正常运行。
kubelet 接收一组通过各类机制提供给它的 PodSpec,确保这些 PodSpec 中描述的容器处于运行状态且健康。 kubelet 不会管理不是由 Kubernetes 创建的容器。
kube-proxy(可选)
维护节点上的网络规则以实现 Service 的功能。
kube-proxy 是集群中每个节点(node)上所运行的网络代理, 实现 Kubernetes 服务(Service) 概念的一部分。
kube-proxy 维护节点上的一些网络规则, 这些网络规则会允许从集群内部或外部的网络会话与 Pod 进行网络通信。
如果操作系统提供了可用的数据包过滤层,则 kube-proxy 会通过它来实现网络规则。 否则,kube-proxy 仅做流量转发。
如果你使用网络插件为 Service 实现本身的数据包转发, 并提供与 kube-proxy 等效的行为,那么你不需要在集群中的节点上运行 kube-proxy。
这个基础组件使 Kubernetes 能够有效运行容器。 它负责管理 Kubernetes 环境中容器的执行和生命周期。
Kubernetes 支持许多容器运行环境,例如 containerd、 CRI-O 以及 Kubernetes CRI (容器运行环境接口) 的其他任何实现。
你的集群可能需要每个节点上运行额外的软件;例如,你可能还需要在 Linux 节点上运行 systemd 来监督本地组件。
插件(Addons)
插件使用 Kubernetes 资源(DaemonSet、 Deployment 等)实现集群功能。 因为这些插件提供集群级别的功能,插件中命名空间域的资源属于 kube-system 命名空间。
下面描述众多插件中的几种。
集群 DNS 是一个 DNS 服务器,和环境中的其他 DNS 服务器一起工作,它为 Kubernetes 服务提供 DNS 记录。
Kubernetes 启动的容器自动将此 DNS 服务器包含在其 DNS 搜索列表中。
Web 界面(Dashboard)
通过 Web 界面进行集群管理。
容器资源监控 将关于容器的一些常见的时序度量值保存到一个集中的数据库中,并提供浏览这些数据的界面。
用于将容器日志保存到中央日志存储。
网络插件
网络插件 是实现容器网络接口(CNI)规范的软件组件。它们负责为 Pod 分配 IP 地址,并使这些 Pod 能在集群内部相互通信。
更多推荐



所有评论(0)