Kubernetes 完全指南:从集群架构到应用模型
Kubernetes 完全指南:从集群架构到应用模型

文章目录
Kubernetes(常简称为 K8s)是一个开源的容器编排平台,用于自动化部署、扩缩和管理容器化应用。它的核心理念是 声明式配置与 自动化运维:用户通过描述期望的最终状态(例如“运行 3 个 nginx 副本”),系统则持续协调实际状态与之匹配。这种基于控制器和 API 的设计,使得 Kubernetes 成为云原生时代的通用应用底座。
本文将全面介绍 Kubernetes 的两大支柱:集群架构组件(支撑系统的物理与逻辑部件)与应用模型(用于定义和管理应用的 API 对象)。通过理解它们如何协同工作,你将掌握 Kubernetes 的核心原理与实践方法。
一、Kubernetes 集群架构
一个 Kubernetes 集群由**控制平面(Control Plane)和工作节点(Worker Nodes)**构成。控制平面负责全局决策与状态管理,工作节点负责运行实际的容器化应用。
架构速览:你可以想象一个典型的集群包含至少一个控制平面节点(通常为3个以实现高可用)和多个工作节点。控制平面节点上运行着API Server、etcd、Scheduler、Controller Manager等组件;工作节点上运行着kubelet、kube-proxy和容器运行时。所有组件通过API Server进行通信,形成一个有机整体。
1.1 控制平面组件
控制平面组件对集群做出全局决策,并存储所有状态数据。它们通常部署在专用节点上以保证稳定性。
API Server(kube-apiserver)
API Server 是整个集群的“交通枢纽”,它暴露了 Kubernetes API,供用户、命令行工具(如 kubectl)以及内部组件通信。所有对集群的操作请求都经过 API Server,它会执行认证(Authentication)、**授权(Authorization)和准入控制(Admission Control)**三层安全校验,然后将资源状态持久化到后端存储中。API Server 是唯一直接与 etcd 交互的组件。
etcd
etcd 是一个高可用、强一致性的分布式键值存储,作为 Kubernetes 的后端数据库。它保存了所有集群数据,包括 Pod、Service、Deployment 等资源的定义和当前状态。etcd 通常以奇数个节点集群部署,并基于 Raft 共识算法确保数据一致性(例如,3节点集群可容忍1节点故障)。etcd 被视为集群的“真相来源”,定期备份 etcd 数据是灾难恢复的关键。
Scheduler(kube-scheduler)
Scheduler 负责监视新创建的、尚未分配到节点的 Pod,并根据一系列策略(如资源需求、节点亲和性、污点容忍等)选择一个最合适的节点运行该 Pod。调度决策会考虑单个 Pod 和集群整体的资源状况、硬件/软件约束以及高可用要求。常见的调度策略包括:nodeSelector(节点标签选择)、节点亲和性/反亲和性、Pod 亲和性/反亲和性,以及自定义调度器扩展。
Controller Manager(kube-controller-manager)
Controller Manager 运行着多个控制器进程,每个控制器通过 API Server 监视集群状态,并努力将当前状态调整为期望状态。这些控制器并发运行,各自负责不同的资源类型。常见的内置控制器包括:
- 节点控制器:监控节点健康,处理节点宕机时的 Pod 驱逐。
- 副本控制器:确保指定数量的 Pod 副本正在运行(Deployment 等高级资源依赖此逻辑)。
- 端点控制器:维护 Service 与 Pod 之间的端点(Endpoints)对象。
- Service 账户与令牌控制器:管理命名空间中的默认账户和 API 访问令牌。
- 其他控制器(如 Namespace、Job、CronJob 等)。
所有控制器被编译成单个二进制文件并作为单个进程运行,以降低复杂性。
Cloud Controller Manager(cloud-controller-manager)
这是一个可选组件,用于将 Kubernetes 与特定云服务商(如 AWS、GCP、Azure)的 API 集成。它运行云平台相关的控制器,例如:
- 节点控制器:检查云平台以确定节点是否已被删除。
- 路由控制器:在云基础设施中设置网络路由。
- 服务控制器:创建、更新和删除云负载均衡器(当 Service 类型为 LoadBalancer 时)。
引入 Cloud Controller Manager 使得核心 Kubernetes 代码与云平台逻辑解耦,便于云原生扩展。在自建机房(on-premise)环境中,通常不需要此组件。
1.2 工作节点组件
工作节点是运行容器化应用的机器(物理机或虚拟机),每个节点上都运行着必要的代理服务。
kubelet
kubelet 是运行在每个节点上的主要代理,它负责确保节点上的容器按照 PodSpec(Pod 的描述)运行。kubelet 会监视 API Server 上分配给本节点的 Pod,并通过容器运行时接口(CRI)与底层的容器运行时交互,以启动、停止容器,并定期上报节点和 Pod 的状态给控制平面。它还负责执行存活探针(livenessProbe)和就绪探针(readinessProbe),以实现应用健康检查和流量切换。
container runtime(容器运行时)
容器运行时是实际运行容器的软件,例如 Docker、containerd、CRI-O 等。Kubernetes