Kubernetes 知识体系
本知识库面向需要开发、发布和运维 Kubernetes 工作负载的工程师。内容以原生 Kubernetes 为主,命令示例默认使用 Bash、kubectl 和命名空间 demo。
版本基线
截至 2026-08-12,Kubernetes 最新稳定版是 v1.36.3,上游维护的三个次要版本分支是 1.36、1.35、1.34。版本信息以 stable.txt、GitHub v1.36.3 Release 和版本偏差策略为依据。预发布的 v1.37.0-rc.0 不是生产稳定版。详见版本与环境。
阅读地图
| 阶段 | 章节 | 目标 |
|---|---|---|
| 入门 | 版本与环境 | 选版本、安装客户端、安全连接集群 |
| 原理 | 架构与 API | 理解控制面、节点、声明式控制循环 |
| 原理 | 对象与清单 | 正确编写 YAML、标签、选择器和所有权关系 |
| 操作 | kubectl 基础 | 查询、创建、更新、删除和查看日志 |
| 操作 | kubectl 进阶 | JSONPath、调试、代理、补丁和服务端应用 |
| 应用 | 工作负载 | 选择 Pod、Deployment、StatefulSet、DaemonSet、Job |
| 应用 | 配置管理 | 管理 ConfigMap、Secret、ServiceAccount 和环境变量 |
| 基础设施 | 存储 | 理解 Volume、PV、PVC、StorageClass 和快照 |
| 基础设施 | 网络 | 理解 Pod 网络、Service、DNS、Ingress、Gateway 和策略 |
| 基础设施 | 调度 | 控制节点选择、亲和性、污点、拓扑分布和优先级 |
| 可靠性 | 资源与健康检查 | 配置 requests/limits、QoS、探针和生命周期 |
| 可靠性 | 扩缩容 | 使用 HPA、VPA、节点扩容并避免控制器冲突 |
| 安全 | RBAC 与安全 | 最小权限、Pod Security、Secret 与供应链防护 |
| 运维 | 可观测性 | 统一指标、日志、事件、审计和告警 |
| 运维 | 排障手册 | 从症状沿 Pod、网络、存储、节点逐层定位 |
| 运维 | 升级与维护 | 规划版本、备份、滚动升级、节点维护与回退 |
| 生产 | 生产实践 | 落地高可用、变更治理、容量、安全和灾备基线 |
| 速查 | 命令速查 | 按场景快速找到常用与高风险命令 |
核心心智模型
Kubernetes 不是“运行容器的命令行工具”,而是一个持续协调期望状态与实际状态的分布式控制系统:
- 用户向 API Server 提交对象的期望状态。
- API Server 完成认证、鉴权、准入和持久化。
- 控制器观察对象并创建或更新下游对象。
- Scheduler 为未绑定的 Pod 选择节点。
- 节点上的 kubelet 通过容器运行时、网络和存储插件实现 Pod。
- 状态变化重新写回 API,控制循环持续收敛。
因此,生产操作应优先修改声明式配置并交给控制器收敛;直接改某个 Pod 通常只会得到暂时效果。
示例约定
bash
# 明确当前上下文和命名空间,避免误操作
kubectl config current-context
kubectl config set-context --current --namespace=demo
# 只读命令可以先执行;写操作先做服务端 dry-run
kubectl apply --server-side --dry-run=server -f app.yaml
kubectl diff -f app.yaml
kubectl apply -f app.yaml<pod>、<node>、<namespace>是占位符,执行前必须替换。- 命令未写
-n时,使用当前上下文的默认命名空间。 - YAML 中镜像均固定版本;生产环境建议进一步固定镜像 digest。
kubectl run、kubectl create适合调试或生成草稿,长期配置应进入 Git。- 文档中的云负载均衡器、CSI、CNI、Gateway API 等能力取决于集群发行版和已安装插件。
操作安全等级
| 等级 | 典型操作 | 要求 |
|---|---|---|
| 只读 | get、describe、logs、top、auth can-i | 核对上下文和命名空间 |
| 可回滚写入 | apply、scale、rollout restart | 先 diff/dry-run,观察 rollout |
| 高风险 | delete、drain、cordon、强制替换 | 明确对象、影响窗口和恢复步骤 |
| 灾难级 | 删除命名空间/PV、--force --grace-period=0、etcd 恢复 | 变更审批、备份、双人复核、演练 |
不要复制即执行
执行任何写命令前,至少运行 kubectl config current-context、kubectl cluster-info 和目标对象的只读查询。生产集群不要依赖 shell 历史中的默认命名空间。