Skip to content

Kubernetes 21天精通计划


学习概览

阶段主题天数核心产出
🌱 第一周核心基础Day 1-7完整集群环境 + LNMP部署
🚀 第二周进阶核心Day 8-14自动扩缩容 + 高级调度
🏭 第三周生产运维Day 15-21GitOps + CKA备考

每日学习节奏

时段内容关键动作
Hour 1理论学习阅读官方文档,画架构图,记录疑问
Hour 2-3动手实操Kind集群+K9s,故意制造错误观察现象
Hour 4复盘总结用自己的话写解释,整理YAML到仓库

第一周:核心基础

目标:掌握Kubernetes核心对象,搭建完整集群环境

Day 1:环境搭建与工具链

📋 任务清单

  • [ ] 安装 Kind、K9s、Lens、Helm
  • [ ] 创建3节点Kind集群
  • [ ] 配置kubectl多上下文切换
  • [ ] 熟悉K9s终端操作

🔧 核心命令

点击查看:创建生产级多节点集群
bash
# 创建生产级多节点集群
kind create cluster --name prod-like --config - <<'EOF'
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
    kubeadmConfigPatches:
      - |
        kind: InitConfiguration
        nodeRegistration:
          kubeletExtraArgs:
            node-labels: "ingress-ready=true"
    extraPortMappings:
      - containerPort: 80
        hostPort: 80
      - containerPort: 443
        hostPort: 443
  - role: worker
    labels:
      tier: frontend
      zone: zone-a
  - role: worker
    labels:
      tier: backend
      zone: zone-b
  - role: worker
    labels:
      tier: database
      zone: zone-c
EOF

📝 今日产出

产出物说明
工具就绪清单Kind + K9s + Lens + Helm 安装确认
集群拓扑图1控制平面 + 3工作节点架构
K9s快捷键笔记常用操作速查

Day 2:Pod深度掌握

📋 任务清单

  • [ ] 理解Pod生命周期与重启策略
  • [ ] 配置Liveness/Readiness/Startup探针
  • [ ] 模拟探针失败,观察Pod行为
  • [ ] 故障排查流程文档

🔧 核心配置

点击查看:探针实战配置
yaml
apiVersion: v1
kind: Pod
metadata:
  name: probe-demo
spec:
  containers:
  - name: app
    image: nginx
    livenessProbe:          # 存活探针:失败则重启容器
      httpGet:
        path: /healthz
        port: 80
      initialDelaySeconds: 10
      periodSeconds: 5
      failureThreshold: 3
    readinessProbe:         # 就绪探针:失败则从Service摘除
      httpGet:
        path: /ready
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 3
    startupProbe:           # 启动探针:保护慢启动应用
      httpGet:
        path: /startup
        port: 80
      failureThreshold: 30
      periodSeconds: 10

🎯 关键概念

探针类型作用失败行为
livenessProbe检查容器是否存活重启容器
readinessProbe检查是否可接收流量从Service端点移除
startupProbe保护慢启动应用禁用其他探针直到成功

Day 3:Deployment与滚动更新

📋 任务清单

  • [ ] 理解Deployment与ReplicaSet关系
  • [ ] 配置滚动更新策略
  • [ ] 执行版本升级与回滚
  • [ ] 实现手动金丝雀发布

🔧 核心命令

bash
# 观察滚动更新过程
kubectl set image deployment/web nginx=nginx:1.20 --record
kubectl rollout status deployment/web -w
kubectl rollout history deployment/web
kubectl rollout undo deployment/web --to-revision=1

# 金丝雀:通过调整replica实现比例控制
kubectl scale deployment/web-v1 --replicas=8
kubectl scale deployment/web-v2 --replicas=2

📊 更新策略对比

策略配置适用场景
RollingUpdatemaxSurge: 1, maxUnavailable: 0零停机更新
Recreate先删除再创建不允许并行运行
自定义控制速率和并发大规模集群

Day 4:Service与网络基础

📋 任务清单

  • [ ] 掌握4种Service类型
  • [ ] 验证集群DNS解析
  • [ ] 理解Endpoint与Service关系
  • [ ] 网络拓扑实验

🔧 实验矩阵

Service类型适用场景验证命令
ClusterIP集群内部通信kubectl run test --rm -it --image=busybox -- wget -O- http://svc-name
NodePort外部临时访问curl localhost:30080
Headless直接访问Podnslookup svc-name 返回所有Pod IP
ExternalName外部服务映射CNAME验证

