Comment installer des logiciels sur des clusters Kubernetes avec le gestionnaire de packages Helm 3

Introduction

Helm est un gestionnaire de paquets pour Kubernetes qui permet aux développeurs et aux opérateurs de configurer et déployer plus facilement des applications sur des clusters Kubernetes.

Les paquets Helm sont appelés charts, et ils contiennent des modèles de définitions de ressources qui déploient et configurent des applications données avec un minimum d’effort requis de la part de l’utilisateur. Avec le templating, vous pouvez gérer le chart, ses paramètres et son comportement en passant des définitions de variables sans modifier le chart réel. Les définitions de ressources personnalisées, ainsi que les modifications apportées aux définitions déjà déployées, sont gérées automatiquement par Helm. Un chart déployé, avec des personnalisations possibles, est appelé une release.

Dans ce tutoriel, vous configurerez Helm 3 et apprendrez comment installer, mettre à niveau, revenir en arrière et gérer des charts et des releases. Vous apprendrez également à créer et à empaqueter vos propres charts, ainsi qu’à configurer des dépôts de charts, qui hébergent des charts que vous pouvez installer immédiatement.

Prérequis

  • Un cluster Kubernetes avec le contrôle d’accès basé sur les rôles (RBAC) activé. Pour plus d’informations sur les releases, vous pouvez consulter la page des releases Helm.

  • La commande en ligne kubectl installée sur votre machine locale, configurée pour se connecter à votre cluster. Vous pouvez en savoir plus sur l’installation de kubectl dans la documentation officielle.

    Vous pouvez tester votre connectivité avec la commande suivante :

    1. kubectl cluster-info

    Si vous ne recevez aucune erreur, vous êtes connecté au cluster. Si vous accédez à plusieurs clusters avec kubectl, assurez-vous de vérifier que vous avez sélectionné le bon contexte de cluster en exécutant :

    1. kubectl config get-contexts

    La sortie listera les configurations disponibles :

    Sortie
    CURRENT NAME CLUSTER AUTHINFO NAMESPACE * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-admin

    Ici, l’astérisque (*) indique que nous sommes connectés au cluster do-fra1-helm3-example. Pour changer de cluster, exécutez :

    1. kubectl config use-context nom-du-contexte

Lorsque vous êtes connecté au bon cluster, continuez avec l’étape 1 pour commencer l’installation de Helm.

Étape 1 — Installation de Helm 3

Dans cette section, vous allez installer Helm 3 en utilisant le script shell fourni officiellement.

Commencez par naviguer vers /tmp, où vous stockerez le script d’installation en exécutant :

  1. cd /tmp

Téléchargez le script avec la commande suivante :

  1. curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3

Vous pouvez examiner get_helm.sh dans votre éditeur de texte pour vous assurer qu’il est sûr.

Rendez-le exécutable en définissant ses autorisations comme suit :

  1. chmod u+x get_helm.sh

Enfin, exécutez-le pour installer Helm 3 :

  1. ./get_helm.sh

Vous recevrez une sortie similaire à ce qui suit :

Output
Downloading https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz Verifying checksum... Done. Preparing to install helm into /usr/local/bin helm installed into /usr/local/bin/helm

Vous avez Helm 3 installé sur votre machine. Vous allez maintenant apprendre les dépôts de graphiques et comment les utiliser.

Étape 2 — Configuration des dépôts de graphiques

Les graphiques Helm sont stockés dans des dépôts de graphiques qu’il est possible pour quiconque d’héberger. Par défaut, Helm 3 ne vient pas préconfiguré avec un quelconque dépôt. Les versions précédentes de Helm incluaient un dépôt de graphiques centralisé et curaté ; cependant, la conception de Helm 3 a délibérément évolué vers les développeurs de graphiques gérant leur propre dépôt, permettant ainsi plus de liberté et des sorties plus rapides. Cela signifie que pour chaque graphique que vous souhaitez utiliser, vous devrez vous assurer d’ajouter le dépôt d’hébergement à votre installation de Helm.

