Guide des dépôts de charts
Cette section explique comment créer et utiliser des dépôts de charts Helm. Dans les grandes lignes, un dépôt de charts est un emplacement où l'on peut stocker et partager des charts empaquetés.
Le dépôt communautaire distribué de charts Helm se trouve sur Artifact Hub, et toute participation y est la bienvenue. Mais Helm permet aussi de créer et d'exploiter votre propre dépôt de charts. Ce guide explique comment faire. Si vous comptez créer un dépôt de charts, un registre OCI peut être une alternative à envisager.
Prérequis
- Suivre le guide de démarrage rapide
- Lire le document sur les charts
Créer un dépôt de charts
Un dépôt de charts est un serveur HTTP qui héberge un fichier index.yaml et,
éventuellement, des charts empaquetés. Lorsque vous êtes prêt à partager vos
charts, la méthode recommandée est de les téléverser dans un dépôt de charts.
Depuis Helm 2.2.0, Helm prend en charge l'authentification SSL côté client auprès d'un dépôt. D'autres protocoles d'authentification peuvent être disponibles sous forme de plugins.
Comme un dépôt de charts peut être n'importe quel serveur HTTP capable de servir des fichiers YAML et tar et de répondre aux requêtes GET, vous avez de très nombreuses possibilités pour héberger votre propre dépôt de charts. Par exemple, vous pouvez utiliser un bucket Google Cloud Storage (GCS), un bucket Amazon S3, GitHub Pages, ou même créer votre propre serveur web.
Structure d'un dépôt de charts
Un dépôt de charts se compose de charts empaquetés et d'un fichier spécial,
index.yaml, qui contient l'index de tous les charts du dépôt. Souvent, les
charts décrits par index.yaml sont hébergés sur le même serveur que ce
fichier, tout comme les fichiers de provenance.
Par exemple, l'arborescence du dépôt https://example.com/charts pourrait
ressembler à ceci :
charts/
|
|- index.yaml
|
|- alpine-0.1.2.tgz
|
|- alpine-0.1.2.tgz.prov
Dans ce cas, le fichier d'index contiendrait les informations d'un seul chart,
le chart Alpine, et indiquerait l'URL de téléchargement
https://example.com/charts/alpine-0.1.2.tgz pour ce chart.
Il n'est pas obligatoire que le paquet d'un chart se trouve sur le même serveur
que le fichier index.yaml. C'est toutefois souvent le plus simple.
Le fichier d'index
Le fichier d'index est un fichier YAML nommé index.yaml. Il contient des
métadonnées sur le paquet, dont le contenu du fichier Chart.yaml du chart. Un
dépôt de charts valide doit avoir un fichier d'index. Le fichier d'index contient
des informations sur chacun des charts du dépôt. La commande helm repo index
génère un fichier d'index à partir d'un répertoire local donné qui contient des
charts empaquetés.
Voici un exemple de fichier d'index :
apiVersion: v1
entries:
alpine:
- created: 2016-10-06T16:23:20.499814565-06:00
description: Deploy a basic Alpine Linux pod
digest: 99c76e403d752c84ead610644d4b1c2f2b453a74b921f422b9dcb8a7c8b559cd
home: https://helm.sh/helm
name: alpine
sources:
- https://github.com/helm/helm
urls:
- https://technosophos.github.io/tscharts/alpine-0.2.0.tgz
version: 0.2.0
- created: 2016-10-06T16:23:20.499543808-06:00
description: Deploy a basic Alpine Linux pod
digest: 515c58e5f79d8b2913a10cb400ebb6fa9c77fe813287afbacf1a0b897cd78727
home: https://helm.sh/helm
name: alpine
sources:
- https://github.com/helm/helm
urls:
- https://technosophos.github.io/tscharts/alpine-0.1.0.tgz
version: 0.1.0
nginx:
- created: 2016-10-06T16:23:20.499543808-06:00
description: Create a basic nginx HTTP server
digest: aaff4545f79d8b2913a10cb400ebb6fa9c77fe813287afbacf1a0b897cdffffff
home: https://helm.sh/helm
name: nginx
sources:
- https://github.com/helm/charts
urls:
- https://technosophos.github.io/tscharts/nginx-1.1.0.tgz
version: 1.1.0
generated: 2016-10-06T16:23:20.499029981-06:00
Héberger un dépôt de charts
Cette partie présente plusieurs façons de servir un dépôt de charts.
Google Cloud Storage
La première étape consiste à créer votre bucket GCS. Nous appellerons le
nôtre fantastic-charts.

