如何配置 Kubernetes 滚动更新

KubernetesKubernetesBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

本全面教程探讨了 Kubernetes 滚动更新配置技术,为开发人员和 DevOps 专业人员提供了有效管理应用程序部署的基本策略。通过了解滚动更新机制,你将学习如何在 Kubernetes 环境中实现平稳、可控的更新,确保服务中断最小化并提高部署的可靠性。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kubernetes(("Kubernetes")) -.-> kubernetes/BasicCommandsGroup(["Basic Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedCommandsGroup(["Advanced Commands"]) kubernetes(("Kubernetes")) -.-> kubernetes/AdvancedDeploymentGroup(["Advanced Deployment"]) kubernetes(("Kubernetes")) -.-> kubernetes/ConfigurationandVersioningGroup(["Configuration and Versioning"]) kubernetes/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/delete("Delete") kubernetes/BasicCommandsGroup -.-> kubernetes/edit("Edit") kubernetes/BasicCommandsGroup -.-> kubernetes/expose("Expose") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/AdvancedDeploymentGroup -.-> kubernetes/rollout("Rollout") kubernetes/AdvancedDeploymentGroup -.-> kubernetes/scale("Scale") kubernetes/ConfigurationandVersioningGroup -.-> kubernetes/config("Config") subgraph Lab Skills kubernetes/create -.-> lab-434712{{"如何配置 Kubernetes 滚动更新"}} kubernetes/delete -.-> lab-434712{{"如何配置 Kubernetes 滚动更新"}} kubernetes/edit -.-> lab-434712{{"如何配置 Kubernetes 滚动更新"}} kubernetes/expose -.-> lab-434712{{"如何配置 Kubernetes 滚动更新"}} kubernetes/apply -.-> lab-434712{{"如何配置 Kubernetes 滚动更新"}} kubernetes/rollout -.-> lab-434712{{"如何配置 Kubernetes 滚动更新"}} kubernetes/scale -.-> lab-434712{{"如何配置 Kubernetes 滚动更新"}} kubernetes/config -.-> lab-434712{{"如何配置 Kubernetes 滚动更新"}} end

滚动更新基础

什么是 Kubernetes 滚动更新?

Kubernetes 滚动更新是一种以可控且可预测的方式更新和管理应用程序部署的基本机制。它允许你修改部署状态,例如更新容器镜像、更改配置或扩展资源,同时确保服务中断最小化。

滚动更新的关键概念

部署策略

Kubernetes 支持两种主要的滚动更新策略:

策略 描述 用例
RollingUpdate 逐步用新 Pod 替换旧 Pod 停机时间最短的应用程序
Recreate 在创建新 Pod 之前终止所有现有 Pod 容忍短暂停机时间的应用程序

滚动更新机制

graph LR A[当前部署] --> B[新部署] B --> C[逐步替换 Pod] C --> D[更新后的应用程序状态]

基本滚动更新配置

示例部署清单

apiVersion: apps/v1
kind: Deployment
metadata:
  name: example-app
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
  template:
    spec:
      containers:
        - name: app
          image: myapp:v1

滚动更新命令

关键的 kubectl 命令

  • kubectl rollout status deployment/example-app
  • kubectl rollout history deployment/example-app
  • kubectl rollout undo deployment/example-app

最佳实践

  1. 使用声明式配置
  2. 定义明确的滚动更新策略
  3. 实施健康检查
  4. 监控滚动更新进度

LabEx 建议

在学习 Kubernetes 滚动更新时,LabEx 提供了实践环境,以有效地练习和理解部署技术。

配置技术

滚动更新配置策略

1. RollingUpdate 配置

spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%

参数说明

参数 描述 默认值
maxSurge 可以在期望副本数之上创建的最大 Pod 数 25%
maxUnavailable 更新期间可以不可用的最大 Pod 数 25%

部署更新技术

蓝绿部署

graph LR A[蓝色环境] -->|切换流量| B[绿色环境] B -->|如有需要回滚| A

金丝雀部署配置

apiVersion: apps/v1
kind: Deployment
metadata:
  name: canary-deployment
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0

高级配置选项

健康检查和就绪探针

livenessProbe:
  httpGet:
    path: /healthz
    port: 8080
  initialDelaySeconds: 10
  periodSeconds: 5

readinessProbe:
  httpGet:
    path: /ready
    port: 8080
  initialDelaySeconds: 5
  periodSeconds: 3

滚动更新命令示例

## 检查滚动更新状态
kubectl rollout status deployment/my-app

## 暂停正在进行的滚动更新
kubectl rollout pause deployment/my-app

## 恢复暂停的滚动更新
kubectl rollout resume deployment/my-app

回滚机制

手动回滚

## 回滚到上一个版本
kubectl rollout undo deployment/my-app

## 回滚到特定版本
kubectl rollout undo deployment/my-app --to-revision=2

LabEx 提示

LabEx 建议在可控环境中练习这些配置技术,以培养实用的 Kubernetes 技能。

最佳实践

  1. 使用声明式配置
  2. 实施全面的健康检查
  3. 配置适当的更新策略
  4. 监控部署进度
  5. 制定强大的回滚计划

高级部署

渐进式交付技术

A/B 测试部署

graph LR A[主版本] -->|流量拆分| B[实验版本] B -->|性能比较| C[决策制定]

流量拆分配置

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "30"

自定义资源定义 (CRD)

部署策略

策略 描述 用例
渐进式交付 逐步推出功能 复杂微服务
功能标记 有条件地激活功能 实验性功能
多集群部署 跨集群同步 分布式系统

高级滚动更新自动化

Helm 部署管理

## 创建版本化部署
helm upgrade --install myapp./myapp-chart --version 1.2.3

## 使用 Helm 回滚
helm rollback myapp 2

可观测性与监控

部署指标收集

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: deployment-metrics
spec:
  selector:
    matchLabels:
      app: monitoring

自动化滚动更新策略

Argo Rollouts 示例

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
  name: advanced-rollout
spec:
  strategy:
    blueGreen:
      activeService: active-service
      previewService: preview-service

复杂部署场景

多环境策略

graph TD A[开发环境] --> B[预发布环境] B --> C[生产环境] C --> D[金丝雀环境]

LabEx 建议

LabEx 建议在模拟环境中练习高级部署技术,以培养全面的 Kubernetes 技能。

最佳实践

  1. 实施全面监控
  2. 使用声明式部署配置
  3. 利用基础设施即代码原则
  4. 开发强大的回滚机制
  5. 持续验证部署策略

总结

掌握 Kubernetes 滚动更新配置对于维护强大且灵活的容器编排系统至关重要。通过实施高级部署技术、理解配置策略以及利用 Kubernetes 强大的滚动更新控制功能,团队能够在复杂的容器化基础设施中实现无缝的应用程序更新、提高系统弹性并增强运营效率。