Pour vous aider à trouver le bon dépôt, vous pouvez utiliser ArtifactHub.io, un site Web open source géré par la CNCF qui répertorie les graphiques Helm et leurs dépôts. Il suit également les graphiques populaires et utiles utilisés par d’autres projets CNCF, donc il diffère du dépôt stable sur lequel les versions précédentes de Helm se basaient. Pour les projets courants, tels que les entrées Nginx ou les outils de surveillance, c’est une excellente source.

Vous pouvez rechercher un graphique que vous souhaitez installer via la page d’accueil. La recherche de nginx affichera tous les graphiques indexés qui y sont liés.

Vous installerez la version communautaire gérée par l’équipe Kubernetes. Recherchez ingress-nginx pour le trouver dans vos résultats. Sélectionnez-le pour accéder à sa page.

Chaque diagramme doit avoir une description détaillant ce qu’il fait, accompagnée de commandes pour ajouter son référentiel à votre installation et installer le diagramme. Si ce n’est pas le cas, vous pouvez toujours obtenir les commandes nécessaires en appuyant sur le bouton INSTALLER à droite de la page.

Vous pouvez cliquer sur le bouton bleu à côté d’une commande pour la copier. Faites-le pour la première commande et exécutez-la :

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

Pour ajouter un référentiel à Helm, vous exécutez helm repo add. Les paramètres qu’il accepte sont le nom du référentiel et son emplacement.

La sortie sera :

Output
"ingress-nginx" has been added to your repositories

Lorsque vous ajoutez un nouveau référentiel, vous devez informer Helm de son contenu en exécutant :

  1. helm repo update

Vous recevrez la sortie suivante, montrant que la mise à jour a réussi :

Output
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!⎈

Dans cette étape, vous avez appris à propos d’ArtifactHub et ce qu’il offre. Vous avez également ajouté un nouveau référentiel à votre installation Helm. À l’étape suivante, vous installerez un diagramme Helm.

Étape 3 — Installation d’un diagramme Helm

Dans la section précédente, vous avez ajouté le référentiel pour le diagramme ingress-nginx. Vous allez maintenant l’installer sur votre cluster.

Chaque graphique possède des variables de configuration que vous pouvez définir pour modifier son comportement. Ces variables sont stockées dans un fichier appelé values.yaml qui fait partie du graphique. À moins d’avoir téléchargé le graphique sur votre machine, vous devrez exécuter la commande suivante pour le visualiser :

  1. helm show values chart_name

Pour afficher les variables disponibles pour ingress-nginx, remplacez chart_name :

  1. helm show values ingress-nginx/ingress-nginx

La sortie sera longue, montrant le contenu de values.yaml pour ingress-nginx.

Pour installer un graphique, vous pouvez utiliser helm install :

  1. helm install release_name repository/chart_name

A release is a deployed instance of the chart, and here you’re calling it ingress-nginx.

Cette commande installerait le graphique sur votre cluster avec les valeurs par défaut des variables. Si vous souhaitez modifier certaines d’entre elles, vous pouvez passer les nouvelles valeurs de variables en utilisant --set :

  1. helm install ingress-nginx/ingress-nginx --set variable_name=variable_value

Vous pouvez répéter --set pour autant de variables que nécessaire. Comme nous ne les personnaliserons pas maintenant, installez-le tel quel en exécutant :

  1. helm install ingress-nginx ingress-nginx/ingress-nginx

La sortie sera similaire à ce qui suit :

Output
NAME: ingress-nginx LAST DEPLOYED: Wed Feb 24 10:12:37 2021 NAMESPACE: default 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 default get services -o wide -w ingress-nginx-controller' ...

Remarquez que le NOM correspond au nom de la version que vous avez spécifiée. Helm répertorie également des informations courantes, telles que le statut de la version et l’espace de noms dans lequel elle est déployée. La section NOTES varie selon les graphiques et contient généralement des instructions de démarrage rapide ou avertit de certains problèmes courants lors de l’utilisation des ressources du graphique. Ici, il note que le répartiteur de charge est en cours de création et que cela peut prendre un certain temps pour être complet.

Pour vérifier les graphiques déployés, utilisez helm list :

  1. helm list

Vous constaterez que ingress-nginx est le seul graphique déployé pour le moment :

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION ingress-nginx default 1 2021-02-24 10:12:37.281049711 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0

