Kubernetes 容器云学习路线总览

🚀 Kubernetes 容器云 30 天学习路线

📜 计划公约

以下约定为学习计划的基础环境规范,每日操作基于此环境进行。违反约定可能导致环境不稳定或学习效果打折扣。

一、控制平面(Control Plane / Master 节点)

项目 最小规格 最佳规格 说明
vCPU 2 核 4 核 kube-apiserver、etcd 吃 CPU
内存 4 GB 8 GB etcd 需常驻 2GB+ 缓存
磁盘 40 GB 100 GB SSD etcd 对磁盘 I/O 敏感,SSD 必备
操作系统 CentOS Stream 9 CentOS Stream 9 内核 5.14+,RHEL 兼容生态
内核版本 ≥ 5.4 5.14+ 支持 cgroup v2、eBPF
主机名 k8s-master 部署后不可更改
网络 仅主机 / NAT 内网 IP 固定,不做 DHCP

为什么控制平面对磁盘敏感? etcd 是 K8s 的”大脑”,所有集群状态都存储在 etcd 中。etcd 使用 Raft 共识算法,每次写操作都需要 fsync 落盘。如果磁盘 I/O 不足(如使用 HDD 或云盘低 IOPS),etcd 的 fsync 延迟会飙升,导致:

  • kube-apiserver 响应超时(默认 3s)
  • 控制器反复重启
  • 集群”脑裂”风险增大

经验值: etcd 所在的磁盘建议 ≥ 500 IOPS,云环境选择 “SSD 云盘”或”性能型云盘”,切勿选”高效云盘”。

二、计算平面(Compute Plane / Worker 节点)

项目 最小规格(×2 台) 最佳规格(×2 台) 说明
vCPU 2 核 4 核 运行业务 Pod
内存 2 GB 8 GB 内存是 Pod 调度瓶颈
磁盘 40 GB 100 GB SSD 容器镜像 + 本地存储
操作系统 CentOS Stream 9 CentOS Stream 9 与 Master 保持一致
内核版本 ≥ 5.4 5.15+
主机名 k8s-worker1 / k8s-worker2 唯一标识

三、集群总资源预算

方案 Master Worker × 2 总计 月费用参考(大陆云厂商)
最小方案 2C4G40G 2C2G40G 6C8G120G 约 ¥200-300/月
推荐方案 4C8G100G 4C8G100G 12C24G300G 约 ¥500-800/月
竞赛模拟方案 4C8G100G 4C8G100G × 3 16C32G400G 约 ¥800-1200/月

省钱技巧:

  • 使用竞价实例/抢占式实例(价格低 60%-80%),学习时段避开竞价回收高峰
  • 不做实验时关机,云盘按量计费保留数据
  • 选择新用户首购优惠(通常 1C1G 起步的低配机型不合算,直接上 4C8G)

四、操作系统与环境公约

约定项 必须执行 原因
禁用 Swap swapoff -a + 注释 /etc/fstab kubelet 强制要求,Swap 会破坏 Pod 内存 QoS
关闭防火墙 systemctl stop firewalld && systemctl disable firewalld(学习环境) 简化网络配置;生产环境应开放特定端口
禁用 SELinux setenforce 0 + 编辑 /etc/selinux/configSELINUX=permissive 避免容器权限问题;CentOS 默认启用 SELinux
加载内核模块 br_netfilteroverlay 容器网络和存储驱动依赖
网络参数 net.bridge.bridge-nf-call-iptables = 1 桥接流量经 iptables 处理(Service 转发依赖)
容器运行时 containerd ≥ 1.6 更轻量,CKA/CKS 官方推荐
K8s 版本 v1.28 ~ v1.30 与大赛考纲对齐,不要追新
CNI 插件 Calico 支持 NetworkPolicy,大赛高频考点
Snap 卸载 不适用(CentOS 无 Snap) Snap 为 Ubuntu 专有,CentOS 无需处理
时区/NTP timedatectl set-timezone Asia/Shanghai 日志时间一致,排错不迷路

以上为环境规格约定,具体搭建步骤见 Day 01 动手实操

📋 适用对象

  • 起点:掌握 Docker 基础(Dockerfile、docker-compose、镜像构建)
  • 目标:职业技能大赛 Kubernetes 容器云方向
  • 时间:1-2 个月,每天约 4 小时
  • 环境:云服务器搭建 1 master + 2 worker 集群

🏗️ 学习方法论

1
2
3
4
5
6
7
8
9
每日节奏:
理论精讲(20%)→ 动手实操(50%)→ 排错练习(15%)→ 赛题模拟(15%)

