Sommaire
Présentation
Dans Kubernetes la configuration de nos services / applications se fait généralement via des fichiers yaml
. Quand on a une seule application en ligne, cela reste assez simple mais dès qu’on a plusieurs environnements, applications et services, on se retrouve très vite submergé de fichiers plus ou moins semblables.
C’est là que Helm intervient !
Helm est le package manager soutenu et recommandé par Kubernetes, il est aussi un des seuls sur le marché, son unique concurrent, KPM de CoreOS, n’est plus maintenu depuis juillet 2017.
Helm permet donc de déployer des applications / stacks complètes en utilisant un système de templating et de dépendances afin d’éviter la duplication et avoir ainsi une arborescence cohérente pour nos fichiers de configurations.
Mais Helm ce n’est pas que ca, il propose également la possibilité de gérer vos Charts
avec la possibilité de les compresser et de les mettre dans un répertoire distant (Cdn, Git, disque local ou partagé…).
Il intègre aussi un système facilitant les Updates
et Rollbacks
de vos applications.
Fonctionnement
Quelques concepts sont importants avant d’aborder la suite :
- Un package Kubernetes est appelé
Charts
dans Helm. - Un
Chart
contient un lot d’informations nécessaires pour créer une instance d’application Kubernetes. - La
Config
contient les informations dynamiques concernant la configuration d’unChart
- Une
Release
est une instance existante sur le cluster, combinée avec uneConfig
spécifique.
L’architecture de Helm est la suivante :
Lors de l’initialisation de Helm, le client installe Tiller sur un pod du cluster.
Tiller est le serveur qui communique avec le client Helm et l’API de Kubernetes pour gérer vos déploiements.
Quelques commandes utiles
Voici quelques commandes de bases pour Helm :
helm install my-chart
Permet d’installer le chart : my-chart
avec comme nom de release aléatoire dans votre cluster kubernetes
helm upgrade my-release my-chart
Permet d’upgrade notre release avec une nouvelle version.
helm ls
Permet de lister les Charts
installés sur votre Cluster
helm delete my-release
Permet de désinstaller la release my-release
de kubernetes
Tutoriel
Prérequis
Avant de commencer avec Helm, il faut avoir accès à un cluster Kubernetes. Plusieurs solutions s’offrent à vous pour créer un cluster, mais nous n’allons pas les couvrir ici. Si vous n’en avez pas je vous conseille donc de démarrer un cluster via GKE qui est le service auto-managé de Google Cloud pour Kubernetes.
Une fois que votre cluster est démarré, vous pouvez installer Helm en suivant cette procédure.
Vous pouvez vérifier si l’installation du client Helm a bien fonctionné avec :helm version
Une fois Helm présent sur votre machine, il faut désormais installer le Tiller serveur dans Kubernetes. Pour cela nous allons utiliser la commande :helm init
⚠️ Si votre cluster a les RBAC d’activé il faut créer un rôle pour Tiller ⚠️
kubectl create serviceaccount --namespace kube-syx@stem tiller
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller
kubectl patch deploy --namespace kube-system tiller-deploy -p '{"spec":{"template":{"spec":{"serviceAccount":"tiller"}}}}'`
helm init --service-account tiller --upgrade
Vérifions si l’installation est correcte avec :helm init
Vous devriez obtenir ceci (la version peut être différente) :
Helm est désormais présent sur votre machine (client) et dans le cluster Kubernetes (tiller) ! :thumb_up:
Serveur Minecraft
Attaquons-nous au vif du sujet : installer un serveur Minecraft avec Helm ! Pour cela, rien de bien compliqué.
En effet il existe un site qui référence tous les Charts
entretenus par la communauté.
Vous pouvez aller y faire un tour, et regarder les applications qui y sont présentes.
Celle qui nous intéresse ici est Minecraft.
Pour créer un serveur Minecraft dans votre cluster, utilisez cette commande :
Remplacer my-release
par le nom que vous voulez donner à votre release
helm install --name my-release \
--set minecraftServer.eula=true,persistence.dataDir.enabled=false \
stable/minecraft
Vous pouvez suivre le déploiement de votre pod :kubectl get pods -w
Une fois le STATUS
du pod en Running
attendez qu’une adresse IP externe lui soit attribuée :
Remplacer my-release
par le nom que vous avez donné à votre release
kubectl get svc --namespace default -w my-release
Le champ EXTERNAL-IP
vous donnera l’IP publique de votre serveur Minecraft !
Lancez Minecraft, ajoutez un serveur avec l’IP publique récupérée ci-dessus et have fun ! 🎮
Aller plus loin
Nous allons faire quelques modifications sur notre serveur Minecraft pour comprendre un peu plus comment Helm fonctionne.
Le Chart
utilisé ici est celui de Minecraft. Comme vous pouvez le voir dans le repo github, un Chart
a la structure suivante :
- un fichier
Chart.yaml
qui correspond à la description de notre application / projet - un fichier
values.yaml
qui contient les valeurs par défaut de notre application - un dossier
templates
qui va contenir toute la définition de notre application en.yaml
et qui, combiné à nosvalues.yaml
, générera un yaml valide pour Kubernetes
Créez un fichier config.yaml
sur votre machine contenant ces informations :
# Most of these map to environment variables. See Minecraft for details:
# https://hub.docker.com/r/itzg/minecraft-server/
minecraftServer:
# This must be overridden, since we can't accept this for the user.
eula: "TRUE"
# One of: peaceful, easy, normal, and hard
difficulty: normal
# A comma-separated list of player names who should be admins.
ops: Yourminecraftname
gameMode: survival
# Message of the Day
motd: "Welcome to Poney World"
persistence:
dataDir:
# Set this to false if you don't care to persist state between restarts.
enabled: false
Size: 1Gi
Vous pouvez remplacer Yourminecraftname
par votre nom, cela vous donnera les droits administrateur sur le serveur une fois connecté avec votre compte Minecraft.
Mettez le message que vous voulez pour le message du jour !
Sauvegardez votre fichier puis mettez à jour votre serveur via :
Remplacer my-release
par le nom que vous avez donner à votre release
helm upgrade -f config.yaml my-release stable/minecraft
Ou bien créez un nouveau serveur:helm install -f config.yaml new-release stable/minecraft
Helm va appliquer les dernières modifications dans votre Cluster Kubernetes.
Une fois la mise à jour faite, connectez-vous et amusez-vous, vous êtes Admin de votre serveur Minecraft ! N'hésitez pas à aller voir la liste des commandes disponibles.
Ceci n'était qu’une brève introduction de ce que Helm est capable de faire, la prochaine étape serait de créer vos propres Charts
.
Pour aller encore plus loin:
Conclusion
Avec Helm, installer et gérer des applications dans Kubernetes devient aussi simple qu’utiliser un package manager (apt ou yum par exemple).
Have fun 🙂