Comment commencer à écrire des graphiques Helm pour vos applications Kubernetes
Agence web » Actualités du digital » Comment commencer à écrire des graphiques Helm pour vos applications Kubernetes

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é.

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 votre values.yaml dossier. Nous examinerons cette capacité ci-dessous.
  • charts – La charts 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.

★★★★★