Kubernetes(k8s)+ Helm + GitLab CI / CD。 正确部署

在本文中,我想告诉您如何将应用程序部署到不同的环境。 在此示例中,我们将部署到:“测试”和“生产”。 当然,您可以添加任何环境。

对于部署应用程序,我使用HELM。 它允许灵活的配置管理。 您可以在下面看到的内容。 假定您已经有一个掌舵的跑步者,并且您知道并知道如何使用HELM。

示例文件: .gitlab-ci.yml

.base_deploy: &base_deploy stage: deploy script: - PROJECT_NAME="${CI_PROJECT_NAME}-${CI_ENVIRONMENT_SLUG}" - helm --namespace ${CI_ENVIRONMENT_SLUG} upgrade -i ${PROJECT_NAME} helm --set "global.env=${CI_ENVIRONMENT_SLUG}"; stages: - deploy Deploy to Test: <<: *base_deploy environment: name: test Deploy to Production: <<: *base_deploy environment: name: production when: manual 

值得注意的是,根据环境,我们传递一个变量:“ test”或“ production”。

我们还考虑变量名称来创建项目名称,以便掌舵人了解这些是不同的项目(hels ls)。

接下来,我们将此变量(环境)作为“ global.env”传递给HELM。

对于上面的示例,头盔应位于存储库中的同一文件夹中。

现在,让我们看一下如何在HELM Charts中使用环境变量的示例。

创建这样的values.yaml

 replicas: test: 1 production: 3 domain: test: test.domain.com production: production.domain.com resources: requests: cpu: _default: 50m production: 50m memory: _default: 256Mi production: 10Mi limits: memory: _default: 1Gi production: 1Gi cpu: _default: 1000m 

在这里您可以看到,对于不同的环境,我们指定了不同的设置。
为了方便起见,您可以指定默认设置。

ingress.yaml的另一个示例:

 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: {{ .Chart.Name }} spec: rules: - host: {{ pluck .Values.global.env .Values.domain | first | default .Values.domain._default }} http: paths: - path: / backend: serviceName: {{ .Chart.Name }} servicePort: 80 

您始终可以通过以下命令检查Chart的运行情况:

 helm template ./helm --set "global.env=test" helm template ./helm --set "global.env=production" 

您还可以根据环境将代码部署到不同的节点。

一个例子:

 {{ if eq .Values.global.env "test" }} nodeSelector: nodetype: testnodes {{ else if eq .Values.global.env "production" }} nodeSelector: nodetype: productionnodes {{ else }} 

谢谢大家 正确部署。

Source: https://habr.com/ru/post/zh-CN422493/


All Articles