Kubernetes 学习路径:从心智模型到生产运维

使用方式

这条路径只挑三十多个页面,不是 K8s 分支的全部条目。先把这条走完,建立骨架,再按分类扩展;否则很容易在 274 个条目里迷路。

四个阶段按依赖顺序排列,每个阶段建议留 2–4 小时:

学习路径不是读完就结束。真正留下来的是“遇到现象能判断往哪查”,所以每个阶段都要故意制造一次错误。

阶段一:建立心智模型

目标:能说清镜像、容器、Pod、Deployment、Service 之间的关系,知道 kubectl 在和谁说话。

阅读顺序:

  1. docker — 镜像和容器的区别,先建立“进程被隔离”的直觉。
  2. containerd — 集群里真正运行容器的组件,理解 CRI。
  3. pod — Kubernetes 的最小调度单元,为什么一个 Pod 可以有多个容器。
  4. deployment — 副本、滚动更新和 ReplicaSet 的关系。
  5. service — Pod IP 会变,Service 为什么能提供稳定入口。
  6. namespace — 逻辑隔离,以及“为什么 -n 总是忘”。
  7. kubectl — 唯一操作入口,先学会 get、describe、logs、events。
  8. kubeadm — 一个集群由 apiserver、etcd、scheduler、controller-manager、kubelet 组成。
  9. kind — 本地起集群,用于后面的动手任务。

动手任务:用 kind 起一个本地集群,部署 nginx,暴露 Service,并用 port-forward 访问。

kind create cluster --name learn
kubectl create deployment web --image=nginx:1.27
kubectl expose deployment web --port=80
kubectl get pods -o wide
kubectl port-forward svc/web 8080:80

过关标准:

阶段二:能独立部署一个服务

目标:从镜像到可访问服务,能处理配置、密钥、存储、入口和打包。

阅读顺序:

  1. configmap — 配置和镜像分离。
  2. secret — 密钥不是普通配置;Base64 不是加密。
  3. pvc — 有状态服务为什么需要持久卷。
  4. storageclass — PVC 如何自动绑定到实际存储。
  5. nginx-ingress — 集群外的流量怎么进来。
  6. helm — 把一组 YAML 打包成可复用的 Chart。
  7. kustomize — 不写模板,用 overlay 管理环境差异。
  8. hpa — 什么时候扩容,扩的是副本还是资源。

动手任务:部署一个带 ConfigMap、Secret 和 PVC 的小应用,用 Ingress 暴露,再用 Helm 打包一次。

kubectl create namespace demo
kubectl -n demo create configmap app-config --from-literal=APP_MODE=prod
kubectl -n demo create secret generic app-secret --from-literal=DB_PASSWORD='change-me'
kubectl -n demo get configmap,secret,pvc,ingress

过关标准:

阶段三:能定位常见故障

目标:看到现象能按顺序查,不靠猜,也不上来就重启。

阅读顺序:

  1. k8s-troubleshooting-cheatsheet — 先建立排查顺序。
  2. pod-pending — 调度失败,容器还没启动。
  3. crashloopbackoff — 容器启动了但反复退出。
  4. imagepullbackoff — 镜像拉不到,先分清认证、网络和 tag。
  5. oom-killed — 被内核杀掉,不是应用自己退出。
  6. k8s-dns-failed — 服务名解析失败,先查 CoreDNS 再查 NetworkPolicy。
  7. k8s-pvc-pending — 存储绑定失败。
  8. probe-failed — 探针配置错误会让正常应用被重启。
  9. k8s-node-disk-pressure — 节点压力导致 Pod 被驱逐。
  10. kubectl-debug — 容器里没有 shell 时怎么查。

动手任务:在测试命名空间故意制造三种故障,每次先写下判断,再用 describe、events、logs 验证。

过关标准:

阶段四:能负责一个生产集群

目标:权限、隔离、可用性、可观测、发布、备份和升级都能说清楚。

阅读顺序:

  1. rbac — 谁能对什么资源做什么。
  2. networkpolicy — 默认全通,策略要显式写。
  3. resource-quota — 命名空间级别的资源上限。
  4. poddisruptionbudget — 节点维护时至少保留多少副本。
  5. cert-manager — 证书自动签发和续期。
  6. prometheus — 指标、告警和 SLO 的数据基础。
  7. argocd — Git 是唯一事实来源,发布可审计、可回滚。
  8. velero — 集群资源和 PV 的备份恢复。
  9. k8s-production-checklist — 上线前逐条自查。
  10. k8s-upgrade-checklist — 升级前逐条自查。

动手任务:在一个测试命名空间里配置 ResourceQuota、LimitRange、NetworkPolicy 和 PDB;用 Argo CD 同步一个应用;用 Velero 备份并恢复到新命名空间。

过关标准:

常见误区

读完自测

合上页面,先回答,再展开对照。

  1. 为什么顺序是 Pod → Deployment → Service,而不是先学 Helm?
  2. Pod 一直 Pending,kubectl logs 为什么没有输出?应该先看什么?
  3. 负责一个生产集群,至少要说清哪四类事情?
答案
  1. Helm 只是把 Kubernetes 对象打包成模板的工具。不理解 Pod 如何被调度、Deployment 如何维持副本、Service 如何选中 Pod,学 Helm 只会变成背模板,出错时无法判断是哪一层的问题。
  2. Pending 表示 Pod 还没有被调度到节点,或者容器还没有创建,所以没有应用日志。先 kubectl describe pod 看 Events:资源不足、污点/亲和性不满足、PVC 未绑定、镜像太大等都会停在这一步。
  3. 权限与隔离(RBAC、NetworkPolicy、配额)、可用性与容量(副本、PDB、扩缩容)、可观测与告警(指标、日志、SLO)、发布与恢复(GitOps、回滚、备份、升级)。

相关条目