📘 Day 27:赛题模拟 6-7

🎯 今日目标

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


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

【场景】现有集群出现问题,需要你排查并建立监控。

【操作要求】(总分 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 分钟)

【场景】从零搭建一个完整的博客平台,包括部署、配置、监控、安全。

【操作要求】(总分 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 官方:HPAhttps://kubernetes.io/docs/concepts/workloads/autoscaling/horizontal-pod-autoscale/
Kubernetes 官方:RBAChttps://kubernetes.io/docs/reference/access-authn-authz/rbac/
Kubernetes 官方:调度https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
CKA 模拟题https://killer.sh