Day 5:ConfigMap与Secret

📋 任务清单

  • [ ] 配置分离原理
  • [ ] 4种注入方式实践
  • [ ] 热更新机制
  • [ ] 配置管理规范

🔧 注入方式对比

方式命令示例特点
环境变量--from-literal=key=value简单,不支持热更新
Volume挂载volumeMounts支持热更新,文件形式
SubPathsubPath: config.conf挂载单个文件
Template配置中引用动态渲染

Day 6:存储系统

📋 任务清单

  • [ ] PV/PVC/StorageClass关系
  • [ ] 动态PV创建
  • [ ] 部署有状态应用(MySQL)
  • [ ] 多节点调度验证

🔧 关键命令

bash
# 查看Kind默认StorageClass
kubectl get sc standard -o yaml

# 验证数据持久化
kubectl exec -it mysql-pod -- mysql -p -e "CREATE DATABASE test;"
# 删除Pod,重建后验证数据还在

Day 7:周复盘与综合项目

📋 任务清单

  • [ ] 部署完整LNMP栈
  • [ ] 绘制知识图谱
  • [ ] 整理kubectl备忘录
  • [ ] 代码提交到GitHub

🏆 本周产出

📁 k8s-learning/
├── 📁 week-01/
│   ├── 📁 day-01-cluster/      # 集群配置
│   ├── 📁 day-02-pods/         # Pod模板
│   ├── 📁 day-03-deployment/   # 部署配置
│   ├── 📁 day-04-service/      # 网络配置
│   ├── 📁 day-05-config/       # 配置管理
│   ├── 📁 day-06-storage/      # 存储方案
│   └── 📁 day-07-project/      # LNMP完整项目
└── 📄 README.md

第二周:进阶核心

目标:掌握高级调度、网络策略、自动扩缩容

Day 8:Ingress与流量管理

📋 任务清单

  • [ ] Ingress控制器原理
  • [ ] 多域名与HTTPS配置
  • [ ] URL重写与流量分割
  • [ ] 金丝雀发布实践

🔧 高级路由配置

点击查看:基于权重的金丝雀发布
yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: canary
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "20"
spec:
  rules:
  - host: app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: web-v2
            port:
              number: 80

Day 9:StatefulSet与有状态应用

📋 任务清单

  • [ ] StatefulSet特性:稳定标识、有序部署
  • [ ] 部署MySQL主从
  • [ ] 部署Redis集群
  • [ ] 存储管理策略

📊 StatefulSet vs Deployment

特性StatefulSetDeployment
Pod名称有序、可预测随机哈希
存储独立PV,跟随Pod共享或无状态
启动顺序顺序启动,逆序停止并行
网络标识稳定DNS临时

Day 10:DaemonSet与Job系统

📋 任务清单

  • [ ] DaemonSet(日志/监控代理)
  • [ ] Job执行模式与重试策略
  • [ ] CronJob定时任务
  • [ ] 并行Job与工作队列

Day 11:RBAC权限系统

📋 任务清单

  • [ ] User/ServiceAccount区别
  • [ ] Role/ClusterRole设计
  • [ ] 多租户环境配置
  • [ ] 最小权限原则实践

🔧 实战场景

bash
# 创建只能查看特定namespace的开发者账号
kubectl create namespace dev-team
kubectl create serviceaccount dev-user -n dev-team
kubectl create role developer --verb=get,list,watch --resource=pods,deployments -n dev-team
kubectl create rolebinding dev-binding --role=developer --serviceaccount=dev-team:dev-user -n dev-team

Day 12:NetworkPolicy网络策略

📋 任务清单

  • [ ] 零信任网络理念
  • [ ] 默认拒绝策略
  • [ ] 命名空间隔离
  • [ ] 微服务白名单

Day 13:资源调度高级技巧

📋 任务清单

  • [ ] 资源请求/限制与QoS
  • [ ] 节点亲和性
  • [ ] Pod亲和/反亲和
  • [ ] 拓扑分布约束

🔧 反亲和配置示例

点击查看:Pod分散调度
yaml
affinity:
  podAntiAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 100
      podAffinityTerm:
        labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values: ["web"]
        topologyKey: kubernetes.io/hostname

