跟着小新学 K8s(Day4):发布管理实操步骤拆解

Kubernetes 的发布管理是应用迭代的核心能力,下面拆解三种主流发布策略的实操步骤,小白也能轻松上手:


一、滚动更新(Rolling Update)

适用场景:无停机的渐进式更新
实操步骤:

  1. 创建基础 Deployment

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-app
    spec:
      replicas: 3
      strategy:
        type: RollingUpdate  # 滚动更新策略
        rollingUpdate:
          maxSurge: 1        # 允许超出副本数上限
          maxUnavailable: 0  # 保证零停机
      template:
        spec:
          containers:
          - name: nginx
            image: nginx:1.18  # 初始版本
    

  2. 触发更新

    kubectl set image deployment/nginx-app nginx=nginx:1.19
    

  3. 监控过程

    kubectl rollout status deployment/nginx-app  # 实时查看更新进度
    kubectl get pods -w                          # 观察Pod替换状态
    


二、蓝绿发布(Blue-Green)

适用场景:零风险版本切换
实操步骤:

  1. 部署蓝环境(旧版)

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: blue-app
      labels:
        version: "blue"
    spec:
      replicas: 3
      template: ... # 旧版配置
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        version: "blue"  # 流量指向蓝环境
      ports:
        - protocol: TCP
          port: 80
    

  2. 部署绿环境(新版)

    kubectl apply -f green-deployment.yaml  # 创建独立绿环境Deployment
    

  3. 流量切换
    修改 Service 的标签选择器:

    spec:
      selector:
        version: "green"  # 切换流量到绿环境
    


三、金丝雀发布(Canary)

适用场景:灰度验证新版本
实操步骤:

  1. 部署主版本

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: main-app
      labels:
        app: my-app
    spec:
      replicas: 9  # 90%流量
    

  2. 部署金丝雀版本

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: canary-app
      labels:
        app: my-app  # 相同app标签!
    spec:
      replicas: 1   # 10%流量
    

  3. 自动流量分配
    Service 通过标签选择器实现流量分流:

    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: my-app  # 同时选择两个Deployment
      ports: ... 
    

    流量比例计算公式:
    $$ \text{金丝雀流量占比} = \frac{\text{canary副本数}}{\text{main副本数} + \text{canary副本数}} \times 100% $$


关键验证命令
# 查看发布状态
kubectl get deployments -o wide

# 回滚操作(以滚动更新为例)
kubectl rollout undo deployment/nginx-app

# 查看历史版本
kubectl rollout history deployment/nginx-app

小白提示:

  • 滚动更新适合常规迭代
  • 蓝绿发布适合重大版本升级
  • 金丝雀发布适合高风险变更
    先从滚动更新开始练习,逐步掌握复杂策略!

更多推荐