📘 Day 25:赛题模拟 1-3
🎯 今日目标
完成 3 套基础赛题,每套限时 70 分钟,覆盖集群管理 + 工作负载 + 配置管理。
🏆 赛题 1:集群初始化与基础部署(70 分钟)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| 【场景】你作为运维工程师,需要在一台新服务器上初始化 K8s 并部署基础应用。
【操作要求】(总分 100 分)
Part A: 集群初始化(30 分) 1. 安装 containerd、kubeadm、kubelet、kubectl 2. 初始化单节点集群: - kubeadm init --pod-network-cidr=10.244.0.0/16 - 镜像源 registry.aliyuncs.com/google_containers 3. 安装 Flannel CNI: kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml 4. 配置 kubectl 自动补全 + k 别名 5. 验证:kubectl get nodes 显示 Ready
Part B: 工作负载部署(30 分) 6. 创建 Deployment nginx-deploy: - 镜像 nginx:1.25-alpine - 4 副本 - 资源:requests cpu=100m mem=128Mi, limits cpu=300m mem=256Mi - livenessProbe: HTTP GET /, 端口 80 - readinessProbe: HTTP GET /, 端口 80 7. 暴露为 NodePort Service,映射到 31080 8. 创建命名空间 dev,在其中创建 Deployment dev-api(nginx:alpine, 2 副本)
Part C: 配置管理(20 分) 9. 创建 ConfigMap app-config,包含 DB_HOST=mysql、DB_PORT=3306 10. 创建 Secret db-secret,包含 DB_PASSWORD=secret123 11. 创建 Pod config-pod(busybox:1.36),用 envFrom 注入 app-config
Part D: 基础运维(20 分) 12. 将 nginx-deploy 从 4 副本缩容到 2 副本 13. 对 nginx-deploy 执行滚动更新到 nginx:1.26-alpine 14. 回滚 nginx-deploy 到最初版本 15. 输出 nginx-deploy 的 rollout history
【验证清单】 □ kubectl get nodes → Ready □ 所有 Pod Running □ curl <NodeIP>:31080 → nginx □ kubectl get endpoints nginx-deploy → 有 Endpoint □ kubectl rollout history deploy/nginx-deploy → 有记录
|
🏆 赛题 2:多工作负载编排(70 分钟)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| 【场景】为一个微服务系统部署三层架构。
【操作要求】(总分 100 分)
Part A: StatefulSet 数据层(30 分) 1. 创建 Headless Service data-svc(端口 6379) 2. 创建 StatefulSet data-cluster(3 副本): - 镜像 redis:7-alpine - 命令 redis-server --appendonly yes - volumeClaimTemplates: 100Mi 3. 验证 PVC 自动创建:data-cluster-data-0/1/2
Part B: Deployment 应用层(25 分) 4. 创建 Deployment api-service(3 副本,nginx:alpine) 5. 配置滚动更新策略:maxSurge=1, maxUnavailable=0 6. 配置 livenessProbe(HTTP GET /, 端口 80) 7. 配置 readinessProbe(同上) 8. 创建 ClusterIP Service api-svc
Part C: DaemonSet + CronJob(25 分) 9. 创建 DaemonSet node-logger(busybox:1.36): - 每 10 秒输出节点主机名 + 时间 - 使用 hostPath 写日志到 /tmp/node-logs 10. 创建 CronJob data-backup: - 每 30 分钟执行一次 - 命令:echo "backup $(date)" - 保留最近 3 个成功的 Job 历史
Part D: 运维操作(20 分) 11. 对 api-service 执行滚动更新并记录 change-cause 12. 缩容 data-cluster 到 2,再扩容回 3 13. 验证 StatefulSet Pod 顺序(2→1 终止,1→2 启动) 14. 手动触发一次 data-backup CronJob
【验证清单】 □ data-cluster-0/1/2 Running, 独立 PVC □ api-service 3/3 Ready □ 每节点一个 node-logger Pod □ kubectl get cj data-backup → SCHEDULE 正确
|
🏆 赛题 3:配置与存储综合(70 分钟)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| 【场景】为 Web 应用配置完整的配置管理和持久存储方案。
【操作要求】(总分 100 分)
Part A: 配置管理(25 分) 1. 创建 ConfigMap web-config(namespace: web-app): - APP_ENV=staging - APP_DEBUG=true - MAX_UPLOAD_SIZE=10M 2. 创建 Secret web-secret(namespace: web-app): - DB_PASSWORD=webpass123 - REDIS_PASSWORD=redispwd - JWT_SECRET=jwt-secret-key
Part B: 存储配置(35 分) 3. 创建 hostPath 类型的 PV(pv-static,1Gi,RWO) 4. 创建 PVC(pvc-web-data,请求 500Mi) 5. 验证 PV 和 PVC 绑定
Part C: 应用部署(25 分) 6. 创建 Deployment web-server(3 副本,nginx:alpine): - envFrom 注入 web-config - valueFrom 注入 DB_PASSWORD(命名 DATABASE_PASSWORD) - 挂载 PVC 到 /usr/share/nginx/html/data - SecurityContext: runAsUser=1000 7. 创建 NodePort Service,映射到 32080
Part D: 验证(15 分) 8. 向 PVC 挂载目录写入测试文件 9. 删除 Pod 后验证 PVC 数据仍在 10. 验证环境变量注入正确
【验证清单】 □ ConfigMap 和 Secret 存在 □ PV/PVC Bound □ Pod 环境变量包含 APP_ENV、DATABASE_PASSWORD □ /usr/share/nginx/html/data 可读写 □ NodePort 可访问
|
📋 命令速查
该赛题涉及的核心命令速查:
| 命令 |
功能 |
注解 |
kubectl create deploy <name> --image=<image> --replicas=<n> |
创建指定副本数的 Deployment |
赛题最常见的开局操作 |
kubectl expose deploy <name> --port=<p> --target-port=<tp> |
为 Deployment 创建 Service |
赛题中”暴露服务”的标配命令 |
kubectl set image deploy/<name> <container>=<new-image> |
滚动更新镜像 |
赛题中”更新应用”操作 |
kubectl rollout undo deploy/<name> |
回滚 Deployment |
赛题中”回滚到上一版本” |
kubectl scale deploy <name> --replicas=<n> |
扩缩副本 |
赛题中”调整副本数” |
kubectl create cm <name> --from-literal=<k>=<v> |
创建 ConfigMap |
赛题中”创建配置” |
kubectl create secret generic <name> --from-literal=<k>=<v> |
创建 Secret |
赛题中”创建密钥” |
kubectl get pods -o wide |
查看 Pod 分布 |
确认 Pod 是否按要求调度到指定节点 |
kubectl describe pod <pod> | grep -A 5 Conditions |
查看 Pod 条件 |
验证 Pod 是否 Ready |
kubectl exec <pod> -- curl -s http://<svc>:<port> |
容器内测试服务 |
验证服务连通性 |
kubectl logs <pod> --tail=20 |
查看 Pod 日志 |
验证应用启动是否正常 |
kubectl apply -f <file>.yaml |
声明式部署 |
综合赛题一次性部署多个资源 |
📚 参考来源