Day 14:周复盘与HPA自动扩缩容

📋 任务清单

  • [ ] 部署Metrics Server
  • [ ] 配置CPU/内存HPA
  • [ ] 自定义指标扩缩容
  • [ ] 整理YAML模板库

🔧 HPA配置

yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 70

第三周:生产运维与生态

目标:掌握Helm、监控、GitOps,通过CKA考试

Day 15:Helm包管理

📋 任务清单

  • [ ] Helm架构与Chart结构
  • [ ] 编写自定义Chart
  • [ ] 可配置化部署
  • [ ] Hook与升级策略

🎯 实战任务

将Day 7的LNMP栈改造为Helm Chart


Day 16:监控与可观测性

📋 任务清单

  • [ ] Prometheus+Grafana架构
  • [ ] 部署kube-prometheus-stack
  • [ ] 配置告警规则
  • [ ] 日志聚合方案

Day 17:故障排查实战

📋 任务清单

  • [ ] 系统化排查方法论
  • [ ] 10种常见故障场景
  • [ ] 根因分析练习
  • [ ] 故障案例库

🔥 故障清单

序号故障现象排查命令
1Pod Pendingkubectl describe pod, kubectl get events
2ImagePullBackOffkubectl describe pod, 检查镜像名/Secret
3CrashLoopBackOffkubectl logs --previous, kubectl describe
4服务无法访问kubectl get endpoints, kubectl port-forward
5节点NotReadykubectl describe node, 检查kubelet
6存储挂载失败kubectl get pv,pvc, kubectl describe pvc
7OOMKilledkubectl describe pod, 调整limits
8Evictedkubectl get pods --field-selector=status.phase=Failed
9证书过期kubeadm certs check-expiration
10网络策略阻断临时删除NetworkPolicy测试

Day 18:安全加固

📋 任务清单

  • [ ] Pod安全策略
  • [ ] SecurityContext配置
  • [ ] 网络隔离加固
  • [ ] 镜像安全扫描

Day 19:备份与灾难恢复

📋 任务清单

  • [ ] etcd备份原理
  • [ ] Velero架构与部署
  • [ ] 定时备份配置
  • [ ] 跨云恢复演练

Day 20:GitOps与ArgoCD

📋 任务清单

  • [ ] GitOps理念与工作流
  • [ ] ArgoCD部署与配置
  • [ ] 自动同步与健康检查
  • [ ] Kustomize多环境管理

Day 21:CKA备考与职业规划

📋 任务清单

  • [ ] CKA考试模拟(killer.sh)
  • [ ] 云厂商K8s服务对比
  • [ ] 制定后续学习计划
  • [ ] 技术成长路线图

🎓 后续方向

mermaid
graph TD
    A[CKA认证通过] --> B[深入方向]
    B --> C[Operator开发]
    B --> D[多集群管理]
    B --> E[云原生安全]
    B --> F[服务网格Istio]
    B --> G[Serverless/Knative]

配套资源

工具链

工具用途安装命令
Kind本地K8s集群go install sigs.k8s.io/kind@latest
K9s终端UIbrew install k9s
Lens桌面GUIwinget install Mirantis.Lens
Helm包管理brew install helm
kubectl命令行工具随Docker Desktop安装

学习资源

类型推荐
官方文档kubernetes.io/docs
互动教程K8s官方教程
书籍《Kubernetes in Action》
模拟考试killer.sh
社区CNCF Slack #kubernetes-users

学习检查清单

Week 1 完成标准

  • [ ] 能独立创建多节点Kind集群
  • [ ] 能解释Pod生命周期和探针区别
  • [ ] 能完成Deployment滚动更新和回滚
  • [ ] 能部署LNMP完整应用栈

Week 2 完成标准

  • [ ] 能配置Ingress多域名和HTTPS
  • [ ] 能部署StatefulSet有状态应用
  • [ ] 能设计RBAC多租户权限
  • [ ] 能配置HPA自动扩缩容

Week 3 完成标准

  • [ ] 能编写Helm Chart
  • [ ] 能排查10种常见故障
  • [ ] 能配置GitOps工作流
  • [ ] 能完成CKA模拟考试

贡献与反馈

如果你发现任何问题或有改进建议,欢迎提交PR或Issue。

Happy Kubernetes Learning! 🚀