随笔 - 430  文章 - 0  评论 - 5  阅读 - 7664

K8s Deployment配置

Kubernetes Deployment配置终极指南:生产环境YAML实战手册

Deployment是Kubernetes无状态应用的基石,本文将揭示生产级YAML的23个关键要素,助您避开90%的配置陷阱。


一、基础配置四要素

apiVersion: apps/v1
kind: Deployment
metadata:
  name: prod-frontend
  namespace: production
  labels:
    app: frontend
    env: prod
  1. 版本锁定:始终指定稳定版本标签

    image: registry.prod/frontend:v1.8.3  # 禁止使用latest
    
  2. 副本策略:根据节点数动态调整

    replicas: 3  # 建议为集群节点数的1.5倍
    
  3. 标签体系:三级标签规范

    labels:
      company: your-company  # 组织级
      region: us-west        # 地域级 
      app: payment-service   # 应用级
    
  4. 选择器规范:精确匹配原则

    selector:
      matchLabels:
        app: frontend
      matchExpressions:
        - {key: env, operator: In, values: [prod]}
    

二、生产级容器配置

containers:
- name: main
  image: registry.prod/frontend:v1.8.3
  imagePullPolicy: IfNotPresent  # 生产环境必须显式声明
  ports:
  - containerPort: 8080
    protocol: TCP
  resources:
    requests:
      cpu: "500m"
      memory: "1Gi"
    limits:
      cpu: "2"
      memory: "4Gi"
  livenessProbe:
    httpGet:
      path: /healthz
      port: 8080
    initialDelaySeconds: 30  # 避免冷启动误杀
  readinessProbe:
    tcpSocket:
      port: 8080
    periodSeconds: 5
  securityContext:
    readOnlyRootFilesystem: true
    runAsNonRoot: true

关键配置解析

  1. 资源限制:防止单Pod耗尽节点资源
  2. 双探针机制:确保流量只路由到健康实例
  3. 安全上下文:最小权限原则

三、高级部署策略

1. 滚动更新双保险
strategy:
  type: RollingUpdate
  rollingUpdate:
    maxSurge: 25%        # 最大激增Pod数
    maxUnavailable: 10%  # 最大不可用比例
2. 多可用区部署
affinity:
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
    - labelSelector:
        matchExpressions:
        - key: app
          operator: In
          values: [frontend]
      topologyKey: topology.kubernetes.io/zone
3. 版本回滚预案
# 查看修订历史
kubectl rollout history deploy/prod-frontend

# 快速回滚到指定版本
kubectl rollout undo deploy/prod-frontend --to-revision=3

四、生产环境黄金法则

  1. 镜像管理三原则

    • 禁止使用latest标签
    • 私有仓库强制认证
    • 镜像签名校验
    imagePullSecrets:
    - name: registry-credential
    
  2. 版本控制策略

    生成

    构建

    部署

    CI流水线

    Git Commit SHA

    镜像版本号

    v1.2.3-8a3b9c2

  3. 多环境配置管理

    # 通过kustomize实现环境差异化
    bases:
    - ../base
    patches:
    - replica-patch.yaml
    - resource-patch.yaml
    

五、监控排障工具箱

  1. 实时状态诊断

    # 查看部署状态
    kubectl rollout status deploy/prod-frontend
    
    # 查看事件流
    kubectl describe deploy/prod-frontend | grep -A 20 Events
    
  2. 性能分析命令

    # 资源使用Top榜
    kubectl top pods -l app=frontend
    
    # 抓取性能profile
    kubectl debug -it <pod> --image=nicolaka/netshoot -- perf record
    
  3. 自动扩缩容配置

    # 关联HPA策略
    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: frontend-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: prod-frontend
      minReplicas: 3
      maxReplicas: 10
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 70
    

六、经典故障案例

事故背景:某电商大促期间服务雪崩
错误配置

strategy:
  rollingUpdate:
    maxSurge: 100%      # 错误配置
    maxUnavailable: 50% # 错误配置

造成后果

  • 新版本缺陷导致50%实例不可用
  • 流量激增触发级联故障

修复方案

  1. 修改滚动策略:
    maxSurge: 25%
    maxUnavailable: 0
    
  2. 增加前置金丝雀发布阶段
  3. 实施渐进式流量切换

结语
优秀的Deployment配置如同精密的瑞士手表——每个齿轮都要严丝合缝。记住三个关键数字:

  • 30秒:存活探针初始延迟下限
  • 5副本:单Deployment最小生产副本数
  • 25%:滚动更新最大激增比例

建议每月执行一次"配置健康度检查",使用kube-score等工具自动化扫描,让您的YAML配置始终保持在战斗状态。

posted on   Leo-Yide  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

点击右上角即可分享
微信分享提示