具体时间分配(240 分钟/天):
├── 理论精讲 ~30 分钟
├── 演示示范 ~20 分钟
├── 动手实操 ~120 分钟
├── 排错练习 ~30 分钟
└── 赛题模拟 ~40 分钟

📦 模块总览

模块 主题 天数 入口 核心实操 权重
M1 集群架构与搭建 3 天 Day 01→03 手动部署 3 节点集群、etcd 备份、版本升级 🔵 基础
M2 Pod 与核心工作负载 4 天 Day 04→07 管理 Deployment/StatefulSet/DaemonSet/Job/CronJob 🔴 核心
M3 网络与服务发现 4 天 Day 08→11 Service/Ingress/NetworkPolicy/CNI 配置 🔴 核心
M4 存储与配置管理 4 天 Day 12→15 PV/PVC/ConfigMap/Secret/StorageClass 🔴 核心
M5 调度与资源管理 3 天 Day 16→18 亲和性/污点容忍/HPA/资源限制/QoS 🟡 进阶
M6 安全与认证 3 天 Day 19→21 RBAC/ServiceAccount/PodSecurity/镜像安全 🟡 进阶
M7 监控日志与排错 3 天 Day 22→24 Prometheus/EFK/故障注入/排错方法论 🟡 进阶
M8 综合实战与赛题模拟 6 天 Day 25→30 8 套完整赛题 + 限时挑战 + 全真模拟 🟢 冲刺

📁 文档目录

模块 Day 文章标题
M1 集群架构与搭建 Day 01 集群架构原理与环境准备
Day 02 多节点集群与节点管理
Day 03 集群运维与 kubectl 精通
M2 Pod 与核心工作负载 Day 04 Pod 生命周期与多容器模式
Day 05 Deployment 与 ReplicaSet
Day 06 DaemonSet、StatefulSet、Job、CronJob
Day 07 Pod 资源综合实战
M3 网络与服务发现 Day 08 Service 与集群内服务发现
Day 09 Ingress 与外部流量接入
Day 10 网络策略与 CNI 原理
Day 11 网络综合实战
M4 存储与配置管理 Day 12 ConfigMap 与 Secret
Day 13 Volume 与 PV/PVC
Day 14 StorageClass 与动态供给
Day 15 存储综合实战
M5 调度与资源管理 Day 16 调度策略与亲和性
Day 17 资源限制与 QoS
Day 18 调度综合实战
M6 安全与认证 Day 19 RBAC 权限控制
Day 20 ServiceAccount 与镜像安全
Day 21 安全综合实战
M7 监控日志与排错 Day 22 Prometheus 监控体系
Day 23 日志收集与 EFK
Day 24 故障排查实战
M8 综合实战与赛题模拟 Day 25 赛题模拟 1-3
Day 26 赛题模拟 4-5
Day 27 赛题模拟 6-7
Day 28 赛题模拟 8 + 限时挑战
Day 29 弱点回顾与强化
Day 30 全真模拟考试

📚 实践题目来源与参考

一级来源(官方权威)

来源 链接 说明
Kubernetes 官方文档 https://kubernetes.io/docs/home/ 所有概念的权威定义;每个资源都有 YAML 示例
Kubernetes 官方教程 https://kubernetes.io/docs/tutorials/ 从零到集群部署的分步教程
kubectl 命令参考 https://kubernetes.io/docs/reference/kubectl/ 每个命令的参数与用法
Kubernetes GitHub https://github.com/kubernetes/kubernetes 源码级理解,Issues 中有大量排错案例
Kubernetes Blog https://kubernetes.io/blog/ 新特性、版本变更说明

二级来源(考试与竞赛)

来源 说明
CNCF CKA 考纲 https://github.com/cncf/curriculum — K8s 管理员认证,实操题与大赛高度重叠
CNCF CKAD 考纲 https://github.com/cncf/curriculum — 应用开发者认证,侧重 Pod/Deploy/Config 实践
CNCF CKS 考纲 https://github.com/cncf/curriculum — 安全专家认证,M6 安全模块核心参考
Killer Shell (CKA/CKAD) https://killer.sh — 付费模拟器,题目风格与真实考试一致
全国职业院校技能大赛官网 历年赛题规程与样题(自行搜索”职业技能大赛 容器云”)

三级来源(练习平台)

来源 说明
Play with Kubernetes https://labs.play-with-k8s.com — 免费在线 K8s 沙箱(4 小时/次)
Katacoda → Killercoda https://killercoda.com — 在线交互式 K8s 场景练习
Minikube 本地环境 minikube start --cpus=4 --memory=8192 — 无云服务器时的本地替代
Kind (K8s in Docker) kind create cluster — Docker 里跑多节点集群,网络策略测试友好

