学习 Kubernetes 最容易陷入两个误区:只背命令,或者一开始就堆很多生态工具。更有效的路线是先理解核心对象和请求链路,再通过真实应用、故障和运维任务逐层加深。下面给出一条从入门到生产运维的路线。
## 第一阶段:容器与 Linux 基础
先掌握镜像、容器、进程、网络命名空间、挂载和 cgroup。Linux 方面至少熟悉进程、端口、DNS、路由、文件权限、systemd 和日志。
目标不是成为内核专家,而是能回答:容器为何能隔离、资源为何受限、网络包从哪里走、应用为何启动失败。
建议实验:
- 构建一个最小 Web 镜像。
- 以非 root 用户运行。
- 挂载配置和数据目录。
- 设置 CPU/内存限制并观察行为。
- 排查端口、DNS 和文件权限问题。
## 第二阶段:核心对象与声明式管理
依次学习 Namespace、Pod、Label/Selector、Deployment、Service、ConfigMap、Secret、Job 和 DaemonSet。每个对象都要理解“期望状态—控制器—实际状态”的关系。
练习时优先保留 YAML 到版本库,而不是长期依赖命令式创建。学会使用:
```bash
kubectl get
kubectl describe
kubectl logs
kubectl explain
kubectl apply
kubectl diff
```
阶段目标:能把一个带配置、探针、资源限制和 Service 的应用稳定部署出来,并能更新和回滚。
## 第三阶段:把应用真正暴露出去
学习集群网络模型、CoreDNS、Service、EndpointSlice、Ingress、TLS 和 NetworkPolicy。
完整实验应包含:
1. 前端与后端两个 Deployment。
2. 集群内通过 Service 名称通信。
3. Ingress 按域名或路径暴露服务。
4. TLS 终止。
5. 默认拒绝网络策略,再精准放行应用与 DNS。
6. 故意改错 selector、端口和 DNS,按链路排查。
## 第四阶段:配置、存储与有状态应用
理解 ConfigMap/Secret 的更新方式、emptyDir、PV、PVC、StorageClass、StatefulSet 和备份恢复。
建议部署一个数据库实验环境,但不要把“数据库能启动”当作生产方案。继续验证:Pod 重建后数据是否保留、卷能否扩容、备份能否恢复、节点故障时如何迁移。
## 第五阶段:调度、可靠性与发布
学习 requests/limits、QoS、探针、优雅终止、滚动更新、HPA、PodDisruptionBudget、亲和性、污点与容忍度。
这一步要从“资源能运行”升级到“服务能持续运行”:
- 新版本没 Ready 时不能接收流量。
- 应用终止前完成连接排空。
- 节点维护时保留足够副本。
- 高峰期能扩容,低峰期不会浪费过多资源。
- 升级失败可以快速回滚。
## 第六阶段:集群安装与生命周期
使用 kubeadm 搭建自己的实验集群,理解 API Server、etcd、Scheduler、Controller Manager、kubelet、CRI、CNI 和 CSI。
至少实践:
- 初始化控制面和加入节点。
- 证书检查与续期。
- etcd 快照和恢复。
- 节点 drain、维护与重新加入。
- 小版本升级。
- 控制面或节点故障排查。
生产高可用还涉及负载均衡、多控制面、etcd 拓扑、备份和灾难恢复,应在掌握单控制面流程后继续扩展。
## 第七阶段:安全基线
把安全作为默认配置,而不是最后补丁:
- RBAC 最小权限和专用 ServiceAccount。
- Pod Security Admission。
- 非 root、禁止提权、只读根文件系统和 seccomp。
- NetworkPolicy。
- 镜像扫描、固定摘要和供应链治理。
- etcd 加密、审计日志和运行时检测。
通过 kube-bench 等工具发现问题,再结合实际部署方式人工判断。扫描通过不代表没有风险。
## 第八阶段:可观测性与故障处理
建立指标、日志、事件和链路追踪的基本体系。重点不是安装多少工具,而是能从告警定位到用户影响和根因。
建议维护一套故障实验库:
- CrashLoopBackOff、OOMKilled、探针失败。
- Service 无 Endpoints、DNS 失败、NetworkPolicy 阻断。
- PVC Pending、卷挂载错误。
- 节点 NotReady、磁盘压力、证书过期。
- API Server 或 etcd 配置错误。
每次练习记录现象、证据、根因、修复、验证和预防项。
## 第九阶段:交付与平台化
熟悉 Helm、Kustomize、CI/CD、GitOps 和策略治理。工具选择应服务于可重复、可审计和可回滚的交付目标。
团队规模扩大后,可以建设标准模板、命名空间基线、自动策略、成本视图和自助发布入口,但不要过早隐藏 Kubernetes 的基本行为,否则平台故障时很难排查。
## 一条可执行的 12 周计划
- 第 1~2 周:容器、Linux、Pod 与 kubectl。
- 第 3~4 周:Deployment、Service、配置和探针。
- 第 5 周:DNS、Ingress 与 NetworkPolicy。
- 第 6 周:PV/PVC、StatefulSet 与备份。
- 第 7 周:调度、资源、发布与高可用。
- 第 8~9 周:kubeadm、升级、证书和 etcd。
- 第 10 周:RBAC、Pod Security 和容器加固。
- 第 11 周:监控、日志和故障注入。
- 第 12 周:完成一个端到端项目并写复盘。
## 最终项目建议
部署一个包含前端、API、数据库和定时任务的小系统,要求具备:私有镜像、配置与 Secret、Ingress TLS、NetworkPolicy、持久卷、资源限制、探针、滚动发布、备份、监控、审计与恢复文档。
当你能够在不看教程的情况下部署、升级、制造故障、定位并恢复这个项目,才真正从“会用 Kubernetes”进入“能维护 Kubernetes”。
## 参考资料
- https://kubernetes.io/docs/home/
- https://kubernetes.io/docs/concepts/
- https://kubernetes.io/docs/tasks/