目录
一、Kubernetes 是什么?
核心功能概览
二、部署演进:从物理机到容器
1. 传统部署时代
2. 虚拟化部署时代
3. 容器部署时代
三、Kubernetes 集群架构
1. 控制平面组件(集群大脑)
(1)kube-apiserver
(2)etcd
(3)kube-scheduler
(4)kube-controller-manager
(5)cloud-controller-manager
2. 节点组件(工作负载载体)
(1)kubelet
(2)kube-proxy
(3)容器运行时(CRI)
3. 集群插件(扩展功能组件)
(1)网络与网络策略
(2)服务发现
(3)可视化与控制
(4)基础设施
四、标签与选择算符
标签的用途
标签规范
常用标签示例
五、总结
一、Kubernetes 是什么?
Kubernetes(简称 K8s)源自希腊语 “舵手”,因 K 与 s 之间有 8 个字符得名,由 Google 在 2014 年开源,基于其十几年大规模容器运行经验打造,是用于自动化部署、扩展和管理容器化应用的开源平台。
它并非传统 PaaS 系统,而是提供弹性运行分布式系统的框架,核心价值是解决容器在生产环境中的自动化管理问题:当容器故障时自动替换、根据负载自动扩缩容、实现跨节点通信与资源调度,让应用无需人工干预即可稳定运行。
核心功能概览
表格
| 功能 | 说明 |
|---|---|
| 服务发现与负载均衡 | 通过 DNS 或 IP 暴露容器,自动分配流量,保障服务稳定 |
| 存储编排 | 支持挂载本地存储、云存储等多种存储系统 |
| 自动部署与回滚 | 以受控速率更新容器状态,不中断业务实现版本切换 |
| 资源调度 | 按 CPU / 内存需求将容器调度到最优节点,高效利用资源 |
| 自我修复 | 重启故障容器、节点失效时重新调度,健康检查不响应的容器 |
| 密钥与配置管理 | 安全存储密码、令牌等敏感信息,无需重建镜像即可更新配置 |
| 水平扩缩容 | 基于 CPU 使用率或命令自动调整应用实例数量 |
| 批处理执行 | 管理批处理和 CI/CD 工作负载,支持失败容器替换 |
| IPv4/IPv6 双栈 | 为 Pod 和 Service 分配双栈地址 |
| 可扩展设计 | 支持自定义扩展集群功能,无需修改上游代码 |
二、部署演进:从物理机到容器
1. 传统部署时代
直接在物理服务器运行应用,存在资源分配不均(单个应用占用过多资源导致其他应用性能下降)、资源利用率低(空闲资源无法复用)、硬件成本高的问题。
2. 虚拟化部署时代
通过虚拟机(VM)隔离应用,实现资源更高效利用和弹性扩展,但每个 VM 包含完整操作系统,存在资源开销大、启动慢的缺点。
3. 容器部署时代
容器共享主机操作系统内核,比 VM 更轻量,具备独立文件系统、进程空间,实现应用与底层架构分离,支持跨云 / 跨系统移植,优势包括:
- 敏捷创建与部署,镜像构建高效
- 持续集成 / 部署,镜像不可变性支持可靠回滚
- 开发与运维分离,应用与基础架构解耦
- 跨环境一致性,本地与云端运行效果一致
- 微服务架构支持,应用解耦为独立组件
- 资源隔离保障应用性能稳定
三、Kubernetes 集群架构
一个 Kubernetes 集群由 ** 控制平面(Control Plane)和节点(Node)** 组成,控制平面负责全局决策与集群管理,节点运行容器化应用 Pod。
1. 控制平面组件(集群大脑)
控制平面组件对集群做出全局决策,检测并响应集群事件,可运行在集群任意节点,生产环境中通常部署在专用节点以保证稳定性。
(1)kube-apiserver
- 核心作用:Kubernetes API 服务器,是控制平面的前端,所有集群操作的入口,支持水平扩展,通过多实例部署实现负载均衡。
- 核心功能:验证并处理所有 API 请求,是集群各组件通信的枢纽。
(2)etcd
- 核心作用:集群数据的后端存储,是一致、高可用的键值存储系统,保存所有集群数据(配置、状态、元数据)。
- 核心功能:保证数据一致性和可靠性,是集群的 “数据库”。
(3)kube-scheduler
- 核心作用:调度器,监视新创建且未分配节点的 Pod,为其选择合适的运行节点。
- 调度考量因素:资源需求、硬件 / 软件约束、亲和性 / 反亲和性、数据局部性、负载干扰等。
(4)kube-controller-manager
保证实际状态 和 理想状状态一致
- 核心作用:运行各类控制器进程的组件,逻辑上每个控制器独立运行,实际编译为单一进程。
- 常见控制器:
- 节点控制器:节点故障时的检测与响应
- Job 控制器:管理一次性任务的 Pod 创建与完成
- EndpointSlice 控制器:建立 Service 与 Pod 的连接
- ServiceAccount 控制器:为新命名空间创建默认服务账户
(5)cloud-controller-manager
- 核心作用:云控制器管理器,嵌入特定云平台的控制逻辑,连接集群与云提供商 API。
- 说明:仅在云环境运行,本地学习环境通常无此组件。
2. 节点组件(工作负载载体)
节点组件运行在每个节点上,负责维护 Pod 运行状态,提供 Kubernetes 运行时环境。
(1)kubelet
- 核心作用:节点代理程序,运行在每个节点上,确保 Pod 内容器正常运行。
- 核心功能:接收控制平面指令,管理 Pod 生命周期,监控容器健康状态,不管理非 Kubernetes 创建的容器。
(2)kube-proxy
- 核心作用:网络代理,实现 Kubernetes Service 功能,维护节点网络规则,允许集群内外与 Pod 通信。
- 说明:若使用实现等效功能的网络插件(如部分第三方插件),可无需运行 kube-proxy。
(3)容器运行时(CRI)
- 核心作用:管理容器的执行与生命周期,支持 containerd、CRI-O 等符合 CRI 规范的实现。
- 说明:Kubernetes 1.24 + 不再直接支持 Docker,需通过 cri-dockerd 适配 Docker 作为运行时。
3. 集群插件(扩展功能组件)
插件通过 Kubernetes 资源(DaemonSet、Deployment 等)实现集群级功能,资源默认位于 kube-system 命名空间。
(1)网络与网络策略
- Calico:支持灵活网络选项,提供网络策略功能,实现 Pod 间通信与访问控制
- Flannel:覆盖式网络方案,实现容器跨节点通信
- Gateway API:标准化服务网络模型,提供可扩展的应用程序接口
(2)服务发现
- CoreDNS:集群内 DNS 服务器,为服务提供域名解析,实现服务发现
(3)可视化与控制
- Dashboard:网页控制台,支持集群管理、应用部署与故障排查
(4)基础设施
- KubeVirt:在 Kubernetes 上运行虚拟机的插件,提供高性能虚拟机部署能力
四、标签与选择算符
标签(Labels)是附加到 Kubernetes 对象(Pod、Node、Service 等)的键值对,不影响资源功能,主要用于资源标记、管理与筛选。
标签的用途
- 选择器:Service 通过标签选择器定位并路由流量到特定 Pod
- 组织分类:通过标签区分开发 / 生产环境、不同版本应用
- 批量管理:基于标签实现批量删除、更新等操作
标签规范
- 键:可选前缀(DNS 子域格式,不超过 253 字符)+ 名称(≤63 字符,字母数字开头 / 结尾,支持 -、_、.),如
app.kubernetes.io/component: database - 值:≤63 字符(可为空),字母数字开头 / 结尾,支持 -、_、.
常用标签示例
- 版本标签:
version: v1.1.0 - 环境标签:
env: dev - 应用标签:
app: nginx
五、总结
Kubernetes 通过控制平面实现集群全局管理,节点组件保障工作负载运行,插件扩展集群功能,标签实现资源灵活管理,形成了一套自动化、可扩展、高可用的容器编排体系。理解各组件分工与交互逻辑,是掌握 Kubernetes 的核心基础。