Kubernetes 组件

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

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

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

worker 节点承载 Pods,它们是应用程序工作负载的组件。 控制平面 管理集群中的 worker 节点和 Pods。在生产环境中,控制平面通常跨多个计算机运行,并且集群通常运行多个节点,提供容错和高可用性。

本文档概述了您需要为一个完整且有效的 Kubernetes 集群拥有的各种组件。

Components of Kubernetes

Kubernetes 集群的组件

控制平面组件

控制平面的组件做出有关集群的全局决策(例如,调度),以及检测和响应集群事件(例如,在部署的 副本 字段未满足时启动一个新的 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

控制平面组件,监视没有分配 节点 的新创建的 Pods,并为它们选择一个节点来运行。

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

kube-controller-manager

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

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

有许多不同类型的控制器。以下是一些示例:

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

以上不是一个详尽的列表。

cloud-controller-manager

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

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

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

以下控制器可能具有云提供商依赖关系

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

节点组件

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

kubelet

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

kubelet 接受通过各种机制提供的 PodSpec 集合,并确保这些 PodSpec 中描述的容器正在运行且处于健康状态。kubelet 不管理未由 Kubernetes 创建的容器。

kube-proxy

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

kube-proxy 在节点上维护网络规则。这些网络规则允许从集群内部或外部的网络会话到你的 Pod 的网络通信。

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

容器运行时

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

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

附加组件

附加组件使用 Kubernetes 资源(DaemonSetDeployment 等)来实现集群功能。由于这些提供了集群级功能,因此附加组件的命名空间资源属于 kube-system 命名空间。

下面描述了选定的附加组件;有关可用附加组件的扩展列表,请参阅 附加组件

DNS

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

集群 DNS 服务器是环境中其他 DNS 服务器之外的 DNS 服务器,它为 Kubernetes 服务提供 DNS 记录。

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

Web UI(仪表盘)

仪表盘 是 Kubernetes 集群的通用、基于 Web 的 UI。它允许用户管理和排查集群中运行的应用程序以及集群本身。

容器资源监控

容器资源监控 将有关容器的通用时间序列指标记录在中央数据库中,并提供用于浏览这些数据的 UI。

集群级日志记录

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

网络插件

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

下一步

详细了解以下内容

最后修改时间:2024 年 5 月 8 日凌晨 1:06 PST:使用点击图片进行缩放的选项 (a449f41af4)