| 备注 | 修改日期 | 修改人 |
| 创建版本 | 2025-12-29 19:33:33[当前版本] | 文艺范儿 |
Kubernetes(常简称 k8s,K 与 s 之间有 8 个字母)是一个开源的容器编排平台,用于自动化部署、弹性伸缩、高可用管理容器化应用。简单来说,Kubernetes 是“数据中心的操作系统”——就像 Linux 管理单台计算机的进程、内存、存储一样,Kubernetes 管理跨多台服务器的容器化应用。
在 Kubernetes 出现前,企业使用 Docker 等容器技术时会面临:
| 痛点 | Kubernetes 解决方案 | 价值 |
|---|---|---|
如何调度数百个容器到多台机器? |
智能调度算法(基于资源需求、亲和性等) |
资源利用率提升 30-50% |
如何保证应用故障时自动恢复? |
声明式 API + 控制器模式(持续对比“期望状态”与“实际状态”) |
可用性从 99%→99.9% |
如何实现滚动更新不中断业务? |
滚动更新(RollingUpdate)、蓝绿部署(Blue-Green)策略 |
零停机部署 |
如何统一管理网络、存储、配置? |
Service(服务发现)、PersistentVolume(持久存储)、ConfigMap(配置管理) |
运维复杂度降低 60% |
Kubernetes 采用中心化的控制平面(Control Plane)+ 分布式的工作节点(Node)架构,各组件通过 API Server 统一协作。
graph TB
subgraph "控制平面(Master)"
A[API Server] --> B[etcd]
A --> C[Scheduler]
A --> D[Controller Manager]
end
subgraph "工作节点(Node 1..N)"
E1[Kubelet] --> F1[容器运行时<br/>Containerd]
E2[Kubelet] --> F2[容器运行时<br/>Containerd]
E1 --> G1[kube-proxy]
E2 --> G2[kube-proxy]
end
A --> E1
A --> E2
C --> E1
C --> E2
| 组件 | 职责 | 关键特性 |
|---|---|---|
API Server |
1. 提供 RESTful API(kubectl 的通信对象); 2. 认证、鉴权、准入控制(安全网关); 3. 唯一可读写 etcd 的组件。 |
高可用部署(多副本)、支持水平扩展 |
etcd |
分布式键值存储,保存整个集群的状态(如 Pod、Service、ConfigMap 等资源对象)。 |
强一致性(Raft 协议)、定期备份(生产必须) |
Scheduler |
负责将 Pod 调度到合适的 Node(基于资源需求、亲和性、污点等策略)。 |
可扩展调度框架(支持自定义调度器) |
Controller Manager |
运行各种控制器(如 Deployment、StatefulSet 控制器),确保集群实际状态与期望状态一致。 |
声明式 API 的核心实现 |
| 组件 | 职责 | 生产级要求 |
|---|---|---|
Kubelet |
1. 管理本节点容器的生命周期(创建/启动/停止); 2. 向 API Server 报告节点状态(如资源使用)。 |
配置资源预留(防止节点资源耗尽) |
容器运行时 |
负责运行容器(如 Containerd、CRI-O),实现 OCI 标准。 |
推荐 Containerd(更轻量、安全) |
kube-proxy |
维护节点网络规则,实现 Service 的负载均衡(如 ClusterIP 访问)。 |
支持 IPVS 模式(高性能、大规模集群) |
要理解 Kubernetes,必须掌握其核心抽象对象(资源模型):
| 对象 | 作用 | 类比 | 生产示例 |
|---|---|---|---|
Pod |
Kubernetes 的最小调度单位,包含 1 个或多个容器(共享网络、存储命名空间)。 |
虚拟机中的“进程组” |
一个 Nginx Pod 包含:Nginx 容器 + 日志采集 Sidecar 容器 |
Deployment |
管理无状态应用的副本数,支持滚动更新、回滚。 |
进程管理器(如 systemd) |
定义 3 个副本的 Nginx 服务,自动替换故障 Pod |
StatefulSet |
管理有状态应用(如 MySQL、Redis),提供稳定的网络标识、持久存储。 |
数据库集群管理器 |
MySQL 主从集群,每个 Pod 有固定域名(mysql-0.mysql) |
Service |
定义一组 Pod 的访问策略(负载均衡、服务发现)。 |
负载均衡器(如 Nginx) |
将流量分发到 3 个 Nginx Pod(ClusterIP: 10.96.0.1) |
ConfigMap |
存储非敏感配置(如环境变量、配置文件)。 |
配置文件中心 |
存储 Nginx 的 nginx.conf 配置 |
Secret |
存储敏感信息(如密码、密钥),Base64 编码存储。 |
保险柜 |
存储数据库密码(生产需加密) |
PersistentVolume |
抽象持久化存储(如云硬盘、NFS),与应用解耦。 |
云硬盘 |
为 MySQL Pod 提供 100G SSD 存储 |
Namespace |
逻辑隔离资源(如开发、测试、生产环境)。 |
Linux 的 chroot |
将不同业务部门的应用隔离 |
当执行 kubectl run nginx —image=nginx:alpine —replicas=3 时:
| 挑战 | 应对策略(SRE 视角) |
|---|---|
复杂度高 |
1. 采用托管服务(如 EKS、ACK); 2. 制定标准化部署模板(Helm Charts); 3. 运维人员需系统培训(CKA 认证)。 |
网络性能 |
1. 选择高性能 CNI 插件(如 Cilium + eBPF); 2. 优化 Service 的 kube-proxy 模式(IPVS 替代 iptables)。 |
存储管理 |
1. 使用 CSI 驱动程序对接企业存储; 2. 制定存储卷备份策略(Velero)。 |
安全加固 |
1. 启用 Pod 安全策略(PSP/PSA); 2. 镜像安全扫描(Trivy); 3. 网络策略(NetworkPolicy)。 |