如何安全升级 Kubernetes 部署

KubernetesKubernetesBeginner
立即练习

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

简介

本教程将引导你了解 Kubernetes 部署,以及如何配置更新策略以有效管理容器化应用程序的生命周期。你将了解使用 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/BasicCommandsGroup -.-> kubernetes/create("Create") kubernetes/BasicCommandsGroup -.-> kubernetes/edit("Edit") kubernetes/AdvancedCommandsGroup -.-> kubernetes/apply("Apply") kubernetes/AdvancedDeploymentGroup -.-> kubernetes/rollout("Rollout") kubernetes/AdvancedDeploymentGroup -.-> kubernetes/scale("Scale") subgraph Lab Skills kubernetes/create -.-> lab-414653{{"如何安全升级 Kubernetes 部署"}} kubernetes/edit -.-> lab-414653{{"如何安全升级 Kubernetes 部署"}} kubernetes/apply -.-> lab-414653{{"如何安全升级 Kubernetes 部署"}} kubernetes/rollout -.-> lab-414653{{"如何安全升级 Kubernetes 部署"}} kubernetes/scale -.-> lab-414653{{"如何安全升级 Kubernetes 部署"}} end

理解 Kubernetes 部署

Kubernetes 是一个强大的容器编排平台,它简化了容器化应用程序的部署和管理。Kubernetes 的核心是部署(Deployment)的概念,它是一个更高级别的抽象,用于管理一组 Pod(Kubernetes 中的基本执行单元)的生命周期。

Kubernetes 部署负责确保容器化应用程序的指定数量的副本始终处于运行状态。它提供了一种声明式的方式来定义应用程序的期望状态,Kubernetes 将自动努力维持该状态。

部署构建在 Kubernetes 副本集(ReplicaSet)之上,副本集负责维护一组稳定的 Pod 副本。当你创建一个部署时,Kubernetes 将自动创建一个副本集来管理 Pod。

graph TD A[部署] --> B[副本集] B[副本集] --> C[Pod] C[Pod] --> D[容器]

使用 Kubernetes 部署的主要好处之一是能够轻松地更新和回滚应用程序。部署支持各种更新策略,如滚动更新和蓝绿部署,这使你能够安全地逐步部署应用程序的新版本而无需停机。

以下是一个简单的 Kubernetes 部署清单示例:

apiVersion: apps/v1
kind: 部署
metadata:
  name: 我的应用
spec:
  replicas: 3
  selector:
    matchLabels:
      app: 我的应用
  template:
    metadata:
      labels:
        app: 我的应用
    spec:
      containers:
        - name: 我的应用
          image: 我的应用:v1
          ports:
            - containerPort: 8080

此部署将确保始终运行三个 我的应用 容器的副本,使用 我的应用:v1 容器镜像。部署还将自动管理底层的副本集和 Pod 以维持期望状态。

配置部署更新策略

Kubernetes 部署的关键特性之一是能够轻松地更新和回滚应用程序。部署支持各种更新策略,使你能够控制应用程序新版本的部署方式。

两种主要的更新策略是:

  1. 滚动更新:这是 Kubernetes 中的默认更新策略。通过滚动更新,Kubernetes 会逐渐用新的 Pod 实例替换旧的实例,确保在更新过程中始终有最少数量的可用 Pod。
graph TD A[部署] --> B[副本集 v1] B[副本集 v1] --> C[Pod v1] C[Pod v1] --> D[容器 v1] A[部署] --> E[副本集 v2] E[副本集 v2] --> F[Pod v2] F[Pod v2] --> G[容器 v2]
  1. 蓝绿部署:在这种策略中,你维护两个相同的环境,通常称为“蓝”和“绿”。你将应用程序的新版本部署到“绿”环境中,一旦验证通过,就将生产流量切换到“绿”环境。
graph TD A[部署] --> B[副本集 v1] B[副本集 v1] --> C[Pod v1] C[Pod v1] --> D[容器 v1] A[部署] --> E[副本集 v2] E[副本集 v2] --> F[Pod v2] F[Pod v2] --> G[容器 v2]

你可以在部署的 spec.strategy 字段中配置更新策略。例如:

apiVersion: apps/v1
kind: 部署
metadata:
  name: 我的应用
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  #...

在此示例中,部署被配置为使用滚动更新策略,在更新过程中最多额外增加一个 Pod(maxSurge)且没有 Pod 不可用(maxUnavailable)。

通过理解并配置适当的更新策略,你可以确保应用程序部署顺利、可靠,并最大程度减少用户的停机时间。

实践:更新 Kubernetes 部署

在本实践部分,我们将逐步介绍更新 Kubernetes 部署的过程。我们将从初始部署开始,然后将容器镜像更新到新版本,并观察更新过程。

首先,让我们创建一个简单的部署清单并将其应用到我们的 Kubernetes 集群:

apiVersion: apps/v1
kind: 部署
metadata:
  name: 我的应用
spec:
  replicas: 3
  selector:
    matchLabels:
      app: 我的应用
  template:
    metadata:
      labels:
        app: 我的应用
    spec:
      containers:
        - name: 我的应用
          image: 我的应用:v1
          ports:
            - containerPort: 8080

此部署将创建三个 我的应用:v1 容器镜像的副本。

现在,让我们将容器镜像更新到新版本:

apiVersion: apps/v1
kind: 部署
metadata:
  name: 我的应用
spec:
  replicas: 3
  selector:
    matchLabels:
      app: 我的应用
  template:
    metadata:
      labels:
        app: 我的应用
    spec:
      containers:
        - name: 我的应用
          image: 我的应用:v2
          ports:
            - containerPort: 8080

这里唯一的更改是容器镜像标签,已从 v1 更新为 v2

要应用更新,我们可以使用 kubectl apply 命令:

kubectl apply -f deployment-update.yaml

Kubernetes 现在将开始更新过程,逐渐用新的 Pod 替换旧的 Pod。你可以使用以下命令观察进度:

## 查看部署状态
kubectl get deployment 我的应用 -w

## 查看副本集和 Pod 状态
kubectl get rs,pods -l app=我的应用

在更新过程中,你应该会看到新的副本集被创建,并且随着新 Pod 的推出,旧的 Pod 被终止。

更新完成后,你可以通过检查 Pod 详细信息来验证新的容器镜像是否正在运行:

kubectl describe pod -l app=我的应用

这个实践示例展示了更新 Kubernetes 部署以及利用内置的滚动更新功能来确保应用程序部署过程顺利且可靠是多么容易。

总结

Kubernetes 部署提供了一种强大的声明式方式来管理容器化应用程序的生命周期。通过理解部署的概念和可用的更新策略,你可以在不停机的情况下有效地部署和更新应用程序,确保用户体验流畅且可靠。本教程涵盖了 Kubernetes 部署的关键方面,包括底层的副本集和 Pod,以及为满足应用程序需求而配置的不同更新策略。