如何在Kubernetes中部署应用程序

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

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

什么是部署(Deployment)?

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

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

部署还告诉Kubernetes我们要运行多少个Pod的副本,Kubernetes会处理剩下的事情。当创建一个部署时,关联的控制器将根据您的配置创建一个副本集。与副本集关联的控制器将根据副本集的配置创建一系列Pod。

使用部署而不是直接创建副本集的优势包括:

  • 对象历史记录:对象的每个更改(通过“应用”或“编辑”)都会创建先前版本的备份。
  • 部署和回滚管理:可以与前一点连接来回退配置。

创建部署(Deployment)

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

命令式方法

Kubernetes的API允许更直接和命令式的方法,而无需配置文件或YAML格式的清单。在这种方法中,我们只需要说明我们想要做什么,Kubernetes将负责定义必须完成以实现预期结果的工作。

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

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

声明式方法

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

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

名为new_deployment.yaml的部署的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的规范可以在模板键下找到。

使用此部署,Nginx镜像将被部署到Pods中。此外,您还必须对此点格外小心,Pod是Kubernetes中的可伸缩性单元,因此如果将多个容器放在同一个Pod中,您必须考虑要使用的模式。

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

kubectl apply -f new_deployment.yaml

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

kubectl get all

检索和更新部署

请注意,您已经创建了Pods、部署和一个Replicaset。因此,部署始终会创建并管理一个Replicaset。现在,您可以使用以下命令描述部署:

kubectl describe deployment nginx-deployment 

现在,您已经完整描述了部署。它突出显示了当更新被定义为RollingUpdate时创建/重建Pod的策略。

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

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

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

如果选择“rolling-update”,可以配置其关于所需副本数量的行为。

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

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

接下来,您需要将Pod缩放到10个,并将Nginx镜像标签更改为最新版本。

kubectl scale deployment nginx-deployment --replicas=10

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

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

kubectl get all

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

删除您的部署

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

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

Helm:简化部署

当您想要部署一个使用数十甚至数百个Kubernetes资源的复杂应用程序时,kubectl工具变得不再适用,这就是为什么开发了Helm工具。Helm是Kubernetes的软件包管理器,构建在kubectl上,并简化了应用程序部署。

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

结论

部署是一个重要的Kubernetes对象。由于伟大的力量意味着伟大的责任,当配置它时,您必须小心,否则可能会出现意外行为。要进一步了解部署配置,请参阅Kubernetes documentation

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

类似文章