四级来源(书籍与社区)

来源 说明
《Kubernetes in Action》第二版 最经典 K8s 书籍,概念讲得最透
《Kubernetes 权威指南》 中文版,实操性强
Kubernetes Slack (#kubernetes-users) 全球最大 K8s 社区,排错求助响应快
Stack Overflow (kubernetes 标签) 搜索错误信息,大概率已有答案
CNCF Landscape https://landscape.cncf.io — 了解 K8s 生态全貌

实践建议: CKA 模拟题是最接近大赛实操题的资源。按模块刷 CKA 真题,每题限时 5-10 分钟,重点训练命令行速度(kubectl 补全 + 别名 + 速记 YAML 模板)。大赛中 80% 的题都是”给一段描述 → 输出 YAML → 部署 → 验证”,与 CKA 完全一致。


📋 核心命令速查(命令 → 功能 → 注解)

以下命令按模块组织,每条命令附带详细功能注解。建议:

  • 日训 3-6 条,每条命令在终端执行并理解输出
  • 熟记 12 个最常用子命令(get/describe/create/apply/delete/logs/exec/explain/edit/scale/rollout/taint),它们是排错和赛题的骨架

kubectl 基础(M1)

命令 功能 注解
kubectl cluster-info 查看集群 Master 与 CoreDNS 地址 验证集群是否可用,输出 apiserver + DNS 地址即正常
kubectl version 查看客户端与服务端版本 客户端 kubectl 与 apiserver 版本偏差不超过 ±1 个小版本(v1.28+ 已移除 –short 标志)
kubectl get nodes 列出所有节点 STATUS 必须为 ReadyNotReady 意味节点失联或 CNI 未就绪
kubectl get nodes -o wide 节点列表 + 内网 IP/OS/内核/运行时 查看节点的网络可达性和运行时版本,排错第一步
kubectl describe node <node> 节点详细信息 查看 Conditions(内存/磁盘压力)、Taints、已分配资源;排错必用
kubectl get ns 列出所有命名空间 kube-system 存放集群组件;default 是用户默认空间
kubectl get pods -A 列出所有命名空间的 Pod -A = --all-namespaces,全局视图快速定位问题
kubectl get pods -n kube-system 查看系统组件 Pod etcd/apiserver/controller-manager/scheduler/coredns 的运行状态
kubectl get pods -o wide Pod 列表 + 节点 + IP 快速定位 Pod 运行在哪台节点,IP 是什么
kubectl describe pod <pod> Pod 详细信息 查看 Events(启动失败原因就在这里)、挂载卷、容器状态
kubectl logs <pod> 查看 Pod 日志(单容器) 最常用排错命令;-f 实时跟踪
kubectl logs <pod> -c <container> 查看指定容器日志 多容器 Pod 必须用 -c 指定容器名
kubectl logs <pod> --tail=50 查看最后 50 行日志 避免刷屏,快速看最新输出
kubectl logs <pod> --since=5m 查看最近 5 分钟日志 时间范围过滤,排查近期的异常
kubectl exec <pod> -- <cmd> 进入容器执行命令 -- 分隔 kubectl 参数和容器内命令
kubectl exec -it <pod> -- /bin/sh 交互式进入容器 相当于 docker exec -it,排错时进容器检查文件/网络
kubectl get all -n <ns> 查看某命名空间所有资源 包含 Pod/Service/Deploy/RS,快速了解某个 NS 的全貌
kubectl explain pod.spec.containers 查看资源字段文档 不需要翻官网,直接终端查字段含义和类型,写 YAML 神器
kubectl explain pod.spec --recursive 递归查看所有子字段 全面了解一个资源的 YAML 结构
kubectl api-resources 列出所有 API 资源类型 查看 K8s 支持哪些资源,包括 short name(如 svc/deploy/po
kubectl api-versions 列出所有 API 版本 了解当前集群支持的 API Group 和版本

YAML 管理(M1)

命令 功能 注解
kubectl create deploy nginx --image=nginx --dry-run=client -o yaml 生成 YAML 而不创建资源 --dry-run=client 本地校验不提交到集群;YAML 速成最佳技巧
kubectl apply -f file.yaml 声明式创建/更新资源 优先用 apply 而非 create;apply 会 diff 合并,幂等安全
kubectl create -f file.yaml 命令式创建资源 重复执行会报 “already exists”,非幂等
kubectl delete -f file.yaml 按 YAML 删除资源 删除该 YAML 中定义的所有资源
kubectl edit deploy <name> 直接编辑集群中的资源 实时生效;手快但危险,建议先 get -o yaml 备份
kubectl patch deploy <name> -p '{"spec":{"replicas":3}}' 部分更新资源(JSON Patch) 修改单个字段比 edit 更安全,适合脚本化操作
kubectl scale deploy <name> --replicas=5 快速扩缩副本数 等价于 kubectl edit 修改 replicas
kubectl rollout status deploy <name> 查看滚动更新进度 等待更新完成,常用于脚本中阻塞等待
kubectl rollout history deploy <name> 查看部署历史 查看 revision 号,配合 --revision 查看具体变更
kubectl rollout undo deploy <name> 回滚到上一个版本 回滚只回 deploy 模板,不回代码仓库
kubectl rollout undo deploy <name> --to-revision=2 回滚到指定版本 前提是该 revision 的历史还存在(默认保留 10 个)

Pod 与工作负载(M2)

命令 功能 注解
kubectl get deploy,rs,pod 同时查 Deploy/RS/Pod 逗号分隔多资源类型,一次看清层级关系
kubectl get deploy -o wide Deployment + 镜像/标签/副本数 快速确认当前部署用了哪个镜像
kubectl set image deploy/<name> <container>=<new-image> 更新 Deployment 的容器镜像 触发滚动更新,比 kubectl edit 效率高
kubectl get sts 列出 StatefulSet short name: sts
kubectl get ds 列出 DaemonSet short name: ds
kubectl get job,cronjob 列出 Job 和 CronJob short name: cj
kubectl delete pod <pod> --force --grace-period=0 强制立即删除 Pod 卡在 Terminating 时的救急操作
kubectl top pods -A 查看 Pod 实时资源用量 需要安装 metrics-server
kubectl top nodes 查看节点实时资源用量 判断节点是否资源紧张
kubectl cp <pod>:<path> <local-path> 从 Pod 拷贝文件到本地 双向可操作(本地 → Pod 也支持)
kubectl port-forward pod/<pod> 8080:80 本地端口转发到 Pod 无需 Service/Ingress 即可本地访问 Pod 端口

网络与服务发现(M3)

命令 功能 注解
kubectl get svc,endpoints Service + 后端 Endpoints endpoints 显示 Pod IP 列表;为空说明 Selector 没匹配到 Pod
kubectl expose deploy <name> --port=80 --target-port=8080 快速创建 Service 暴露 Deploy 一键生成 ClusterIP 类型的 Service
kubectl expose deploy <name> --type=NodePort --port=80 创建 NodePort Service 节点 IP:NodePort 可外部访问
kubectl get ingress 列出 Ingress 规则 需要安装 Ingress Controller(如 nginx-ingress)
kubectl get networkpolicy 列出网络策略 需要 CNI 支持(Calico 支持)
kubectl run test --image=busybox --rm -it -- wget -O- http://svc-name 临时 Pod 测试 Service 可达性 --rm 退出即删除;测试网络问题首选
kubectl exec <pod> -- nslookup <svc-name> 验证 DNS 解析 CoreDNS 故障导致 Service 不可用的首要排查
kubectl exec <pod> -- curl -s http://<svc-name>.<ns>.svc.cluster.local 验证全限定域名访问 FQDN 格式:<svc>.<namespace>.svc.cluster.local

存储与配置(M4)

命令 功能 注解
kubectl get pv,pvc 查看 PV 和 PVC STATUS: Bound 正常;Pending 说明没有 PV 能匹配
kubectl get sc 列出 StorageClass 动态供给的前提;默认 SC 标记为 (default)
kubectl get cm,secret 列出 ConfigMap 和 Secret Secret 值 base64 编码,get -o yamlecho <值> | base64 -d 解码
kubectl create cm <name> --from-file=<path> 从文件创建 ConfigMap 配置文件完整挂载为 ConfigMap
kubectl create cm <name> --from-literal=key=value 从键值对创建 ConfigMap 快速创建简单配置项
kubectl create secret generic <name> --from-literal=key=value 创建 Opaque Secret 值自动 base64 编码存储
kubectl create secret tls <name> --cert=cert.pem --key=key.pem 创建 TLS Secret Ingress TLS 终端必须用此类型 Secret

调度与资源管理(M5)

命令 功能 注解
kubectl taint node <node> key=value:NoSchedule 给节点添加污点 默认只有 Toleration 匹配的 Pod 才能调度上去
kubectl taint node <node> key=value:NoSchedule- 移除节点污点 末尾加 - 删除对应 Taint
kubectl cordon <node> 标记节点不可调度 等同于添加 node.kubernetes.io/unschedulable:NoSchedule
kubectl uncordon <node> 恢复节点可调度 取消 cordon 标记
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data 驱逐节点上所有 Pod 安全下线节点前必执行;DaemonSet 管理的 Pod 用 --ignore-daemonsets 跳过
kubectl label node <node> key=value 给节点打标签 配合 nodeSelector/nodeAffinity 使用
kubectl get hpa 查看水平自动扩缩器 当前 CPU/内存使用率与目标值对比
kubectl autoscale deploy <name> --min=2 --max=10 --cpu=80% 创建 HPA 基于 CPU 使用率自动扩缩

安全与认证(M6)

命令 功能 注解
kubectl auth can-i create pods 检查当前用户是否有某权限 快速验证 RBAC 配置是否正确
kubectl auth can-i create pods --as=system:serviceaccount:ns:sa 检查某 SA 是否有权限 调试 ServiceAccount 权限问题
kubectl get role,rolebinding 列出命名空间级 RBAC Role 定义权限;RoleBinding 绑定到用户/SA
kubectl get clusterrole,clusterrolebinding 列出集群级 RBAC ClusterRole 全局权限(如节点、PV)
kubectl create role <name> --verb=get,list --resource=pods -n <ns> 快速创建 Role --verb--resource 即可,无需手写 YAML
kubectl create rolebinding <name> --role=<role> --serviceaccount=<ns>:<sa> 快速创建 RoleBinding 将 SA 与 Role 绑定
kubectl get sa 列出 ServiceAccount 每个 NS 有默认 default SA
kubectl get podsecuritykubectl get psa 查看 Pod Security Admission 1.25+ 替代 PSP 的机制

监控与排错(M7)

命令 功能 注解
kubectl describe pod <pod> | grep -A 10 Events 只查看 Pod Events Events 是排错第一入口
kubectl get events --sort-by=.metadata.creationTimestamp 按时间排序查看集群 Event 全局视角看哪些资源在出问题
kubectl get events -w 实时监听 Event -w = --watch,观察操作过程中触发的事件
kubectl get pods --field-selector=status.phase=Pending 按状态筛选 Pod 快速找到所有 Pending/Failed/Unknown Pod
kubectl get pods --field-selector=spec.nodeName=<node> 筛选某节点上的 Pod 节点故障时快速定位受影响 Pod
kubectl cluster-info dump | grep -A 20 "error|failed|Error" dump 集群诊断信息 输出包含所有组件的日志摘要
journalctl -u kubelet -f 查看 kubelet 日志(节点) kubelet 是节点代理,Pod 启停失败根因在 kubelet 日志
crictl ps -a 列出所有容器(含已退出) K8s 1.24+ 不再支持 docker,用 crictl 替代;排错 Pod 启动失败
crictl logs <container-id> 查看容器日志(crictl 方式) 在 kubectl logs 不可用时(如容器还没启动)的备选
kubectl -n kube-system logs kube-apiserver-<node> 查看 apiserver 日志 apiserver 是集群入口,大量 5xx 错误根因在此

集群运维(M1/M8)

命令 功能 注解
kubeadm token create --print-join-command 生成 Worker 加入命令 24h 有效;过期后重新执行
kubeadm token list 查看现有 Token 无 Token 时 Worker 无法加入集群
kubeadm certs check-expiration 查看证书过期时间 证书过期是生产常见故障,默认 1 年有效
kubeadm upgrade plan 查看可升级版本 升级前必做;版本偏差 ≤ 1 个小版本
kubectl taint node <node> node-role.kubernetes.io/control-plane- 去除 Master 污点以调度 Pod 3 节点以下集群可让 Master 也跑 Pod(学习环境)
ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot save /backup/etcd-$(date +%F).db etcd 快照备份 必须指定 TLS 证书路径(kubeadm 部署的 etcd 标配 mTLS);设置 ETCDCTL_API=3 使用 v3 API
ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/server.crt --key=/etc/kubernetes/pki/etcd/server.key snapshot status /backup/etcd-xxx.db 查看快照状态 确认备份文件完整性和 etcd 版本信息

✅ 每日检查清单

  • 完成所有动手实操练习
  • 每道命令都在终端执行并理解输出
  • 排错练习先独立排查再对照答案
  • 赛题模拟严格限时,记录用时
  • 将当天遇到的问题和解决方案记录到笔记
  • 回顾前一天的笔记内容

💡 建议每天开始学习前,先花 5 分钟回顾前一天的笔记。每周日做一次周总结,梳理模块间的关联。