Vous pouvez trouver les services qu’il offre dans votre cluster en exécutant :

  1. kubectl get services

La sortie sera similaire à ceci :

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller LoadBalancer 10.245.211.81 46.101.68.67 80:30704/TCP,443:30700/TCP 7m19s ingress-nginx-controller-admission ClusterIP 10.245.50.17 <none> 443/TCP 7m19s kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 83m

Maintenant que vous avez déployé une version dans votre cluster, vous modifierez sa configuration pendant qu’elle est déployée.

Étape 4 — Mise à niveau d’une version

Une fois qu’une version est déployée, vous n’avez pas besoin de la démanteler et de la redéployer complètement lorsque vous devez changer sa configuration. Vous pouvez utiliser la commande helm upgrade pour mettre à niveau la version avec une nouvelle version du diagramme, ou pour définir de nouveaux paramètres.

Le diagramme ingress-nginx expose la variable controller.replicaCount qui contrôle le nombre de pods de contrôleur déployés. Par défaut, il est défini à un, ce que vous pouvez vérifier en répertoriant les pods disponibles :

  1. kubectl get pods

Vous constaterez qu’il n’y en a qu’un :

Output
NAME READY STATUS RESTARTS AGE ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 12m

Si vous souhaitez en déployer davantage pour la redondance (par exemple, trois), vous pouvez mettre à niveau la version et définir la variable sur 3 en exécutant :

  1. helm upgrade ingress-nginx ingress-nginx/ingress-nginx --set controller.replicaCount=3 --reuse-values

Vous passez également --reuse-values, ce qui indique à Helm de baser vos modifications sur la version déployée, préservant la configuration précédente.

Dans la sortie, Helm augmentera la révision pour indiquer que la version a été mise à niveau :

Output
NAME: ingress-nginx LAST DEPLOYED: Wed Feb 24 12:07:54 2021 NAMESPACE: default STATUS: deployed REVISION: 2 TEST SUITE: None NOTES: ...

Vous pouvez répertorier les pods disponibles en exécutant :

  1. kubectl get pods

Vous trouverez trois pods répertoriés, au lieu d’un :

Output
NAME READY STATUS RESTARTS AGE ingress-nginx-controller-7fc74cf778-4hk9g 1/1 Running 0 18s ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 22m ingress-nginx-controller-7fc74cf778-wz595 1/1 Running 0 18s

Ensuite, vous allez annuler les modifications et supprimer complètement les versions.

Étape 5 — Annulation et suppression d’une version

Lorsque vous mettez à niveau une version, son numéro de révision est incrémenté. En interne, Helm stocke toutes les révisions d’une version, vous permettant de revenir à une révision précédente si nécessaire.

Pour revenir au nombre de pods à un, vous pourriez exécuter à nouveau helm upgrade et définir manuellement le nombre car il s’agit d’un petit changement. Cependant, lorsqu’il s’agit de travailler avec des graphiques plus importants avec de nombreuses variables, revenir manuellement n’est pas faisable et devrait être automatisé.

Pour annuler une version, utilisez helm rollback:

  1. helm rollback release_name release_revision

Vous pouvez l’utiliser pour annuler les modifications apportées à ingress-nginx en revenant à la révision 1:

  1. helm rollback ingress-nginx 1

Vous recevrez la sortie suivante, indiquant que l’action a réussi:

Output
Rollback was a success! Happy Helming!

Vous pouvez vérifier la révision actuelle en listant les versions:

  1. helm list

Vous constaterez que la révision est maintenant 3, et non 1:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION ingress-nginx default 3 2021-02-24 12:43:21.523664768 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0

Helm considère chaque changement, y compris les retours en arrière, comme une nouvelle révision d’une version. Vous pouvez vérifier que la révision 3 est égale à la première en vérifiant le nombre de pods déployés en exécutant:

  1. kubectl get pods

Vous constaterez qu’il n’y en a qu’un:

Output
NAME READY STATUS RESTARTS AGE ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 41m

Pour supprimer une version et toutes ses révisions, vous pouvez utiliser helm delete:

  1. helm delete release_name

