返回首页

Kubernetes 架构详解及示例 | 指南

本文全面介绍了 Kubernetes 架构详解及示例,分解了控制平面组件(API 服务器、etcd、调度器、控制器管理器)和工作节点元素(kubelet、kube-proxy、容器运行时)。它通过一个实际的 Nginx 部署演练来说明组件交互、自愈、扩展和滚动更新,使 Kubernetes 对初学者和实践者都易于理解。

Kubernetes 架构:实用示例指南
Advertisement 728x90

Kubernetes 架构详解及实战示例

Kubernetes 已成为容器编排领域的行业标准,但其复杂的架构常常让新手望而生畏。本指南通过结合实例的 Kubernetes 架构详解,逐一剖析每个组件,展示它们如何在生产环境中协同工作,实现应用程序的自动化部署、扩缩容和管理。

你将学到什么

学完本指南后,你将理解 Kubernetes 集群组件如何交互以可靠地运行容器化应用,并能识别每个控制平面和工作节点组件的角色。你将能够通过一个具体示例,完整解释从用户提交部署到应用可用的整个请求流程。

工作原理:分层架构与现实类比

将 Kubernetes 集群想象成一家航运公司。控制平面是公司总部,由管理者制定战略决策。工作节点则是实际运载集装箱的货船。船上的每个集装箱就是一个 Pod,即 Kubernetes 中最小的可部署单元。

Google AdInline article slot

控制平面:集群的大脑

控制平面负责管理集群状态并协调所有活动。它由以下几个关键组件构成:

kube-apiserver 扮演前台的角色——所有与集群的通信都通过此组件进行。当你运行 kubectl 命令时,API 服务器会验证你的请求、校验其合法性,并更新存储在 etcd 中的集群状态。etcd 是一个分布式键值存储系统,作为 Kubernetes 所有集群数据的后端存储。

kube-scheduler 负责监控新创建的、尚未分配节点的 Pod。它会根据资源需求、约束条件和策略,智能地选择最合适的工作节点。例如,如果你请求一个需要 GPU 的 Pod,调度器只会考虑具备 GPU 资源的节点。

Google AdInline article slot

kube-controller-manager 运行着一组控制器,持续监控集群状态并进行修正。节点控制器检测节点是否宕机,任务控制器管理一次性任务,端点切片控制器则将服务与 Pod 连接起来。

工作节点:应用运行的地方

每个工作节点运行三个核心组件:

kubelet 是主要的节点代理,确保容器按照规范在 Pod 中运行。它从 API 服务器接收 Pod 规范,并管理容器运行时来启动和监控这些容器。

Google AdInline article slot

kube-proxy 维护网络规则,允许从集群内部或外部与 Pod 通信。它通过数据包过滤规则将流量转发到正确的 Pod,从而实现服务概念。

容器运行时(如 containerd 或 CRI-O)是实际负责运行容器的软件。

实战示例:部署一个 Web 应用

让我们追踪部署 Nginx Web 服务器的完整流程:

  1. 你编写一个 Deployment YAML 文件,指定 3 个 Nginx 容器副本。
  2. 使用 kubectl apply -f deployment.yaml 提交该文件。请求到达 API 服务器
  3. API 服务器验证你的身份,并将期望状态存储在 etcd 中。
  4. 调度器检测到未调度的 Pod,并将它们分配给具有可用容量的工作节点。
  5. 在每个被分配的工作节点上,kubelet 接收 Pod 规范,并指示容器运行时拉取 Nginx 镜像并启动容器。
  6. 控制器管理器持续验证 3 个副本是否在运行,如果某个 Pod 失败,它会创建一个替代 Pod。
  7. 创建一个服务来暴露应用,kube-proxy 配置网络规则,使流量能够到达 Pod。

为什么这很重要

Kubernetes 的架构赋予了组织从根本上改变软件部署和管理方式的能力:

自我修复:如果容器崩溃或节点无响应,控制器会自动在健康节点上替换失败的 Pod,最大限度地减少停机时间。

水平扩缩容:水平 Pod 自动扩缩器可以根据 CPU 利用率或自定义指标自动调整 Pod 副本数量,使应用无需人工干预即可应对流量高峰。

滚动更新与回滚:部署支持零停机更新。你可以逐步用新版本替换旧 Pod,如果出现问题,可以立即回滚。

资源效率:调度器优化 Pod 在节点间的放置,提高资源利用率并降低基础设施成本。

数据一览

指标 详情
初始发布 Kubernetes 1.0 于 2015 年 7 月 21 日发布
控制平面节点 生产集群通常运行 3 个控制平面节点以实现高可用性
工作节点 大型集群可超过 1,000 个工作节点
每个节点的默认 Pod 数 默认最多 110 个(可配置)
API 请求延迟 在调优良好的集群中,第 99 百分位通常低于 1 秒
etcd 在 NVMe 存储上每秒可处理约 10,000 次写入

常见误区与事实

误区 事实
"Kubernetes 直接在节点上运行容器。" Kubernetes 从不直接运行容器——它们始终在 Pod 内运行,Pod 是最小的可部署单元,包含网络和存储。
"API 服务器是单点故障。" kube-apiserver 设计为通过部署多个实例并负载均衡来实现水平扩展。
"所有 Kubernetes 集群都必须运行 kube-proxy。" 网络插件可以实现自己的服务代理,在这种情况下 kube-proxy 是可选的。
"Pod 应该始终只包含一个容器。" Pod 可以包含多个紧密耦合的容器,它们共享网络和存储,例如 Web 服务器和日志记录容器。
"etcd 数据对集群运行不重要。" etcd 是所有集群数据的后端存储,你必须为其制定备份计划。

你应该如何运用这些知识

要有效使用 Kubernetes 架构:

  1. 如果你是新手,从托管 Kubernetes 开始——像 GKE、EKS 或 AKS 这样的服务抽象了控制平面管理,让你可以专注于应用。
  2. 学会阅读核心资源的 YAML 清单:Pod、Deployment、Service 和 ConfigMap。这些是你日常使用的基本构建块。
  3. 使用 kubectl 的 describe 和 logs 命令进行故障排除——理解组件如何通信将帮助你更快地诊断问题。
  4. 始终在 Deployment 清单中指定资源请求和限制。这有助于调度器做出最佳放置决策,并防止资源匮乏。
  5. 在了解基本架构后,探索网络策略以保护 Pod 之间的通信。

来源

  • Kubernetes 官方文档 – 集群架构
  • SLAC 国家加速器实验室 Kubernetes 培训文档
  • KodeKloud Kubernetes 入门笔记
  • LabEx Kubernetes 教程与指南
  • Kubernetes 综合指南(GitHub)

— Editorial Team

Advertisement 728x90

继续阅读