K8s + 平台 + AI Infra 两周深度笔记 — 总纲
14 天系统过 K8s 内核 + 周边基础设施 + AI Infra,覆盖集群运维 / CNI / 存储 / Operator / 网络与服务网格 / 安全 / 可观测 / 制品 / GitOps / GPU 调度 / 推理 / 训练 / 灾备 / 多集群。 关键原则:真实手感 + 真实踩坑 + 真实排查 > 背书 / 抄文档 / 看视频。
0. 学完后能讲什么(面试 anchor)
| 主题 | 学完能拍胸脯讲的话 |
|---|---|
| K8s 集群运维 | "我亲手 kubeadm 起过 3 CP HA 集群,etcd raft 选主/quorum 损坏恢复都跑过 chaos drill" |
| CNI 选型 | "Calico vs Cilium 我都装过装挂过,BGP RR 配置过,Cilium eBPF dataplane 性能基准我测过" |
| 存储 | "Longhorn / Rook-Ceph 都跑过 stateful workload,跨节点迁移、快照恢复、PV 卡 detach 我都修过" |
| Operator 开发 | "用 kubebuilder 从 0 写过 1 个生产可用 Operator,reconcile 幂等 / finalizer 防卡 / admission webhook 全套做过" |
| 网络 + 服务网格 | "ingress-nginx + cert-manager + NetworkPolicy 上过线,Linkerd / Istio 数据面差异我对比过" |
| 安全 | "RBAC 最小权限做过,OPA Gatekeeper / Kyverno 写过策略,Vault + external-secrets 接过,cosign signed image admission 做过" |
| 可观测 | "Prom + Loki + Tempo + OTel 完整栈我跑过,Prom WAL 爆盘 / Loki label cardinality 炸过都修过" |
| 制品管理 | "自建 Harbor + Trivy + cosign + signed image 校验,Replication 跨地域同步配过" |
| CI/CD | "Jenkins / Tekton / Argo Workflows / Gitea Actions 四个都用过,适用场景差异能讲" |
| GitOps | "ArgoCD app-of-apps + ApplicationSet 多 env 流水线做过,drift detection / Argo Rollouts 灰度发布上过" |
| AI infra: 推理 | "vLLM / TGI / Ollama / Triton / KServe 五个推理引擎都部署过,显存碎片 / 冷启动 / 量化模型加载我都踩过" |
| AI infra: 训练 | "Kubeflow / Volcano gang scheduling / MPI Operator 都跑过分布式训练,LoRA / QLoRA 微调 + DeepSpeed/FSDP 概念能讲" |
| AI infra: 调度 | "GPU device-plugin / MIG / MPS / time-slicing 几种共享方案对比过,生产场景取舍能讲" |
| 多集群 | "ArgoCD 多集群 + Cluster API 概念能讲,跨集群 service discovery 实操过" |
| 故障排查 | "做过 7 次 chaos drill,每次都有完整 postmortem,排查从'症状'到'根因'的链路熟" |
1. 课程结构(14 天,2 周冲刺)
Week 1:K8s 内核 + 周边基础设施(Day 1-7)
| Day | 主题 | 早 | 午 | 晚 | MD 字数 |
|---|---|---|---|---|---|
| 1 | 集群起步 + CNI 选型 + DNS 调优 | kubeadm 起 3 CP HA + etcd stacked vs external 对比 | Calico vs Cilium 装 + dataplane 性能对比 | CoreDNS 调优 + node-local-dns + DNS 故障演练 | ~5500 |
| 2 | 控制面 + etcd 内核 + 故障注入 | apiserver 启动参数 / admission chain / audit | etcd 内核 (raft / MVCC / compaction / defrag / backup-restore) | chaos: kill etcd member / split-brain / apiserver 起不来 | ~5500 |
| 3 | CRD + Operator + Webhook | kubebuilder 脚手架 + CRD 设计原则(InferenceService / TrainingJob 拆解) | reconciler 幂等 + finalizer 模式 + status patch | admission webhook (validating + mutating) + cert-manager 给 webhook 签证 | ~5500 |
| 4 | 存储深度 | PV/PVC + StorageClass + CSI 概念 + reclaim policy | Longhorn 装 + stateful workload + 快照 + 跨节点 | Rook-Ceph 入门 + RWX 对比 + 性能 benchmark | ~5500 |
| 5 | 网络 + Ingress + Service Mesh | Service 类型 + Ingress (nginx vs traefik) + cert-manager + Let's Encrypt | NetworkPolicy + Calico/Cilium L3/L4/L7 策略 | Linkerd 装 + traffic split + mTLS + observability + 对比 Istio | ~6000 |
| 6 | 安全完整栈 | RBAC + ServiceAccount + token rotation + audit | Pod Security Standards + OPA Gatekeeper vs Kyverno 实操 | Vault + external-secrets + cosign signed image + admission verify | ~6000 |
| 7 | 可观测性栈 | Prometheus 内核 (WAL/TSDB/remote_write/federation) + 告警最佳实践 | Loki 索引设计 + label cardinality + 跨日期查询 | Tempo + OpenTelemetry 跨服务 trace + Grafana 统一面板 + 告警去抖 | ~6000 |
Week 2:制品管理 + GitOps + AI Infra + 综合(Day 8-14)
| Day | 主题 | 早 | 午 | 晚 | MD 字数 |
|---|---|---|---|---|---|
| 8 | Harbor + 镜像安全栈 | Harbor 自建完整组件 (postgres/redis/registry/chartmuseum/trivy) | Trivy + cosign + Notary v2 镜像签名 | signed image admission 校验 + GC + Replication 跨地域 | ~5500 |
| 9 | CI/CD 四方对比 + 流水线工程 | Jenkins + Tekton 架构对比 | Gitea Actions + Argo Workflows 对比 + 适用场景 | 实操完整 pipeline (代码 → 测试 → 扫描 → 推送 → 部署 + 缓存优化) | ~6000 |
| 10 | GitOps 完整生态 | ArgoCD vs Flux 架构对比 + ArgoCD 装 | app-of-apps + ApplicationSet + multi-env 升级流程 | sealed-secrets / external-secrets + Argo Rollouts / Flagger 渐进发布 | ~6000 |
| 11 | GPU 接入 + 推理引擎 deep 对比 | nvidia-device-plugin + MIG 切分 + GPU sharing (MPS / time-slicing) 对比 | vLLM / TGI / Ollama / Triton 部署 + 性能 benchmark | KServe + Ray Serve + canary release + 多模型 ensemble | ~6500 |
| 12 | 训练编排 + 分布式训练 | Kubeflow 完整生态 (notebook / pipeline / katib / kserve) | Volcano gang scheduling + MPI Operator + LoRA/QLoRA 实战 | 分布式训练 (DeepSpeed / FSDP / ZeRO 概念) + 单机多卡跑通 + NCCL 调优 | ~6500 |
| 13 | 多集群 + 边缘 + 平台工程 | ArgoCD 多集群 + Cluster API 入门 | K3s / KubeEdge 边缘集群 + 与中心集群联动 | Crossplane (云资源 as CRDs) + Backstage (内部开发者平台) 入门 | ~5500 |
| 14 | chaos drill + 面试模拟 + 整合复习 | 5 道经典面试设计题模拟(详见第 4 节) | 综合 chaos drill + postmortem | 14 天笔记整合 + 高频面试题清单 + "我能讲的故事" 总结 | ~5500 |
总字数约 78,000-83,000 字 = 一本小书厚度。
2. 每天的固定输出模板
每天结束按这个模板整理 MD:
# Day X: <主题> (yyyy-mm-dd)
## 0. TL;DR (3 句话讲清楚)
- ...
- ...
- ...
## 1. 学习目标 + 闭环输出
- 能秒答: ...
- 能动手做: ...
- 产出物: ...
## 2. 关键概念 + 架构图
- 概念 A: ...(为什么存在 + 解决什么 + 替代方案)
- 概念 B: ...
- ASCII 架构图
## 3. 实操详细步骤
- 命令 / YAML / 完整可复制
- 每步注释"为什么这么做"
## 4. 多方案对比(深度)
| 方案 | 优势 | 劣势 | 适用 | 不适用 |
|---|---|---|---|---|
## 5. 踩坑实录(面试金矿)
| 现象 | 根因 | 排查命令 | 修复 | 教训 |
|---|---|---|---|---|
## 6. 源码 / 文档片段(对照学)
- 关键源码 5-10 行 + 注释
- 上游文档关键章节链接
## 7. 面试常见题 + 标准答法(8-12 题)
- Q1: ...
- A: 一句话答 / 30 秒展开 / 被深问时的转向
- ...
## 8. 自查 checklist
- [ ] 能秒答 X
- [ ] 能不查文档写 Y
- [ ] 能闭眼复现 Z
## 9. 延伸 / 待深挖
- ...
3. 每天的踩坑预告(Week 1)
提前列出每天典型会撞的坑,正式动手时减少卡壳,提高排查效率
Day 1: 集群起步 + CNI
- ❗ kubeadm token 24h 过期,worker join 失败 →
kubeadm token create --print-join-command - ❗ Pod CIDR(默认 10.244.0.0/16)与你 VPC 网段冲突 →
--pod-network-cidr自定义 - ❗ Calico BIRD BGP 收不到对端 →
calicoctl node status+ 路由反射器配置 - ❗ Cilium eBPF 要求内核 ≥4.19,有些机器需升级内核
- ❗ CoreDNS Pod 在 master 上不调度 → taint/toleration
- ❗ DNS 解析慢:节点本地 DNS 缺失 / ndots:5 引起多次查询 → node-local-dns 部署
- ❗ 多 CP 时 etcd 成员加入顺序错乱
Day 2: 控制面 + etcd
- ❗ etcd defrag 时锁住整个 apiserver,生产期间不能盲做
- ❗ 一个 CP 挂了,新建 Pod 偶发失败(etcd 选主 5-10s 期间)
- ❗ etcd quorum loss(2/3 down)→ 数据可能不一致,需要
etcdctl snapshot restore - ❗ apiserver --etcd-prefix 写错 → 新集群读到老数据
- ❗ audit policy 错配 → audit log 暴涨打满盘
- ❗ kubelet 与 apiserver 版本差 ≥ 2 minor → 启动失败
- ❗ admission chain 顺序错 → mutation 在 validation 后失效
Day 3: CRD + Operator
- ❗ Reconcile 无限循环:
r.Update()触发新 watch event 又来 reconcile - ❗ Finalizer 卡死:Operator 挂了,CRD 永远 Terminating,只能
kubectl patch手动清 - ❗ Status 子资源没启用 → status update 也算 generation 变化,触发额外 reconcile
- ❗ Webhook cert 过期 → 整个集群创建资源失败(因为 webhook deny)
- ❗ Mutating webhook 在 validating 后 → mutate 不生效
- ❗ Leader election 配置错 → 两个 Operator 实例同时跑 reconcile,资源出现 race
- ❗ kubebuilder 生成的 RBAC 不够 / 太宽
Day 4: 存储
- ❗ 默认 StorageClass 未设 → PVC 永远 Pending
- ❗
volumeBindingMode: WaitForFirstConsumer时 Pod 起不来,PVC 也不 bind,看起来死锁 - ❗ Longhorn replica 不健康 → PVC 看起来 Bound 但 IO hang
- ❗ Node drain 时 PV 卡 detach → 强制删除 attachments
- ❗ StatefulSet replica 缩容时 PVC 不删除(设计如此,但容易误以为 bug)
- ❗ ReadWriteMany 错用,大部分 CSI 不支持
- ❗ Ceph mon 数量必须奇数,否则 quorum 错
Day 5: 网络
- ❗ 多个 Ingress class 未指定 →
kubernetes.io/ingress.class注解被废弃 - ❗ cert-manager challenge 解析失败:DNS-01 vs HTTP-01 选错
- ❗ NetworkPolicy 默认全 allow,你以为是 deny → 必须先 default-deny 才安全
- ❗ Service externalTrafficPolicy: Local 时,客户端 IP 保留但跨节点流量丢失
- ❗ Headless Service 给 StatefulSet 用,但你忘了配 → DNS 解析不到 pod
- ❗ Linkerd inject 后 init container 顺序错 → 应用启动前 mesh 没就绪
- ❗ Istio gateway 与 Ingress 冲突
Day 6: 安全
- ❗ ClusterRoleBinding 给 default SA
cluster-admin→ 整个集群裸奔 - ❗ ServiceAccount token 自动挂载没关 → 应用容器内可读 SA 凭据,横向移动
- ❗ Pod Security Admission 升级后 deprecated Pod Security Policy 行为变化
- ❗ Gatekeeper constraint 写错 → 拒绝所有 Pod 创建
- ❗ Vault auto-unseal 用 cloud KMS,云凭据丢了 unseal 不了
- ❗ cosign verify 慢 → admission webhook 超时 → Pod 起不来
- ❗ Secret 用 etcd 加密 (KMS) 时,KMS 不可用 → 读不到 secret
Day 7: 可观测性
- ❗ Prometheus WAL 爆盘:retention 没配 / 抓取间隔过密
- ❗ Loki label cardinality 爆炸:把 user_id / request_id 当 label
- ❗ Prom federation 时 sum() 没 by () → 标签丢失
- ❗ Grafana datasource 配错 → 看不到数据但不报错
- ❗ OTel collector 内存炸:batch size 没限,采样率 100%
- ❗ Alertmanager group_wait / group_interval 没调 → 告警风暴或漏报
- ❗ Tempo retention 短,长链路 trace 看不全
4. 每天的踩坑预告(Week 2)
Day 8: Harbor
- ❗ Harbor GC 没配 → 镜像删除但 blob 不清,盘满
- ❗ Trivy 漏洞库下载失败(GFW)→ 镜像扫描全无结果
- ❗ Replication 跨地域:目标 Harbor unhealthy 时 source 阻塞
- ❗ cosign sign 时密钥泄漏到日志
- ❗ Helm Chart 仓库 chartmuseum 已废弃,Harbor 切到 OCI 模式后 chart 上传方式变
- ❗ Notary v2 与 v1 不兼容
Day 9: CI/CD
- ❗ Jenkins agent 池没配 → master OOM
- ❗ Docker layer cache 没用 → 每次 build 重复下基础镜像
- ❗ secret 在 shell 中 echo 出来漏到日志
- ❗ Tekton TaskRun 并发限制:workspace 共享 PVC 冲突
- ❗ Gitea Actions 与 GitHub Actions 不完全兼容(部分 action 跑不了)
- ❗ Argo Workflows 大 DAG 时 controller 内存压力大
- ❗ Pipeline 跑出竞态:多分支同时触发 deploy 同一 env
Day 10: GitOps
- ❗ ArgoCD auto-sync 把你手动 hotfix 覆盖 → 必须用
--ignore-differences - ❗ helm chart values 优先级混乱:CLI > file > Application.spec.helm.values
- ❗ ApplicationSet 模板渲染错误,几十个 app 全部失败
- ❗ Flux v1 → v2 迁移 breaking changes
- ❗ sealed-secrets 控制器换 key,旧 secret 解不了
- ❗ Rollouts analysis 指标查询慢 → 误判健康
- ❗ ArgoCD refresh interval 默认 3 min,改动看不到 → 调短带来 apiserver 压力
Day 11: GPU + 推理
- ❗ device-plugin DaemonSet 起不来:cgroup driver 与 docker/containerd 不匹配
- ❗ MIG 切分后 device-plugin 看不到子设备:需 mig-mode 重启
- ❗ MPS (multi-process service) 与 time-slicing 不能同时启用
- ❗ vLLM 启动慢:模型 load 时间长,readiness probe 超时
- ❗ Ollama 在 K8s 里 model 文件目录权限:UID 0 与非 root 容器冲突
- ❗ Triton ensemble 配置:输入输出 tensor 名字必须完全一致
- ❗ NCCL 跨节点不通:RoCE / IB 网络 / GID index 配置
- ❗ KServe Inference Graph 路由路径错
Day 12: 训练编排
- ❗ Volcano gang 调度死锁:资源不够时一直 Pending,scheduler 不会回收
- ❗ Kubeflow Pipeline 跨 step 传输大文件:用 PVC 而不是 artifact
- ❗ MPI Operator launcher Pod 完成但 worker 还在 → 资源没释放
- ❗ DeepSpeed ZeRO-3 时 checkpoint 必须 collect,直接 load 是错的
- ❗ FSDP wrap policy 不对 → 内存不省反增
- ❗ LoRA 训完没 merge 直接推理 → 性能损失
- ❗ 训练任务 OOM 自动重启循环不退 → 必须设 backoffLimit
Day 13: 多集群 + 平台工程
- ❗ ArgoCD 远程集群凭据轮换:secret 失效 → 整个集群同步停
- ❗ Cluster API:用 cloud provider 时凭据范围最小化难做
- ❗ K3s server token 与 agent token 混淆
- ❗ KubeEdge 边端断网恢复后 sync 慢
- ❗ Crossplane provider 凭据泄漏到 etcd
- ❗ Backstage catalog 同步爆 GitHub rate limit
Day 14: chaos + 复习
- ❗ 自己设计的 chaos drill 没"安全护栏",一次干翻整个集群
- ❗ Postmortem 写成"日记",没有真根因 + 改进项
- ❗ 面试答题答到一半发现自己其实没真懂