📘 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 官方: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 |