📅 第二阶段:核心资源对象实践 – 每日学习计划 (14天)
🎯 阶段目标
-
掌握各种工作负载控制器(Deployment/StatefulSet等)的特性
-
理解服务发现机制和网络配置
-
熟练使用配置管理和存储方案
-
能够部署完整的三层应用(前端+后端+数据库)
📚 每日学习安排
Day 1:Deployment 基础
-
理论学习:
-
无状态应用管理
-
副本集(ReplicaSet)原理
-
滚动更新策略
-
-
动手实践:
# 创建 deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-frontend
spec:
replicas: 3
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: nginx
image: nginx:1.20
ports:
- containerPort: 80kubectl apply -f deployment.yaml
kubectl get deploy,rs,pod -l app=frontend
Day 2:Deployment 更新策略
-
理论学习:
-
滚动更新 vs 重建更新
-
maxSurge/maxUnavailable 参数
-
版本回滚机制
-
-
动手实践:
# 触发滚动更新
kubectl set image deploy/web-frontend nginx=nginx:1.21
kubectl rollout status deploy/web-frontend
# 回滚到上一版本
kubectl rollout undo deploy/web-frontend
kubectl rollout history deploy/web-frontend
Day 3:StatefulSet 基础
-
理论学习:
-
有状态应用特点(稳定网络标识/持久存储)
-
Headless Service 作用
-
有序部署策略
-
-
动手实践:
# 创建 statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: db
spec:
serviceName: "db-service"
replicas: 3
selector:
matchLabels:
app: database
template:
metadata:
labels:
app: database
spec:
containers:
- name: mysql
image: mysql:5.7
env:
- name: MYSQL_ROOT_PASSWORD
value: "password"kubectl get sts,pod -l app=database
kubectl exec db-0 -- hostname
Day 4:StatefulSet 持久化
-
理论学习:
-
volumeClaimTemplates 机制
-
持久卷动态供应
-
数据持久性验证
-
-
动手实践:
# 在 StatefulSet 中添加 PVC 模板
volumeClaimTemplates:
- metadata:
name: mysql-data
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "standard"
resources:
requests:
storage: 1Gikubectl get pvc
kubectl describe pod db-0
Day 5:DaemonSet 与 Job
-
理论学习:
-
DaemonSet:节点级部署(日志收集/监控)
-
Job:批处理任务
-
CronJob:定时任务
-
-
动手实践:
# 创建 DaemonSet
kubectl create deploy nginx-ds --image=nginx -n kube-system --dry-run=client -o yaml > ds.yaml
# 修改 kind: DaemonSet
# 创建 CronJob
kubectl create cronjob daily-report --image=busybox --schedule="*/5 * * * *" -- /bin/sh -c "date > /tmp/report"
kubectl get cj
Day 6:Service 基础
-
理论学习:
-
ClusterIP/NodePort/LoadBalancer 类型
-
Endpoints 自动管理
-
kube-proxy 工作原理
-
-
动手实践:
# 创建 service.yaml
apiVersion: v1
kind: Service
metadata:
name: frontend-svc
spec:
selector:
app: frontend
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePortkubectl apply -f service.yaml
minikube service frontend-svc --url
kubectl get ep frontend-svc
Day 7:Service 进阶
-
理论学习:
-
会话保持(sessionAffinity)
-
多端口服务
-
ExternalName 服务类型
-
-
动手实践:
# 多端口配置示例
ports:
- name: http
port: 80
targetPort: 80
- name: metrics
port: 9113
targetPort: 9113
Day 8:Ingress 控制器
-
理论学习:
-
Ingress vs LoadBalancer
-
Nginx Ingress 架构
-
路径重写规则
-
-
动手实践:
# 启用 Ingress 插件
minikube addons enable ingress
# 创建 Ingress 资源
kubectl create ingress demo --rule="demo.test/*=frontend-svc:80"
kubectl get ing
echo "$(minikube ip) demo.test" | sudo tee -a /etc/hosts
curl http://demo.test
Day 9:Ingress 高级路由
-
理论学习:
-
基于主机名的路由
-
TLS 证书配置
-
注解(Annotations)定制
-
-
动手实践:
# 多路由配置
spec:
rules:
- host: app.test
http:
paths:
- path: /api
backend:
service:
name: api-svc
port: 3000
- path: /
backend:
service:
name: web-svc
port: 80
Day 10:ConfigMap 配置管理
-
理论学习:
-
环境变量注入
-
配置文件挂载
-
热更新机制
-
-
动手实践:
# 创建 ConfigMap
kubectl create configmap app-config --from-literal=LOG_LEVEL=debug --from-file=nginx.conf
# Pod 中挂载
volumes:
- name: config-vol
configMap:
name: app-config
Day 11:Secret 安全管理
-
理论学习:
-
Opaque vs docker-registry vs tls
-
Base64 编码原理
-
安全最佳实践
-
-
动手实践:
# 创建 Secret
kubectl create secret generic db-creds \
--from-literal=username=admin \
--from-literal=password=S3cret!
# 在环境变量中使用
env:
- name: DB_PASSWORD
valueFrom:
secretKeyRef:
name: db-creds
key: password
Day 12:持久化存储
-
理论学习:
-
PV/PVC 生命周期
-
StorageClass 动态供应
-
访问模式(RWO/ROX/RWX)
-
-
动手实践:
# 创建 PVC
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: standard
resources:
requests:
storage: 2Gikubectl get pv,pvc
Day 13:综合实战
-
任务: 部署完整应用栈:
-
前端(Deployment + ClusterIP)
-
API服务(Deployment + ClusterIP)
-
数据库(StatefulSet + PVC)
-
通过Ingress暴露服务
-
-
验证:
curl -L http://app.test
kubectl exec -it db-0 -- mysql -u root -p
Day 14:故障排查日
-
模拟场景:
-
服务无法访问(检查Endpoints)
-
持久卷挂载失败(describe pvc)
-
Ingress路由404(检查Annotations)
-
配置更新未生效(热更新限制)
-
-
工具使用:
kubectl describe pod <name>
kubectl logs <pod> -c <container>
kubectl get events --sort-by=.metadata.creationTimestamp
🔧 环境准备
-
启用 Minikube 插件:
minikube addons enable ingress
minikube addons enable storage-provisioner -
安装网络诊断工具:
kubectl apply -f https://github.com/nicolaka/netshoot/releases/latest/download/netshoot.yaml
📚 学习资源
-
官方文档:
-
实践教程:
⚠️ 注意事项
-
每天完成所有YAML文件的手动编写
-
使用
kubectl describe
查看资源详情 -
记录所有操作命令和问题排查过程
-
重点理解控制器的工作原理(观察-对比-执行)
> **进阶技巧**:
> 1. 使用`kubectl get <resource> -o yaml > debug.yaml`导出配置分析
> 2. 通过`minikube ssh`进入节点查看容器实际运行状态
> 3. 使用`kubectl port-forward`临时访问内部服务
> 4. 定期执行`kubectl get all --all-namespaces`查看全局状态