Exercice : créer un graphique Helm pour le déploiement

Effectué

Dans cette leçon, vous allez créer un graphique Helm à déployer sur Azure Kubernetes Service (AKS) à l’aide de GitHub Actions. Pour créer le graphique Helm, effectuez les tâches suivantes :

  • Vérifiez l’installation Helm.
  • Créez un graphique.
  • Configurez le graphique.
  • Créez un déploiement.
  • Créez un fichier YAML vide.
  • Ajoutez du contenu au fichier YAML.
  • Créez un service.
  • Créez une entrée.
  • Créez un nom de zone DNS.

Vérifier l’installation Helm et mettre à jour le référentiel

L’interface CLI Helm est déjà installée dans Azure Cloud Shell. Si Cloud Shell n’est pas déjà ouvert, connectez-vous à Cloud Shell et assurez-vous que Bash est défini comme terminal Cloud Shell.

  1. Exécutez helm version pour vous assurer que la version de Helm affichée est supérieure à 3.

  2. Passez à votre référentiel dupliqué pour ce module en exécutant cd mslearn-aks-deployment-pipeline-github-actions.

  3. Exécutez git pull origin main pour extraire vos modifications des leçons précédentes.

Créer un graphique Helm

Générez un modèle Helm réutilisable dans le répertoire Kubernetes de votre référentiel.

  1. Dans Cloud Shell, passez au répertoire kubernetes :

    cd kubernetes
    
  2. Utilisez helm create pour créer un répertoire nommé contoso-website dans le répertoire kubernetes :

    helm create contoso-website
    
  3. Commutez vers le nouveau répertoire avec cd.

    cd contoso-website
    
  4. Supprimez les dossiers graphiques et modèles de ce répertoire.

    rm -r charts templates
    
  5. Créez un dossier de modèles vides.

    mkdir templates
    
  6. Pour commencer la génération de charges de travail dans votre graphique vide, créez un ensemble de fichiers YAML en déplaçant les fichiers existants dans le répertoire kubernetes vers le nouveau dossier modèles :

    mv ../*.yaml ./templates
    

Vous disposez maintenant d’un nouveau graphique Helm. Configurez ensuite le graphique.

Configurer le chart

  1. Exécutez cd ../.. pour basculer vers la racine de votre référentiel.

  2. Exécutez code . pour ouvrir l’éditeur de code dans le répertoire actif.

  3. Dans le menu de gauche, développez le dossier kubernetes/contoso-website, puis ouvrez le fichier Chart.yaml. Chart.yaml est le fichier qui nomme le graphique et dans lequel Helm recherche des informations sur le graphique.

  4. Supprimez tout le contenu du fichier, à l’exception des trois premières lignes et de la version du graphique, puis modifiez la description afin que le fichier ressemble à cet exemple :

    apiVersion: v2
    name: contoso-website
    description: Chart for the Contoso company website
    version: 0.1.0
    
  5. Enregistrez le fichier en sélectionnant le coin supérieur droit de la barre d’outils de l’éditeur, puis Enregistrer, ou en appuyant sur Ctrl+S.

Créer un déploiement

Ajoutez des modèles pour ce déploiement.

  1. Dans le menu de gauche, ouvrez le fichier deployment.yaml dans le dossier kubernetes/templates.

  2. Dans la section principale metadata, ajoutez une nouvelle clé appelée namespace avec la valeur {{ default "staging" .Release.Namespace }}. La section metadata doit être semblable à cet exemple :

    metadata:
      name: contoso-website
      namespace: {{ default "staging" .Release.Namespace }}
    

    Par défaut, le workflow déploie cette ressource dans l’espace de noms staging, mais si la commande helm install dispose d’une option Namespace, le workflow utilise plutôt cet espace de noms.

  3. Sous la section template/spec/containers, remplacez !IMAGE! par les versions latest ou tag de votre cluster AKS.

    Il est recommandé de fractionner les parties registry, image et tag du nom de l’image pour les utiliser plus facilement. Ajoutez trois nouvelles variables du modèle qui utilisent les valeurs de Values.image.registry, Values.image.name et Values.image.tag.

    - image: {{ .Values.image.registry }}.azurecr.io/{{ .Values.image.name }}:{{ default "latest" .Values.image.tag }}
    

    Votre fichier deployment.yaml doit ressembler à l’exemple suivant :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
      namespace: {{ default "staging" .Release.Namespace }}
    spec:
      selector:
        matchLabels:
          app: contoso-website
      template:
        metadata:
          labels:
            app: contoso-website
        spec:
          containers:
            - image: {{ .Values.image.registry }}.azurecr.io/{{ .Values.image.name }}:{{ default "latest" .Values.image.tag }}
              name: contoso-website
              resources:
                requests:
                  cpu: 100m
                  memory: 128Mi
                limits:
                  cpu: 250m
                  memory: 256Mi
              ports:
                - containerPort: 80
                  name: http
    
  4. Enregistrez le fichier.

Ajouter du contenu au fichier values.yaml

Vous avez précédemment utilisé {{ .Release.Namespace }}, donc Release est une étendue de variable. Chaque étendue de variable a des valeurs par défaut et des variables différentes. Le fichier values.yaml correspond à une autre étendue de la variable. Helm utilise le fichier values.yaml pour récupérer toutes les valeurs du modèle qui commencent par {{ .Values }}.

Ce fichier doit posséder la même structure que celui utilisé pour appeler les variables. Intéressons-nous rapidement à votre fichier modifié deployment.yaml pour en voir la structure. Vous avez utilisé .Values.image.registry, .Values.image.name et .Values.image.tag dans le fichier deployment.yaml.

  1. À la racine du répertoire contoso-website, ouvrez le fichier values.yaml.

  2. Supprimez tout le contenu du fichier, pour obtenir un fichier YAML vide.

  3. Ajoutez le contenu suivant au fichier vide, en remplaçant l’espace réservé <ACR-NAME> par le nom de votre Azure Container Registry.

    image:
      registry: <ACR-NAME>
      name: contoso-website
      tag: latest
    

    Il s’agit des valeurs par défaut si vous ne transmettez pas une valeur différente en tant que paramètre avec l’option --set de l’interface CLI Helm.

  4. Enregistrez le fichier.

Créer un service

  1. Ouvrez le fichier service.yaml dans le dossier modèles.

  2. Dans la section metadata du fichier, ajoutez une nouvelle clé appelée namespace qui utilise la même valeur que celle utilisée dans le fichier deployment.yaml .

       namespace: {{ default "staging" .Release.Namespace }}
    

    Votre fichier service.yaml doit ressembler à l’exemple suivant :

    apiVersion: v1
    kind: Service
    metadata:
      name: contoso-website
      namespace: {{ default "staging" .Release.Namespace }}
    spec:
      ports:
        - port: 80
          protocol: TCP
          targetPort: http
          name: http
      selector:
        app: contoso-website
      type: ClusterIP
    
  3. Enregistrez le fichier.

Création d’une entrée

  1. Ouvrez le fichier ingress.yaml.

  2. Dans la section metadata du fichier, ajoutez à nouveau la valeur namespace que vous avez utilisée dans le fichier deployment.yaml.

  3. Accédez à la clé host. Vous créez des hôtes distincts pour les déploiements de mise en lots et de production, afin que les utilisateurs ne puissent pas accéder à l’espace de noms staging à l’aide des URL de production. Concaténez l’espace de noms dans le nom d’hôte. Le module complémentaire de routage d’applications HTTP du cluster AKS gère la résolution des noms.

           - host: contoso-{{ default "staging" .Release.Namespace }}.!DNS!
    
  4. Remplacez !DNS! par une nouvelle variable du modèle pour le nom de votre zone DNS.

           - host: contoso-{{ default "staging" .Release.Namespace }}.{{ .Values.dns.name }}
    

    Votre fichier ingress.yaml final doit ressembler à l’exemple suivant :

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: contoso-website
      namespace: {{ default "staging" .Release.Namespace }}
      annotations:
        kubernetes.io/ingress.class: addon-http-application-routing
    spec:
      rules:
        - host: contoso-{{ default "staging" .Release.Namespace }}.{{ .Values.dns.name }}
          http:
            paths:
              - backend:
                  service:
                    name: contoso-website
                    port:
                      name: http
                path: /
                pathType: Prefix
    
  5. Enregistrez le fichier.

Ajouter une valeur au nom de la zone DNS

  1. Ouvrez le fichier values.yaml et ajoutez une clé dns.name après la clé image. Remplacez <ACR-NAME> par le nom de votre Container Registry et <DNS-NAME> par le nom de votre zone DNS AKS à partir de la sortie du script d’installation. Votre fichier se présente ainsi :

    image:
      registry: <ACR-NAME>
      name: contoso-website
      tag: latest
    
    dns:
      name: <DNS-NAME>
    

    Si vous n’obtenez pas le nom de votre zone DNS depuis la sortie du script d’installation d’origine, exécutez la requête Azure CLI suivante dans une autre fenêtre Cloud Shell pour l’obtenir, en remplaçant l’espace réservé <resource-group-name> par le nom de votre groupe de ressources.

    az aks show -g <resource-group-name> -n contoso-website -o tsv --query addonProfiles.httpApplicationRouting.config.HTTPApplicationRoutingZoneName
    
  2. Enregistrez le fichier.

Envoyer vos modifications

Fermez l’éditeur Cloud Shell en sélectionnant le coin supérieur droit de la barre d’outils de l’éditeur, puis en Fermer l’éditeur.

Pour envoyer (push) toutes les modifications à votre duplication (fork), exécutez dans l’ordre les commandes suivantes dans Cloud Shell :

git add .
git commit -m "Add helm"
git push -u origin main

Lorsque vous y êtes invité, indiquez le mot de passe créé précédemment comme mot de passe.

Passez à la leçon suivante pour déployer votre graphique Helm et votre application sur AKS à l’aide de GitHub Actions.