Day 27 - 赛题模拟 6-7

📘 Day 27:赛题模拟 6-7

🎯 今日目标

完成 2 套高阶赛题,覆盖监控排错和全栈运维。


🏆 赛题 6:监控与故障排查(110 分钟)

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
42
43
44
45
46
47
48
49
【场景】现有集群出现问题,需要你排查并建立监控。

【操作要求】(总分 100 分)

Part A: 监控部署(30 分)
1. 使用 Helm 安装 kube-prometheus-stack:
- namespace: monitoring
- Grafana NodePort 30300
- Prometheus NodePort 30900
2. 登录 Grafana 查看集群概览仪表盘
3. 在 Prometheus 中查询:
- 所有节点的内存使用率
- CPU 使用率最高的 5 个 Pod

Part B: 故障排查(40 分)
【每个故障独立,写出完整排查过程】

故障 4.1: Pod 不断重启
- Deployment broken-api 的 Pod 状态 CrashLoopBackOff
- RESTARTS 计数已达 27
→ 请排查原因并修复

故障 4.2: Service 无法访问
- 集群内 curl http://user-svc 返回 503
- kubectl get svc user-svc 显示正常
→ 请排查原因并修复

故障 4.3: PVC 绑定失败
- PVC app-data 状态 Pending 已 10 分钟
- 集群中有多个 PV
→ 请排查原因并修复

故障 4.4: 节点异常
- k8s-node2 状态 NotReady
→ 请排查原因并修复

Part C: 告警配置(30 分)
5. 创建 PrometheusRule:
a. Pod 重启次数 > 5(15分钟)→ warning
b. Pod CrashLoopBackOff 持续 > 2分钟 → critical
c. 节点 NotReady → critical
d. PVC Pending 超过 5 分钟 → warning

6. 在 Prometheus Alerts 页面验证规则生效

【验证清单】
□ Prometheus + Grafana 可访问
□ 4 个故障全部排查并修复
□ 告警规则在 Prometheus 中可见

🏆 赛题 7:全栈运维综合(110 分钟)

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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
【场景】从零搭建一个完整的博客平台,包括部署、配置、监控、安全。

【操作要求】(总分 100 分)

Part A: 基础设施(20 分)
1. 创建命名空间 blog-platform
2. 配置 ResourceQuota:
- CPU 请求 4 核,内存 8Gi
- 最多 20 个 Pod
3. 配置 LimitRange:默认 requests cpu=100m mem=128Mi

Part B: 应用部署(30 分)
4. 数据库层:
- StatefulSet blog-db(2 副本,mysql:8.0)
- Headless Service blog-db-svc
- volumeClaimTemplates: 2Gi
- Secret 注入 root 密码

5. 缓存层:
- Deployment blog-cache(2 副本,redis:7-alpine)
- ClusterIP Service cache-svc

6. 应用层:
- Deployment blog-app(3 副本,nginx:alpine)
- ClusterIP Service app-svc
- 通过 ConfigMap 注入:DB_HOST=blog-db-svc, CACHE_HOST=cache-svc
- 通过 Secret 注入:DB_PASSWORD

7. 入口层:
- Ingress 规则:blog.example.com → app-svc:80

Part C: 安全加固(20 分)
8. 创建 NetworkPolicy:
a. blog-app → blog-db:3306
b. blog-app → blog-cache:6379
c. 拒绝其他 Pod 访问数据库和缓存
9. SecurityContext:
- runAsNonRoot, drop ALL cap, readOnlyRootFilesystem=false

Part D: 运维管理(20 分)
10. 配置 HPA:blog-app CPU 60%, min 2, max 8
11. 创建 CronJob db-backup:
- 每天凌晨 2 点执行
- 命令:echo "db backup at $(date)"
12. 创建 DaemonSet log-shipper:
- 每节点一个,采集日志

Part E: 验证与文档(10 分)
13. 验证所有组件正常运行
14. 写出运维手册(排查 Pod 崩溃的步骤)

【验证清单】
□ 所有 Pod Running
□ Ingress 可访问
□ NetworkPolicy 隔离生效
□ HPA 生效
□ CronJob 配置正确
□ DaemonSet 每节点一个 Pod

📋 命令速查

该赛题涉及的核心命令速查:

命令 功能 注解
kubectl create deploy <name> --image=<image> 创建 Deployment 应用部署基础
kubectl scale deploy <name> --replicas=<n> 扩缩副本 手动扩缩
kubectl autoscale deploy <name> --min=2 --max=10 --cpu=80% 创建 HPA 自动扩缩配置
kubectl get hpa 查看 HPA 状态 确认自动扩缩生效
kubectl top pods 查看 Pod 资源用量 HPA 依赖 metrics-server
kubectl taint node <node> <k>=<v>:NoSchedule 添加节点污点 赛题中”限制调度”操作
kubectl label node <node> <k>=<v> 给节点打标签 配合 nodeSelector/affinity
kubectl create sa <name> -n <ns> 创建 ServiceAccount 权限管理
kubectl create role <name> --verb=get,list --resource=pods -n <ns> 创建 Role 命名空间级权限
kubectl create rolebinding <name> --role=<role> --serviceaccount=<ns>:<sa> -n <ns> 绑定 Role 到 SA 完成授权
kubectl auth can-i <verb> <resource> --as=system:serviceaccount:<ns>:<sa> 验证权限 RBAC 配置验证

📚 参考来源

来源 链接 / 说明
Kubernetes 官方:HPA https://kubernetes.io/docs/concepts/workloads/autoscaling/horizontal-pod-autoscale/
Kubernetes 官方:RBAC https://kubernetes.io/docs/reference/access-authn-authz/rbac/
Kubernetes 官方:调度 https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
CKA 模拟题 https://killer.sh