Kubernetes (k8s) + Helm + GitLab CI / CD. Déployer correctement

Dans cet article, je veux expliquer comment déployer des applications dans différents environnements. Dans cet exemple, nous déploierons sur: "Test" et "Production". Bien sûr, vous pouvez ajouter n'importe quel environnement.

Pour déployer des applications, j'utilise HELM. Il permet une gestion flexible de la configuration. Ce que vous pouvez voir ci-dessous. On suppose que vous avez déjà un coureur à l'écoute avec barre et que vous savez et savez comment travailler avec HELM.

Exemple de fichier: .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 

Il convient de noter que, selon l'environnement, nous passons une variable: "test" ou "production".

Nous créons également le nom du projet en tenant compte du nom de la variable, afin que helm comprenne qu'il s'agit de projets différents (helm ls).

Ensuite, nous transmettons cette variable (environnement) à HELM sous la forme: "global.env".

Pour l'exemple ci-dessus, helm doit se trouver dans le même dossier dans votre référentiel.

Voyons maintenant un exemple d'utilisation de la variable d'environnement dans les graphiques HELM.

Créez de telles valeurs.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 

Ici, vous pouvez voir que pour différents environnements, nous spécifions différents paramètres.
Pour plus de commodité, vous pouvez spécifier les paramètres par défaut.

Un autre exemple pour 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 

Vous pouvez toujours vérifier le déroulement de votre graphique avec la commande:

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

Vous pouvez également déployer votre code sur différents nœuds en fonction de l'environnement.

Un exemple:

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

Merci à tous. Déployez correctement.

Source: https://habr.com/ru/post/fr422493/


All Articles