Ensuite, rendez votre bucket public en modifiant ses autorisations.

Ajoutez cette entrée pour rendre votre bucket public :

Félicitations, vous avez maintenant un bucket GCS vide, prêt à servir des charts !
Vous pouvez téléverser votre dépôt de charts avec l'outil en ligne de commande
de Google Cloud Storage ou avec l'interface web de GCS. Un bucket GCS public est
accessible directement en HTTPS à cette adresse :
https://bucket-name.storage.googleapis.com/.
Cloudsmith
Vous pouvez aussi mettre en place des dépôts de charts avec Cloudsmith. Pour en savoir plus sur les dépôts de charts avec Cloudsmith, consultez cette page.
JFrog Artifactory
De la même façon, vous pouvez mettre en place des dépôts de charts avec JFrog Artifactory. Pour en savoir plus sur les dépôts de charts avec JFrog Artifactory, consultez cette page.
Exemple avec GitHub Pages
Sur le même principe, vous pouvez créer un dépôt de charts avec GitHub Pages.
GitHub permet de servir des pages web statiques de deux façons :
- En configurant un projet pour qu'il serve le contenu de son répertoire
docs/ - En configurant un projet pour qu'il serve une branche donnée
Nous allons utiliser la seconde méthode, mais la première est tout aussi simple.
La première étape consiste à créer votre branche gh-pages. Vous pouvez le faire en local ainsi :
$ git checkout -b gh-pages
Ou depuis le navigateur, avec le bouton Branch de votre dépôt GitHub :

Ensuite, assurez-vous que votre branche gh-pages est bien configurée comme source de GitHub Pages : cliquez sur Settings dans votre dépôt, descendez jusqu'à la section GitHub pages et réglez-la comme ci-dessous :

