Installer des applications existantes avec Helm dans Azure Kubernetes service (AKS)

Helm est un outil d’empaquetage open source qui vous aide à installer et à gérer le cycle de vie d’applications Kubernetes. À l’instar des gestionnaires de package Linux tels qu’APT et Yum, vous utilisez Helm pour gérer les charts Kubernetes, qui sont des packages de ressources Kubernetes préconfigurées.

Cet article vous montre comment configurer et utiliser Helm dans un cluster Kubernetes sur AKS sur Azure Kubernetes Service (AKS).

Avant de commencer

  • Cet article suppose que vous disposez d’un cluster AKS. Si vous avez besoin d’un cluster AKS, créez-en un à l'aide d’Azure CLI, d’Azure PowerShell ou du Portail Azure.
  • Votre cluster AKS doit avoir un ACR intégré. Pour plus d’informations sur la création d’un cluster AKS avec un ACR intégré, consultez S’authentifier auprès d’Azure Container Registry à partir d’Azure Kubernetes Service.
  • Vous devez aussi avoir installé l’interface CLI Helm, qui est le client s’exécutant sur votre système de développement. Il vous permet de démarrer, arrêter et gérer les applications avec Helm. Si vous utilisez Azure Cloud Shell, l’interface CLI Helm est déjà installée. Pour obtenir les instructions d’installation sur votre plateforme locale, consultez Installing Helm (Installation de Helm).

Important

Helm est prévu pour s’exécuter sur des nœuds Linux. Si vous avez des nœuds Windows Server dans votre cluster, vous devez veiller à ce que l’exécution des pods Helm soit planifiée uniquement sur des nœuds Linux. Vous devez aussi veiller à ce que les graphiques Helm que vous installez s’exécutent sur les bons nœuds. Les commandes figurant dans cet article utilisent node-selectors pour garantir que les pods sont planifiés sur les nœuds adéquats, mais il se peut que certains graphiques Helm n’exposent pas de sélecteur de nœud. Vous pouvez aussi envisager d’utiliser d’autres options sur votre cluster, comme des teintes (« taints »).

Vérifier la version de Helm

  • Utilisez la commande helm version pour vérifier que Helm 3 est installé.

    helm version
    

    L’exemple de sortie suivant montre la version 3.0.0 de Helm installée :

    version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}
    

Installer une application avec Helm v3

Ajouter des référentiels Helm

  • Ajoutez le référentiel ingress-nginx à l’aide de la commande helm repo.

    helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
    

Rechercher des graphiques Helm

  1. Recherchez des charts Helm précréés à l’aide de la commande helm search.

    helm search repo ingress-nginx
    

    La sortie condensée suivante montre certains des graphiques Helm disponibles :

    NAME                            CHART VERSION   APP VERSION     DESCRIPTION                                       
    ingress-nginx/ingress-nginx     4.7.0           1.8.0           Ingress controller for Kubernetes using NGINX a...
    
  2. Pour mettre à jour la liste des charts, utilisez la commande helm repo update.

    helm repo update
    

    L’exemple de sortie suivant montre une mise à jour de référentiel réussie :

    Hang tight while we grab the latest from your chart repositories...
    ...Successfully got an update from the "ingress-nginx" chart repository
    Update Complete. ⎈ Happy Helming!⎈
    

Importer les images de chart Helm dans votre ACR

Cet article utilise le graphique Helm du contrôleur d’entrée NGINX, lequel repose sur trois images de conteneurs.

  • Utilisez az acr import pour importer les images du contrôleur d’entrée NGINX dans votre ACR.

    REGISTRY_NAME=<REGISTRY_NAME>
    CONTROLLER_REGISTRY=registry.k8s.io
    CONTROLLER_IMAGE=ingress-nginx/controller
    CONTROLLER_TAG=v1.8.0
    PATCH_REGISTRY=registry.k8s.io
    PATCH_IMAGE=ingress-nginx/kube-webhook-certgen
    PATCH_TAG=v20230407
    DEFAULTBACKEND_REGISTRY=registry.k8s.io
    DEFAULTBACKEND_IMAGE=defaultbackend-amd64
    DEFAULTBACKEND_TAG=1.5
    
    az acr import --name $REGISTRY_NAME --source $CONTROLLER_REGISTRY/$CONTROLLER_IMAGE:$CONTROLLER_TAG --image $CONTROLLER_IMAGE:$CONTROLLER_TAG
    az acr import --name $REGISTRY_NAME --source $PATCH_REGISTRY/$PATCH_IMAGE:$PATCH_TAG --image $PATCH_IMAGE:$PATCH_TAG
    az acr import --name $REGISTRY_NAME --source $DEFAULTBACKEND_REGISTRY/$DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG --image $DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG
    

    Notes

    En plus d’importer des images de conteneur dans votre ACR, vous pouvez également importer des graphiques Helm dans votre ACR. Pour plus d’informations, consultez Envoyer (push) et tirer (pull) des graphiques Helm vers un registre de conteneurs Azure.

