Déployer avec Helm

Effectué

Vous avez correctement généré et envoyé (push) vos images intermédiaires et de production à votre instance Azure Container Registry. Il est temps d’automatiser toutes les étapes et de rendre le pipeline opérationnel pour vous.

Actuellement, vous devez modifier manuellement les fichiers lors de chaque exécution du pipeline. Vous ne pouvez donc pas déployer automatiquement. Vous pouvez résoudre ce problème en utilisant un graphique Helm pour gérer vos déploiements. Dans cette unité, vous découvrez les graphiques et les modèles Helm.

Graphiques Helm

Helm est un outil d’empaquetage open source similaire aux gestionnaires de packages Linux, comme APT et Yum. Helm peut vous aider à installer et gérer le cycle de vie d’applications Kubernetes.

Vous utilisez Helm pour gérer des graphiques Kubernetes qui sont des groupes constitués de une ou plusieurs charges de travail empaquetées avec des fichiers config et un fichier de description de graphique. Lorsqu’ils sont regroupés dans un chart, les fichiers peuvent être déployés sous la forme d’une unité dans un cluster Kubernetes.

L’un des avantages de l’utilisation est Helm est qu’il n’est pas nécessaire de déployer des fichiers individuellement. Vous pouvez émettre une seule commande pour déployer le graphique. Vous pouvez même déployer plusieurs charts dépendants, avec une résolution automatique des dépendances.

Voici la structure d’un répertoire de graphique Helm courant :

Screenshot that shows an example of a Helm chart tree.

  • Le fichier Chart.yaml contient le nom, la description et la version du graphique.
  • Le répertoire des graphiques comprend des graphiques dépendants.
  • Le répertoire des modèles contient tous les fichiers manifestes.
  • Le fichier values.yaml contient les valeurs par défaut pour les modèles Helm.

Modèles Helm

Une fonctionnalité notable de l’outil Helm est sa capacité à créer et gérer des modèles pour effectuer des déploiements automatisés. Les modèles permettent d’automatiser les fichiers manifestes et de les ajouter à un pipeline CI/CD. Un fichier de modèle est un fichier manifeste contenant des espaces réservés pour les valeurs des variables.

Examinons l’exemple suivant du fichier deployment.yaml dans le répertoire kubernetes de la duplication (fork) de votre site web :

apiVersion: apps/v1
kind: Deployment
metadata:
  name: contoso-website
spec:
  selector:
    matchLabels:
      app: contoso-website
  template:
    metadata:
      labels:
        app: contoso-website
    spec:
      containers:
        - image: !IMAGE!
          name: contoso-website
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
          ports:
            - containerPort: 80
              name: http

Votre workflow remplace l’espace réservé !IMAGE! par votre instance Container Registry et le nom de l’image. Dans un workflow manuel, vous pouvez exécuter la commande suivante pour remplacer l’espace réservé !IMAGE!, puis imprimer le résultat. Pour exécuter le code manuellement, vous pouvez diriger la commande vers kubectl apply -f - pour créer les charges de travail :

$ sed 's+!IMAGE!+'"$ACR_NAME"'/contoso-website+g' kubernetes/deployment.yaml

Toutefois, cette solution manuelle n’est ni harmonieuse ni efficace. Avec la création de modèles natifs Helm, vous pouvez remplacer !IMAGE! en utilisant la variable {{.Values.containerImage}} à la place.

...
  template:
...
    spec:
      containers:
        - image: {{.Values.containerImage}}
...

Ensuite, vous exécutez helm install pour pointer vers votre image et passer votre dossier graphiques :

$ helm install contoso-website ./chart-location --set containerImage="$ACR_NAME/contoso-website"

Helm offre également des fonctions de modèle pour une logique plus complexe, par exemple pour inclure des valeurs par défaut et des valeurs obligatoires dans votre environnement. Passez à l’unité suivante afin de créer un graphique Helm pour rendre votre pipeline CI/CD plus efficace.

Contrôle de vos connaissances

1.

Présentation de Helm

2.

Qu’est-ce qui rend Helm particulièrement utile dans un pipeline CI/CD ?