Kubernetes 组件

Kubernetes 集群由作为控制平面一部分的组件和一组称为节点的机器组成。

当你部署 Kubernetes 时,你会得到一个集群。

Kubernetes 集群由一组工作机器组成,称为 节点,这些机器运行容器化应用程序。每个集群至少有一个工作节点。

工作节点托管 Pod,这些 Pod 是应用程序工作负载的组件。 控制平面 管理集群中的工作节点和 Pod。在生产环境中,控制平面通常运行在多台计算机上,而集群通常运行多个节点,从而提供容错能力和高可用性。

本文档概述了完整且可正常工作的 Kubernetes 集群所需的各种组件。

Components of Kubernetes

Kubernetes 集群的组件

控制平面组件

控制平面的组件对集群做出全局决策(例如,调度),以及检测和响应集群事件(例如,当 Deployment 的 副本 字段未满足时启动新的 Pod)。

控制平面组件可以在集群中的任何机器上运行。但是,为简单起见,安装脚本通常会在同一台机器上启动所有控制平面组件,并且不会在这台机器上运行用户容器。有关跨多台机器运行的示例控制平面设置,请参阅使用 kubeadm 创建高可用性集群

kube-apiserver

API 服务器是 Kubernetes 控制平面 的一个组件,它公开了 Kubernetes API。API 服务器是 Kubernetes 控制平面的前端。

Kubernetes API 服务器的主要实现是 kube-apiserver。kube-apiserver 旨在水平扩展,也就是说,它通过部署更多实例来扩展。你可以运行多个 kube-apiserver 实例,并在这些实例之间平衡流量。

etcd

一致且高可用的键值存储,用作 Kubernetes 的后端存储,用于存储所有集群数据。

如果你的 Kubernetes 集群使用 etcd 作为其后端存储,请确保你有一个针对数据的 备份 计划。

你可以在官方 文档 中找到有关 etcd 的详细信息。

kube-scheduler

控制平面组件,用于监视新创建的、没有分配 节点Pod,并为它们选择要运行的节点。

调度决策中考虑的因素包括:单个和集体资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据局部性、工作负载间干扰和截止日期。

kube-controller-manager

控制平面组件,用于运行 控制器 进程。

从逻辑上讲,每个 控制器 都是一个单独的进程,但为了降低复杂性,它们都被编译成一个二进制文件并在单个进程中运行。

控制器有很多不同类型。以下是一些例子:

  • 节点控制器:负责在节点宕机时发出通知并做出响应。
  • 作业控制器:监视表示一次性任务的 Job 对象,然后创建 Pod 以运行这些任务直至完成。
  • EndpointSlice 控制器:填充 EndpointSlice 对象(以提供 Service 和 Pod 之间的链接)。
  • ServiceAccount 控制器:为新命名空间创建默认 ServiceAccount。

以上并非详尽无遗的列表。

cloud-controller-manager

Kubernetes 控制平面 的一个组件,它嵌入了特定于云的控制逻辑。云控制器管理器允许你将集群链接到云提供商的 API,并将与该云平台交互的组件与仅与集群交互的组件分离。

cloud-controller-manager 仅运行特定于你的云提供商的控制器。如果你是在自己的本地环境中运行 Kubernetes,或者是在你自己的 PC 内部的学习环境中运行 Kubernetes,则集群没有云控制器管理器。

与 kube-controller-manager 一样,cloud-controller-manager 将多个逻辑上独立的控制循环组合到一个二进制文件中,你可以将其作为单个进程运行。你可以水平扩展(运行多个副本)以提高性能或帮助容忍故障。

以下控制器可能具有云提供商依赖项:

  • 节点控制器:用于检查云提供商,以确定节点在停止响应后是否已在云中删除。
  • 路由控制器:用于在底层云基础架构中设置路由。
  • 服务控制器:用于创建、更新和删除云提供商负载均衡器。

节点组件

节点组件在每个节点上运行,维护正在运行的 Pod 并提供 Kubernetes 运行时环境。

kubelet

在集群中的每个 节点 上运行的代理。它确保 容器Pod 中运行。

kubelet 获取通过各种机制提供的一组 PodSpec,并确保这些 PodSpec 中描述的容器正在运行且健康。kubelet 不管理不是由 Kubernetes 创建的容器。

kube-proxy

kube-proxy 是一个网络代理,它在集群中的每个 节点 上运行,实现了 Kubernetes Service 概念的一部分。

kube-proxy 维护节点上的网络规则。这些网络规则允许来自集群内部或外部的网络会话与你的 Pod 进行网络通信。

如果操作系统有数据包过滤层并且可用,kube-proxy 将使用它。否则,kube-proxy 会自行转发流量。

容器运行时

一个基本组件,使 Kubernetes 能够有效地运行容器。它负责管理 Kubernetes 环境中容器的执行和生命周期。

Kubernetes 支持 containerdCRI-O 等容器运行时,以及 Kubernetes CRI(容器运行时接口) 的任何其他实现。

附加组件

插件使用 Kubernetes 资源(守护进程集部署 等)来实现集群功能。由于这些资源提供的是集群级别的功能,因此插件的命名空间资源属于 kube-system 命名空间。

以下介绍了部分插件;有关可用插件的完整列表,请参阅插件

DNS

虽然其他插件不是严格要求的,但所有 Kubernetes 集群都应该有集群 DNS,因为很多示例都依赖于它。

集群 DNS 是一个 DNS 服务器,它作为您环境中其他 DNS 服务器的补充,为 Kubernetes 服务提供 DNS 记录。

Kubernetes 启动的容器会在其 DNS 搜索中自动包含此 DNS 服务器。

Web 用户界面(仪表板)

仪表板 是一个通用的、基于 Web 的 Kubernetes 集群用户界面。它允许用户管理和排除集群中运行的应用程序以及集群本身的故障。

容器资源监控

容器资源监控 将有关容器的通用时间序列指标记录到中央数据库中,并提供用于浏览该数据的用户界面。

集群级日志记录

集群级日志记录 机制负责将容器日志保存到具有搜索/浏览界面的中央日志存储。

网络插件

网络插件是实现容器网络接口 (CNI) 规范的软件组件。它们负责为 Pod 分配 IP 地址,并使它们能够在集群内相互通信。

下一步

详细了解以下内容

上次修改时间:2024 年 5 月 8 日上午 9:06(太平洋标准时间):使用选项在点击图像时放大 (a449f41af4)