1. Pod频繁重启:没设置资源限额的悲剧

技术栈:Kubernetes v1.25 + YAML配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-server
spec:
  template:
    spec:
      containers:
      - name: nginx
        image: nginx:1.21
        # 缺少resources字段会导致容器资源无节制使用

解决方案

# 正确配置:添加资源请求和限制
resources:
  requests:
    memory: "256Mi"
    cpu: "200m"
  limits:
    memory: "512Mi" 
    cpu: "500m"  # CPU限额设置为0.5核

技术分析

  • 应用场景:Web服务器、数据库等需要稳定性的服务
  • 优缺点:预防OOMKilled事件,但过度限制会导致资源浪费
  • 注意事项:建议通过压测确定合理数值,生产环境必须配置

2. 服务雪崩:就绪探针配置缺失

技术栈:Spring Boot应用 + Kubernetes Service

# 危险配置:没有就绪探针的Service
livenessProbe:
  httpGet:
    path: /actuator/health
  initialDelaySeconds: 5
# 缺少readinessProbe会导致流量打到未初始化完成的Pod

修复方案

readinessProbe:
  httpGet:
    path: /api/ready  # 业务自定义就绪检查端点
    port: 8080
  failureThreshold: 3
  periodSeconds: 10   # 每10秒检测一次

关联技术

# 使用kubectl debug命令验证探针
kubectl port-forward pod/web-7d8f9 8080:8080
curl http://localhost:8080/api/ready

3. 配置文件混乱:ConfigMap热更新失效

技术栈:Python Flask应用 + ConfigMap

# 错误用法:直接挂载ConfigMap目录
volumes:
- name: config
  configMap:
    name: app-settings
volumeMounts:
- mountPath: /etc/config  # 整个目录挂载导致单文件更新不生效

正确配置

# 精准挂载单个配置文件
volumeMounts:
- mountPath: /app/config.yaml
  subPath: config.yaml  # 使用subPath隔离更新

热更新技巧

# 触发配置重新加载(无需重启Pod)
kubectl rollout restart deployment/myapp

4. 存储灾难:PVC删除导致数据丢失

技术栈:AWS EKS + EBS存储类

# 危险配置:使用默认回收策略
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-ssd
provisioner: ebs.csi.aws.com
reclaimPolicy: Delete  # 默认值会在PVC删除时销毁数据

正确配置

reclaimPolicy: Retain   # 保留存储卷
parameters:
  encrypted: "true"     # 启用加密功能

数据保护策略

# 创建定期快照的CronJob
kubectl create cronjob ebs-snapshot \
  --image=aws-cli \
  --schedule="0 2 * * *" \
  -- \ 
  ec2 create-snapshot --volume-id $(kubectl get pv pvc-xxxx -o jsonpath='{.spec.awsElasticBlockStore.volumeID}')

5. 版本陷阱:API弃用导致集群升级失败

技术栈:Kubernetes 1.22升级到1.25

# 检查废弃API的命令
kubectl api-resources --verbs=list --namespaced -o wide | grep "v1beta1"

迁移方案

# 旧的Deployment配置(已弃用)
apiVersion: extensions/v1beta1  # 1.16+已弃用
# 修正为
apiVersion: apps/v1

升级检查清单

  1. 使用kube-no-trouble扫描集群
  2. 分阶段升级(先worker node后master)
  3. 保留快速回滚的快照

6. 网络黑洞:Service类型选择错误

技术栈:NodePort vs LoadBalancer

# 错误场景:生产环境直接使用NodePort
kind: Service
spec:
  type: NodePort  # 需要手动管理流量分发
  ports:
  - nodePort: 31000  # 端口冲突风险

云环境最佳实践

type: LoadBalancer  # 自动创建云厂商负载均衡器
metadata:
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-type: "nlb"

7. 调度瓶颈:节点亲和性配置不当

技术栈:GPU节点调度

# 模糊的节点选择器导致调度失败
nodeSelector:
  accelerator: gpu  # 标签可能不存在

# 精确的节点亲和性配置
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: node.kubernetes.io/instance-type
          operator: In
          values: [p3.2xlarge, g4dn.xlarge]

8. 日志黑洞:DaemonSet配置错误

技术栈:Fluentd日志收集

# 错误配置:未挂载Docker日志目录
volumeMounts:
- name: varlog
  mountPath: /var/log  # 遗漏容器运行时日志路径

# 正确配置
- name: varlibdockercontainers
  mountPath: /var/lib/docker/containers
  readOnly: true

9. 认证危机:RBAC权限过大

技术栈:服务账户权限控制

# 危险的角色绑定
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
subjects:
- kind: ServiceAccount
  name: frontend
roleRef:
  kind: ClusterRole
  name: cluster-admin  # 授予过高权限

# 最小权限原则示例
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["get", "list"] 

10. 扩展陷阱:HPA指标选择错误

技术栈:Prometheus + Custom Metrics

# 无效的CPU指标配置
metrics:
- type: Resource
  resource:
    name: cpu
    target:
      type: Utilization
      averageUtilization: 80  # 可能无法反映真实负载

# 使用自定义业务指标
- type: Pods
  pods:
    metric:
      name: http_requests_per_second
    target:
      type: AverageValue
      averageValue: 1000

11. 技术总结

应用场景

  • 中小规模集群优化
  • CI/CD环境调试
  • 多云环境部署验证

注意事项

  1. 生产环境必须启用审计日志
  2. 定期执行kube-bench安全扫描
  3. 使用Kyverno等工具实施策略管控