Exécuter des graphiques Helm

  1. Installez les charts avec Helm à l’aide de la commande helm install et spécifiez un nom de version et le nom du chart à installer.

    Conseil

    L’exemple suivant crée un espace de noms Kubernetes pour les ressources d’entrée ingress-basic et est destiné à fonctionner dans cet espace de noms. Spécifiez un espace de noms de votre propre environnement, si besoin.

    ACR_URL=<REGISTRY_URL>
    
    # Create a namespace for your ingress resources
    kubectl create namespace ingress-basic
    
    # Use Helm to deploy an NGINX ingress controller
    helm install ingress-nginx ingress-nginx/ingress-nginx \
        --version 4.0.13 \
        --namespace ingress-basic \
        --set controller.replicaCount=2 \
        --set controller.nodeSelector."kubernetes\.io/os"=linux \
        --set controller.image.registry=$ACR_URL \
        --set controller.image.image=$CONTROLLER_IMAGE \
        --set controller.image.tag=$CONTROLLER_TAG \
        --set controller.image.digest="" \
        --set controller.admissionWebhooks.patch.nodeSelector."kubernetes\.io/os"=linux \
        --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \
        --set controller.admissionWebhooks.patch.image.registry=$ACR_URL \
        --set controller.admissionWebhooks.patch.image.image=$PATCH_IMAGE \
        --set controller.admissionWebhooks.patch.image.tag=$PATCH_TAG \
        --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \
        --set defaultBackend.image.registry=$ACR_URL \
        --set defaultBackend.image.image=$DEFAULTBACKEND_IMAGE \
        --set defaultBackend.image.tag=$DEFAULTBACKEND_TAG \
        --set defaultBackend.image.digest=""
    

    La sortie condensée suivante montre l’état du déploiement des ressources Kubernetes créées par le graphique Helm :

    NAME: nginx-ingress
    LAST DEPLOYED: Wed Jul 28 11:35:29 2021
    NAMESPACE: ingress-basic
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    The ingress-nginx controller has been installed.
    It may take a few minutes for the LoadBalancer IP to be available.
    You can watch the status by running 'kubectl --namespace ingress-basic get services -o wide -w nginx-ingress-ingress-nginx-controller'
    ...
    
  2. Obtenez l’EXTERNAL-IP (Adresse IP externe) de votre service à l’aide de la commande kubectl get services.

    kubectl --namespace ingress-basic get services -o wide -w ingress-nginx-ingress-nginx-controller
    

    L’exemple de sortie suivant montre l’EXTERNAL-IP (Adresse IP externe) pour le service ingress-nginx-ingress-nginx-controller :

    NAME                                     TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)                      AGE   SELECTOR
    nginx-ingress-ingress-nginx-controller   LoadBalancer   10.0.254.93   <EXTERNAL_IP>   80:30004/TCP,443:30348/TCP   61s   app.kubernetes.io/component=controller,app.kubernetes.io/instance=nginx-ingress,app.kubernetes.io/name=ingress-nginx
    

Répertorier les versions

  • Obtenez la liste des versions installées sur votre cluster à l’aide de la commande helm list.

    helm list --namespace ingress-basic
    

    L’exemple de sortie suivant montre la version ingress-nginx déployée à l’étape précédente :

    NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
    ingress-nginx   ingress-basic   1               2021-07-28 11:35:29.9623734 -0500 CDT   deployed        ingress-nginx-3.34.0    0.47.0
    

Nettoyer les ressources

Le déploiement d’un chart Helm crée des ressources Kubernetes telles que des pods, des déploiements et des services.

  • Nettoyez les ressources à l’aide de la commande helm uninstall et spécifiez le nom de votre version.

    helm uninstall --namespace ingress-basic ingress-nginx
    

    L’exemple de sortie suivant illustre la version nommée ingress-nginx qui a été désinstallée :

    release "nginx-ingress" uninstalled
    
  • Supprimez l’espace de noms exemple en entier avec les ressources en utilisant la commande kubectl delete et en spécifiant le nom de votre espace de noms.

    kubectl delete namespace ingress-basic
    

Étapes suivantes

Pour plus d’informations sur la gestion des déploiements d’applications Kubernetes, consultez la documentation Helm.