Day 25 - 赛题模拟 1-3

📘 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 声明式部署 综合赛题一次性部署多个资源

📚 参考来源

来源 链接 / 说明
Kubernetes 官方:kubectl 速查表 https://kubernetes.io/docs/reference/kubectl/quick-reference/
Kubernetes 官方:Deployment https://kubernetes.io/docs/concepts/workloads/controllers/deployment/
Kubernetes 官方:Service https://kubernetes.io/docs/concepts/services-networking/service/
CKA 模拟题 https://killer.sh — 赛题风格最接近的模拟
全国职业院校技能大赛官网 历年容器云赛题规程与样题