Exercice : créer un graphique Helm pour le déploiement
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.
Exécutez
helm version
pour vous assurer que la version de Helm affichée est supérieure à 3.Passez à votre référentiel dupliqué pour ce module en exécutant
cd mslearn-aks-deployment-pipeline-github-actions
.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.
Dans Cloud Shell, passez au répertoire kubernetes :
cd kubernetes
Utilisez
helm create
pour créer un répertoire nommé contoso-website dans le répertoire kubernetes :helm create contoso-website
Commutez vers le nouveau répertoire avec
cd
.cd contoso-website
Supprimez les dossiers graphiques et modèles de ce répertoire.
rm -r charts templates
Créez un dossier de modèles vides.
mkdir templates
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
Exécutez
cd ../..
pour basculer vers la racine de votre référentiel.Exécutez
code .
pour ouvrir l’éditeur de code dans le répertoire actif.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.
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
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.
Dans le menu de gauche, ouvrez le fichier deployment.yaml dans le dossier kubernetes/templates.
Dans la section principale
metadata
, ajoutez une nouvelle clé appeléenamespace
avec la valeur{{ default "staging" .Release.Namespace }}
. La sectionmetadata
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 commandehelm install
dispose d’une optionNamespace
, le workflow utilise plutôt cet espace de noms.Sous la section
template
/spec
/containers
, remplacez!IMAGE!
par les versionslatest
outag
de votre cluster AKS.Il est recommandé de fractionner les parties
registry
,image
ettag
du nom de l’image pour les utiliser plus facilement. Ajoutez trois nouvelles variables du modèle qui utilisent les valeurs deValues.image.registry
,Values.image.name
etValues.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
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.
À la racine du répertoire contoso-website, ouvrez le fichier values.yaml.
Supprimez tout le contenu du fichier, pour obtenir un fichier YAML vide.
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.Enregistrez le fichier.
Créer un service
Ouvrez le fichier service.yaml dans le dossier modèles.
Dans la section
metadata
du fichier, ajoutez une nouvelle clé appeléenamespace
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
Enregistrez le fichier.
Création d’une entrée
Ouvrez le fichier ingress.yaml.
Dans la section
metadata
du fichier, ajoutez à nouveau la valeurnamespace
que vous avez utilisée dans le fichier deployment.yaml.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 nomsstaging
à 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!
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
Enregistrez le fichier.
Ajouter une valeur au nom de la zone DNS
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
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.