Par défaut, Source est généralement réglé sur gh-pages branch. Si ce n'est pas le cas, sélectionnez cette valeur.
Vous pouvez aussi y configurer un domaine personnalisé si vous le souhaitez.
Vérifiez aussi que la case Enforce HTTPS est cochée, pour que les charts soient servis en HTTPS.
Avec cette configuration, vous pouvez stocker le code de vos charts dans votre
branche par défaut, et utiliser la branche gh-pages comme dépôt de charts,
par exemple : https://USERNAME.github.io/REPONAME. Le dépôt de démonstration
TS Charts est accessible à l'adresse
https://technosophos.github.io/tscharts/.
Si vous avez choisi GitHub Pages pour héberger votre dépôt de charts, consultez Chart Releaser Action. Chart Releaser Action est un workflow GitHub Actions qui transforme un projet GitHub en dépôt de charts Helm auto-hébergé, à l'aide de l'outil en ligne de commande helm/chart-releaser.
Serveurs web classiques
Pour servir des charts Helm depuis un serveur web classique, il suffit de :
- Placer votre fichier d'index et vos charts dans un répertoire que le serveur peut servir
- Vérifier que le fichier
index.yamlest accessible sans authentification - Vérifier que les fichiers
yamlsont servis avec le bon type de contenu (text/yamloutext/x-yaml)
Par exemple, si vous voulez servir vos charts depuis $WEBROOT/charts,
assurez-vous qu'il existe un répertoire charts/ à la racine de votre site web,
et placez-y le fichier d'index et les charts.
Serveur de dépôt ChartMuseum
ChartMuseum est un serveur open source de dépôt de charts Helm, écrit en Go (Golang), qui prend en charge différents backends de stockage cloud, dont Google Cloud Storage, Amazon S3, Microsoft Azure Blob Storage, Alibaba Cloud OSS Storage, Openstack Object Storage, Oracle Cloud Infrastructure Object Storage, Baidu Cloud BOS Storage, Tencent Cloud Object Storage, DigitalOcean Spaces, Minio et etcd.
Vous pouvez aussi utiliser le serveur ChartMuseum pour héberger un dépôt de charts à partir d'un système de fichiers local.
GitLab Package Registry
Avec GitLab, vous pouvez publier des charts Helm dans le Package Registry de votre projet. Pour en savoir plus sur la mise en place d'un dépôt de paquets Helm avec GitLab, consultez cette page.
Gérer un dépôt de charts
Maintenant que vous avez un dépôt de charts, la dernière partie de ce guide explique comment y gérer vos charts.
Stocker des charts dans votre dépôt de charts
Maintenant que vous avez un dépôt de charts, téléversons-y un chart et un fichier
d'index. Les charts d'un dépôt de charts doivent être empaquetés
(helm package chart-name/) et correctement versionnés (selon les règles de
SemVer 2).
Les étapes suivantes donnent un exemple de workflow, mais vous êtes libre d'utiliser le workflow de votre choix pour stocker et mettre à jour les charts de votre dépôt.
Une fois votre chart empaqueté, créez un nouveau répertoire et déplacez-y le paquet.
$ helm package docs/examples/alpine/
$ mkdir fantastic-charts
$ mv alpine-0.1.0.tgz fantastic-charts/
$ helm repo index fantastic-charts --url https://fantastic-charts.storage.googleapis.com
La dernière commande prend le chemin du répertoire local que vous venez de créer
et l'URL de votre dépôt de charts distant, puis génère un fichier index.yaml
dans ce répertoire.
Vous pouvez maintenant téléverser le chart et le fichier d'index dans votre dépôt de charts, avec un outil de synchronisation ou à la main. Si vous utilisez Google Cloud Storage, consultez cet exemple de workflow qui utilise le client gsutil. Pour GitHub, il suffit de placer les charts dans la branche de destination prévue.
Ajouter de nouveaux charts à un dépôt existant
Chaque fois que vous voulez ajouter un nouveau chart à votre dépôt, vous devez
régénérer l'index. La commande helm repo index reconstruit entièrement le
fichier index.yaml, en n'y incluant que les charts qu'elle trouve en local.
Vous pouvez toutefois utiliser l'option --merge pour ajouter de nouveaux charts
au fur et à mesure à un fichier index.yaml existant (une très bonne solution
avec un dépôt distant comme GCS). Lancez helm repo index --help pour en savoir
plus.
Veillez à téléverser à la fois le fichier index.yaml mis à jour et le chart,
ainsi que le fichier de provenance si vous en avez généré un.
Partager vos charts
Lorsque vous êtes prêt à partager vos charts, il suffit de communiquer l'URL de votre dépôt.
Les utilisateurs ajouteront alors le dépôt à leur client Helm avec la commande
helm repo add [NAME] [URL], en lui donnant le nom de leur choix pour y faire
référence.
$ helm repo add fantastic-charts https://fantastic-charts.storage.googleapis.com
$ helm repo list
fantastic-charts https://fantastic-charts.storage.googleapis.com
Si les charts sont protégés par une authentification HTTP Basic, vous pouvez aussi indiquer ici le nom d'utilisateur et le mot de passe :
$ helm repo add fantastic-charts https://fantastic-charts.storage.googleapis.com --username my-username --password my-password
$ helm repo list
fantastic-charts https://fantastic-charts.storage.googleapis.com
Remarque : un dépôt n'est pas ajouté s'il ne contient pas de fichier
index.yaml valide.
Remarque : si votre dépôt Helm utilise par exemple un certificat auto-signé,
vous pouvez utiliser helm repo add --insecure-skip-tls-verify ... pour ignorer
la vérification de l'autorité de certification (CA).
Vos utilisateurs pourront ensuite rechercher vos charts. Après une mise à jour de
votre dépôt, ils pourront utiliser la commande helm repo update pour obtenir les
dernières informations sur les charts.
En coulisses, les commandes helm repo add et helm repo update récupèrent le
fichier index.yaml et le stockent dans le répertoire
$XDG_CACHE_HOME/helm/repository/cache/. C'est là que la commande helm search
trouve les informations sur les charts.