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 dekubectl
dans la documentation officielle.Vous pouvez tester votre connectivité avec la commande suivante :
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 :La sortie listera les configurations disponibles :
SortieCURRENT NAME CLUSTER AUTHINFO NAMESPACE * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-adminIci, l’astérisque (
*
) indique que nous sommes connectés au clusterdo-fra1-helm3-example
. Pour changer de cluster, exécutez :
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 :
Téléchargez le script avec la commande suivante :
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 :
Enfin, exécutez-le pour installer Helm 3 :
Vous recevrez une sortie similaire à ce qui suit :
OutputDownloading 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 :
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 :
Vous recevrez la sortie suivante, montrant que la mise à jour a réussi :
OutputHang 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 :
Pour afficher les variables disponibles pour ingress-nginx
, remplacez chart_name
:
La sortie sera longue, montrant le contenu de values.yaml
pour ingress-nginx
.
Pour installer un graphique, vous pouvez utiliser helm install
:
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
:
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 :
La sortie sera similaire à ce qui suit :
OutputNAME: 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
:
Vous constaterez que ingress-nginx
est le seul graphique déployé pour le moment :
OutputNAME 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 :
La sortie sera similaire à ceci :
OutputNAME 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 :
Vous constaterez qu’il n’y en a qu’un :
OutputNAME 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 :
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 :
OutputNAME: 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 :
Vous trouverez trois pods répertoriés, au lieu d’un :
OutputNAME 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
:
Vous pouvez l’utiliser pour annuler les modifications apportées à ingress-nginx
en revenant à la révision 1
:
Vous recevrez la sortie suivante, indiquant que l’action a réussi:
OutputRollback was a success! Happy Helming!
Vous pouvez vérifier la révision actuelle en listant les versions:
Vous constaterez que la révision est maintenant 3
, et non 1
:
OutputNAME 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:
Vous constaterez qu’il n’y en a qu’un:
OutputNAME 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
:
Étant donné que vous n’en aurez plus besoin, supprimez ingress-nginx
en exécutant la commande suivante :
La sortie sera :
Outputrelease "ingress-nginx" uninstalled
Vous pouvez lister les versions pour vérifier qu’il n’y en a pas :
Le tableau de sortie n’aura aucune ligne :
OutputNAME 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 :
Cela créera un nouveau répertoire appelé example-chart
avec les fichiers et la structure suivants :
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 :
Vous constaterez qu’il contient des directives de templating pour générer des valeurs entourées de doubles crochets :
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
:
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:
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:
La sortie sera:
OutputSuccessfully 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:
À 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.