Étant donné que vous n’en aurez plus besoin, supprimez ingress-nginx en exécutant la commande suivante :

  1. helm delete ingress-nginx

La sortie sera :

Output
release "ingress-nginx" uninstalled

Vous pouvez lister les versions pour vérifier qu’il n’y en a pas :

  1. helm list

Le tableau de sortie n’aura aucune ligne :

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

Maintenant que la version est supprimée, vous pouvez réutiliser son nom pour de futures déploiements.

Étape 6 — (Facultatif) Création de graphiques personnalisés

Dans cette étape facultative, vous apprendrez à créer un graphique personnalisé, où placer vos définitions de ressources, et comment le packager pour une distribution ultérieure.

Vous créerez un nouveau graphique appelé example-chart. Exécutez la commande suivante pour le créer :

  1. helm create example-chart

Cela créera un nouveau répertoire appelé example-chart avec les fichiers et la structure suivants :

example-chart/
charts/
templates/
├─ tests/
│  ├─ test-connection.yaml
├─ deployment.yaml
├─ hpa.yaml
├─ ingress.yaml
├─ NOTES.txt
├─ service.yaml
├─ serviceaccount.yaml
├─ _helpers.tpl
Chart.yaml
values.yaml

Les définitions de ressources que votre graphique installera sur les clusters cibles sont situées dans le répertoire templates. Les fichiers par défaut que Helm a créés comme point de départ déploient un contrôleur d’ingress Nginx. Bien que leur extension de fichier soit YAML, ils utilisent la syntaxe de templating de Go pour rester personnalisables via des variables exposées que vous pouvez passer en paramètre. Vous pouvez vérifier en affichant le contenu de service.yaml en exécutant :

  1. cat example-chart/templates/service.yaml

Vous constaterez qu’il contient des directives de templating pour générer des valeurs entourées de doubles crochets :

Output
apiVersion
: v1 kind: Service metadata: name: {{ include "mychart.fullname" . }} labels: {{- include "mychart.labels" . | nindent 4 }} spec: type: {{ .Values.service.type }} ports: - port: {{ .Values.service.port }} targetPort: http protocol: TCP name: http selector: {{- include "mychart.selectorLabels" . | nindent 4 }}

Les variables référencées sont exposées à l’utilisateur et définies dans values.yaml. Le texte NOTES que Helm affiche après le déploiement est stocké dans NOTES.txt, et est également modélisé. Les métadonnées du graphique, telles que le nom, la version et la version du logiciel déployé, sont spécifiées dans Chart.yaml:

example-chart/Chart.yaml
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes

...
type: application

...
version: 0.1.0

...
appVersion: "1.16.0"

Pour vérifier ce que Helm déploierait, vous pouvez passer en --dry-run et --debug à helm install en pointant vers le répertoire du graphique:

  1. helm install example-chart --dry-run --debug ./example-chart

La sortie sera longue et contiendra toutes les définitions de ressources finales qui seraient appliquées à votre cluster. Pendant que vous travaillez sur votre graphique, vous pouvez utiliser helm upgrade pour pousser de nouvelles versions vers Kubernetes.

Quand vient le moment de partager votre graphique fini, vous pouvez le conditionner pour la distribution en exécutant:

  1. helm package ./example-chart

La sortie sera:

Output
Successfully packaged chart and saved it to: .../example-chart-0.1.0.tgz

Le graphique conditionné peut être installé exactement comme ceux des dépôts ajoutés:

  1. helm install example-chart example-chart-0.1.0.tgz

À cette étape, vous avez créé un graphique personnalisé et l’avez déployé. Vous l’avez également conditionné et appris sa structure.

Conclusion

Vous savez désormais comment utiliser Helm pour installer et mettre à niveau des logiciels déployés sur votre cluster Kubernetes. Vous avez ajouté des dépôts de graphiques et appris pourquoi ils sont importants et comment ArtifactHub peut vous aider à les trouver. Vous avez également créé un nouveau graphique personnalisé et appris les révisions de publication ainsi que comment revenir en arrière si nécessaire.

Pour plus d’informations sur la création de graphiques personnalisés, visitez le guide officiel.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-software-on-kubernetes-clusters-with-the-helm-3-package-manager