Comment commencer à écrire des graphiques Helm pour vos applications Kubernetes
Helm est un gestionnaire de packages pour les charges de travail Kubernetes. La création d’un graphique Helm pour votre application simplifie les déploiements reproductibles dans un cluster Kubernetes. Les utilisateurs peuvent installer l’ensemble du graphique avec une seule commande, au lieu d’appliquer manuellement des manifestes de composants individuels avec Kubectl.
Dans cet article, nous allons vous montrer comment démarrer avec Helm en écrivant un tableau pour une application simple. Un « graphique » est conceptuellement similaire à un « package » de manifestes Kubernetes que Helm vous permet de gérer comme une seule entité.
Sommaire
Qu’est-ce qu’un Helm Chart ?
Les chartes Helm appliquent le modèle familier de gestion des packages rencontré dans les systèmes d’exploitation et les langages de programmation aux applications exécutées dans un cluster Kubernetes. Une charte Helm peut avoir des dépendances et des enfants ; tous ces composants sont automatiquement démarrés dans votre cluster lorsque vous installez un graphique de niveau supérieur.
Les graphiques sont entièrement versionnés à l’aide d’une stratégie de publication sémantique. Comme pour un module npm ou un package de système d’exploitation, vous pouvez épingler des graphiques à des versions spécifiques et suivre leurs modifications au fil du temps. Cela simplifie la restauration des déploiements d’applications vers une bonne version connue si vous rencontrez des problèmes dans votre cluster.
Les graphiques Helm intègrent également des capacités de création de modèles pour fournir des valeurs dynamiques au moment de l’installation. Vous pouvez configurer de nouvelles applications sans modifier directement leurs fichiers manifestes, à l’aide de variables fournies par le développeur du graphique.
Installation de Helm
Helm est distribué sous forme de binaire simple via la page GitHub Releases du projet. Téléchargez la bonne distribution pour votre système, rendez-la exécutable et déplacez-la dans un emplacement de votre PATH
.
Helm est également présent dans les référentiels de packages des distributions Linux les plus populaires. Vous pouvez également le trouver dans Homebrew pour macOS et Chocolatey et Scoop pour Windows.
Une fois l’installation terminée, exécutez helm version
pour vérifier que tout fonctionne :
$ helm version --template="Version: {{.Version}}" Version: v3.8.1
Les commandes Helm ciblent votre connexion de cluster Kubernetes active telle qu’utilisée par Kubectl. Le fichier et le contexte Kubeconfig que vous avez sélectionnés seront utilisés pour toutes les commandes Helm. Vous pouvez référencer un fichier de configuration différent avec la norme KUBECONFIG
variable d’environnement ou --kubeconfig
mécanismes de drapeau.
Création d’un graphique Helm
Vous pouvez maintenant commencer à créer une charte Helm pour votre application. Utilisez le helm create
commande pour échafauder un nouveau graphique dans votre répertoire de travail :
$ helm create my-app-chart
Le contenu du graphique sera déposé à l’intérieur du my-app-chart
annuaire. Inspectons ce qu’il contient :
$ ls my-app-chart Chart.yaml charts templates values.yaml
Il existe deux fichiers de niveau supérieur et deux sous-répertoires supplémentaires. Voici à quoi sert chaque ressource :
Chart.yaml
– Le manifeste de votre charte Helm définissant les propriétés des métadonnées, y compris son nom et sa version.values.yaml
– Ce fichier stocke les valeurs par défaut des variables que vous pouvez référencer dans votre graphique. Il est possible de remplacer les valeurs définies ici à l’aide des indicateurs CLI lorsque vous installez le graphique.templates
– Le répertoire des modèles contient les manifestes d’objet Kubernetes de votre graphique. L’installation du graphique appliquera tous ces manifestes à votre cluster. Tout manifeste Kubernetes YAML valide peut être placé ici ; vous pouvez également utiliser des fonctionnalités supplémentaires, telles que des références à des variables définies dans votrevalues.yaml
dossier. Nous examinerons cette capacité ci-dessous.charts
– Lacharts
Le répertoire contient d’autres chartes Helm dont celle-ci dépend. Il est utilisé pour configurer des relations complexes entre les graphiques parent-enfant. Nous ne couvrirons pas cette fonctionnalité dans cet article, vous pouvez donc supprimer le répertoire si vous n’en avez pas besoin.
Le graphique par défaut de Helm est préconfiguré pour déployer une instance du serveur Web NGINX. Le Kubernetes se manifeste dans le templates
créer les différents composants constitutifs, tels qu’un déploiement, un service et une entrée. L’application est configurée par des variables définies dans values.yaml
; vous trouverez ici les paramètres de la balise d’image, du port de service et de l’hôte Ingress, entre autres :
$ cat values.yaml # Default values for my-app-chart. # This is a YAML-formatted file. # Declare variables to be passed into your templates. replicaCount: 1 image: repository: nginx pullPolicy: IfNotPresent # Overrides the image tag whose default is the chart appVersion. tag: "" ...
Installation du graphique
Pour ajouter l’application à votre cluster, utilisez le helm install
commande:
$ helm install my-app . NAME: foo LAST DEPLOYED: Tue Mar 29 14:47:48 2022 NAMESPACE: default STATUS: deployed REVISION: 1 NOTES: ...
Le premier argument de la commande définit le nom de votre release. Le deuxième argument fait référence au chemin du répertoire à partir duquel charger la charte Helm. Vous pouvez utiliser .
lorsque votre répertoire de travail est déjà défini sur la racine de votre graphique.
Vous recevrez une sortie de terminal décrivant la version installée. La NOTES
section se compose d’informations fournies par le graphique.
Pour remplacer values.yaml
variables, fournissez une ou plusieurs instances de --set
drapeau:
$ helm install my-app . --set replicaCount=3 --set image.tag=1.20
Cet exemple déploierait trois répliques d’un conteneur exécutant le nginx:1.20
image. Vous pouvez le vérifier en répertoriant les pods de votre cluster à l’aide de Kubectl :
$ kubectl get pods NAME READY STATUS RESTARTS AGE my-app-my-app-chart-6d6577749c-2qbhb 1/1 Running 0 61s my-app-my-app-chart-6d6577749c-wdmgv 1/1 Running 0 44s my-app-my-app-chart-6d6577749c-x5wp7 1/1 Running 0 40s
Mise à niveau, récupération et suppression des versions de cartes
Apportez ensuite quelques modifications au graphique ou modifiez la valeur d’une variable :
$ helm install my-app . --set replicaCount=5 Error: INSTALLATION FAILED: cannot re-use a name that is still in use
Répéter le install
la commande ne fonctionne pas. Pour appliquer les modifications à un graphique déjà déployé, utilisez la upgrade
commande à la place. Cela crée une nouvelle « version » à l’intérieur du cluster.
$ helm upgrade my-app . --set replicaCount=5 Release "my-app" has been upgraded. Happy Helming!
Vous pouvez répertorier toutes les versions de graphique déployées dans votre cluster avec helm list
:
$ helm list NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION my-app default 2 2022-03-30 15:09:34.370758719 +0100 BST deployed my-app-chart-0.1.0 1.16.0
Les détails de chaque version incluent son nom, le nombre de déploiements, l’heure de sa dernière mise à jour et les numéros de version du graphique et de l’application qu’il fournit.
Pour supprimer une version et détruire ses objets Kubernetes, transmettez son nom au uninstall
commande:
$ helm uninstall my-app release "my-app" uninstalled
Écrire votre propre graphique à partir de zéro
Voyons maintenant comment écrire un graphique de base à partir de zéro. Créez un nouveau répertoire pour votre graphique ; nous appelons le nôtre cloudsavvy-chart
. Ajouter un Chart.yaml
fichier à l’intérieur avec le contenu suivant :
apiVersion: v2 name: cloudsavvy-chart description: An example Helm chart. type: application version: 0.1.0 appVersion: 1.1.0
La type
le champ doit généralement être défini sur application
. L’autre type pris en charge est library
. Fonctionnalité de package de graphiques de bibliothèque pouvant être incluse en tant que dépendance d’autres graphiques. Ils ne contiennent aucun Kubernetes templates
eux-mêmes.
La version
le champ fait référence à la version de votre carte. Vous devez l’incrémenter chaque fois que vous modifiez les modèles de graphique. appVersion
indique la version du composant logiciel principal fourni par votre graphique. Il signale aux utilisateurs du graphique ce qui s’exécutera dans leur cluster après l’installation du graphique. Par exemple, si vous créez un graphique qui distribue WordPress, il serait approprié de définir appVersion
au numéro de version de WordPress que vous fournissez.
Créez ensuite un values.yaml
fichier avec quelques variables simples :
deploymentName: cloudsavvy image: nginx:latest replicas: 1
Ces variables seront référencées dans votre modèle de graphique. Ajoutez ce modèle maintenant en tant que templates/deployment.yaml
. Notre graphique de base déploiera un seul pod, il n’aura donc qu’un seul fichier de modèle. Dans une situation réelle, il est recommandé de créer des fichiers manifestes individuels pour chacun des composants de votre application.
apiVersion: apps/v1 kind: Deployment metadata: name: {{ .Values.deploymentName }}-deployment spec: selector: matchLabels: app: {{ .Values.deploymentName }} replicas: {{ .Values.replicas }} template: metadata: labels: app: {{ .Values.deploymentName }} spec: containers: - name: {{ .Values.deploymentName }} image: {{ .Values.image }}
Le déploiement utilise des valeurs de values.yaml
pour configurer la référence d’image et le nombre de répliques. La deploymentName
La variable est utilisée partout afin que toute modification future puisse être effectuée à un seul endroit. Champs dans values.yaml
sont référencés à l’aide de {{ .Values.FIELD_NAME }}
syntaxe.
Utilisez maintenant Helm pour installer le graphique :
$ helm install cloudsavvy-app . --set replicas=3 NAME: cloudsavvy-app LAST DEPLOYED: Tue Mar 29 15:43:21 2022 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None
La --set
flag remplace la valeur par défaut de replicas
c’est réglé dans values.yaml
. Une fois les remplacements appliqués, Helm injecte les valeurs résolues aux bons endroits dans vos modèles YAML. Les manifestes Kubernetes finaux sont ensuite appliqués à votre cluster. Vous pouvez maintenant vérifier que trois conteneurs sont en cours d’exécution en utilisant Kubectl pour répertorier les pods de votre cluster.
$ kubectl get pods NAME READY STATUS RESTARTS AGE cloudsavvy-deployment-7b975bd985-5r7dc 0/1 ContainerCreating 0 15s cloudsavvy-deployment-7b975bd985-bpbkm 0/1 ContainerCreating 0 15s cloudsavvy-deployment-7b975bd985-jzb5q 0/1 ContainerCreating 0 15s
Sommaire
Les chartes Helm vous permettent de regrouper des collections de manifestes Kubernetes sous forme d’applications complètes prêtes à être déployées. Vous pouvez créer des modèles de configuration que les utilisateurs finaux peuvent facilement modifier avant d’installer une version dans un cluster.
Dans ce guide, nous avons expliqué les bases des fonctionnalités de Helm et montré comment vous pouvez créer vos propres graphiques simples pour vos applications. Nous avons à peine couvert la surface de ce que Helm peut réaliser – une fois que vous avez écrit un graphique, vous pouvez le pousser vers un référentiel pour que d’autres l’utilisent, ajouter d’autres graphiques en tant que dépendances et créer des graphiques plus avancés à l’aide de fonctions, de pipelines, et contrôler les expressions de flux. Prendre le temps d’apprendre Helm rend vos déploiements Kubernetes plus flexibles, puissants et réutilisables.