如何在 Kubernetes 中部署应用程序

已发表: 2022-11-09

Kubernetes 是最流行的自动化平台之一,用于在主机或节点集群上部署、扩展和操作应用程序容器。

本文将讨论 Kubernetes 中的核心对象之一:部署。 目标是了解其行为以及如何创建、更新和删除它。

什么是部署?

Deployment 是用于启动 Pod 的对象之一。 Kubernetes 最佳实践鼓励将部署用于无状态应用程序。 如果没有部署,您将需要手动创建、更新和删除多个 Pod,这对于许多 Pod 来说既繁琐又不可行。

部署在 YAML 中声明了一个对象,该对象不仅可以创建 Pod,还可以确保它们是最新的并且正在运行。 您还可以使用 Kubernetes 上的部署轻松地自动扩展您的应用程序。 因此,部署用于在 Pod 中扩展、部署和回滚应用程序的版本。

部署还告诉 Kubernetes 我们要运行多少个 Pod 副本,其余的由 Kubernetes 处理。 创建部署时,关联的控制器将根据您的配置创建一个 ReplicaSet。 与 ReplicaSet 关联的控制器将从 ReplicaSet 配置中创建一系列 Pod。

使用部署而不是直接创建 ReplicaSet 的优点是:

  • 对象的历史化:对象中的每次更改(通过“应用”或“编辑”)都将创建先前版本的备份。
  • 推出和回滚管理:您可以返回与前一点相关的配置。

创建部署

我们可以使用两种方法来创建 Kubernetes 部署:

命令式方法

Kubernetes API 允许更直接和命令式的方法,而不需要配置文件或 YAML 格式的清单。 在这种方法中,我们需要做的就是说出我们想要做什么,而 Kubernetes 将负责定义必须做什么才能达到预期的结果。

要使用命令式方法,只需使用以下命令:

 kubectl create deployment nginx-deployment --image nginx --port=80

声明式方法

在这种方法中,您必须声明所有内容,当您使用此代码时,Kubernetes 只会读取您的定义并完全按照呈现或声明的方式创建。

要使用声明式部署,您必须创建一个 YAML 文件。

用于部署的 YAML 文件,名称为new_deployment.yaml

 apiVersion: apps/v1 kind: Deployment metadata:  name: nginx-deployment spec:  #Specifies the number of Pod Copies  replicas: 3 #Selects the Pod to be managed by the deployment  selector:    #Matches the defined labels    matchLabels:      deploy: example  template:    metadata:      #Specifies the labels on the Pod.       labels:         deploy: example    spec:      containers:        - name: nginx          image: nginx:1.20.2

在这个 YAML 文件中,在定义了 Kubernetes API 版本、您正在创建的对象的类型以及部署的名称之后,就有了 spec 部分。 在本节中,您首先定义 replicas 键,它指示部署必须保持活动的 Pod 实例的数量。

使用选择器标签来标识部署中的 Pod。 为此,您可以使用 deploy 标签,它告诉所有匹配这些标签的 pod 都在部署中分组。

之后,您就拥有了模板对象,其中您的部署规范中有一个 Pod 模型。 当部署创建 Pod 时,它使用此模板创建它们。 常规 pod 的规范可以在 template 键下找到。

通过此部署,带有标签的 Nginx 映像将部署到 Pod。 此外,在这一点上你也必须小心,而 Pod 是 Kubernetes 中的可扩展单元,所以如果你将多个容器放在同一个 Pod 中,你必须考虑要使用的模式。

接下来,应用new_deployment.yaml Yaml 文件,使用以下命令:

 kubectl apply -f new_deployment.yaml

几秒钟后,您可以使用以下命令获取部署状态:

 kubectl get all
部署

检索和更新部署

请注意,您已经创建了 Pod、部署以及 Replicaset。 所以部署总是创建和管理一个 Replicaset。 现在您可以使用以下命令来描述部署:

 kubectl describe deployment nginx-deployment
描述

现在您对部署有了完整的描述。 当更新被定义为 RollingUpdate 时,它​​突出显示了用于创建/重建 pod 的策略。

RollingUpdate策略允许将应用程序的一个版本有序迁移到新版本。 这是 Kubernetes 中使用的默认策略。

除此之外,我们还有以下策略:

  • 重新创建:终止当前正在运行的 Pod 实例并使用新版本“重新创建”它们;
  • 蓝色/绿色:此策略创建两个独立但相同的环境。 在蓝色环境中,应用程序按原样运行,而在绿色环境中,应用程序按将来的方式运行;
  • Canary:一种部署策略,其中一部分用户参与应用程序或服务的增量发布。

如果您选择“滚动更新”,您可以配置其关于所需副本数量的行为。

  • maxSurge允许您指示(以百分比或绝对值表示)除了当前配置的副本数量外,它还可以创建多少个 Pod。
  • maxUnavailable允许您指示(以百分比或绝对值)在更新期间有多少 Pod 可能“不可用”,具体取决于配置的副本数。

根据您的应用程序和自动缩放器,这些配置将允许您确保 QoS 或加快部署。

接下来,您必须将 Pod 缩放为 10,并将 Nginx 映像标签更改为最新。

 kubectl scale deployment nginx-deployment --replicas=10
比例尺 1

请注意,我们创建了 5 个容器,在 10 个 Pod 中,我们有 5 个可用。

几秒钟后,使用以下命令:

 kubectl get all

在这里,您可以看到所有 Pod 都已创建,并且容器正在运行。

全1

删除您的部署

要删除 Kubernetes 部署,您可以使用以下命令:

 kubectl delete deploy nginx-deployment kubectl delete deploy new_deployment.yaml

Helm:简化部署

当你要部署一个使用数十甚至数百个 Kubernetes 资源的复杂应用程序时,kubectl 工具变得不合适,这就是开发 Helm 工具的原因。 Helm 是 Kubernetes 的包管理器,它构建在 kubectl 之上并简化了应用程序部署。

在 Helm 词汇表中,应用程序称为发布。 它与图表相关联,即 YAML 格式的配置文件集合,其中包含描述 Kubernetes 资源的全局变量和模板。

结论

部署是必不可少的 Kubernetes 对象。 由于强大的权力意味着重大的责任,因此在配置它时必须小心,否则可能会出现意外行为。 要进一步了解部署配置,您可以参考 Kubernetes 文档。

您还可以探索一些最好的 Kubernetes 教程,从头开始学习并成为专家。