Comment installer un logiciel sur des clusters Kubernetes avec le gestionnaire de paquets Helm

introduction

Helm est un gestionnaire de packages pour Kubernetes qui permet aux développeurs et aux opérateurs de configurer et de déployer plus facilement des applications sur des clusters Kubernetes.

Dans ce tutoriel, nous allons configurer Helm et l'utiliser pour installer, reconfigurer, restaurer, puis supprimer une instance dethe Kubernetes Dashboard application. Le tableau de bord est une interface graphique officielle basée sur le Web Kubernetes.

Pour un aperçu conceptuel de Helm et de son écosystème de packaging, veuillez lire notre articleAn Introduction to Helm.

Conditions préalables

Pour ce tutoriel, vous aurez besoin de:

  • Un cluster Kubernetes 1.8+ avec le contrôle d'accès basé sur les rôles (RBAC) activé.

  • L'outil de ligne de commandekubectl installé sur votre ordinateur local, configuré pour se connecter à votre cluster. Vous pouvez en savoir plus sur l'installation dekubectlin the official documentation.

    Vous pouvez tester votre connectivité avec la commande suivante:

    kubectl cluster-info

    Si vous ne voyez aucune erreur, vous êtes connecté au cluster. Si vous accédez à plusieurs clusters aveckubectl, assurez-vous de vérifier que vous avez sélectionné le bon contexte de cluster:

    kubectl config get-contexts
    OutputCURRENT   NAME                    CLUSTER                      AUTHINFO                      NAMESPACE
    *         do-nyc1-k8s-example     do-nyc1-k8s-example          do-nyc1-k8s-example-admin
              docker-for-desktop      docker-for-desktop-cluster   docker-for-desktop

    Dans cet exemple, l'astérisque (*) indique que nous sommes connectés au clusterdo-nyc1-k8s-example. Pour changer de cluster, exécutez:

    kubectl config use-context context-name

Lorsque vous êtes connecté au bon cluster, passez à l’étape 1 pour commencer l’installation de Helm.

[[step-1 -—- Installing-helm]] == Étape 1 - Installation de Helm

Nous allons d'abord installer l'utilitaire de ligne de commandehelm sur notre machine locale. Helm fournit un script qui gère le processus d'installation sur MacOS, Windows ou Linux.

Passez à un répertoire accessible en écriture et téléchargez le script à partir du référentiel GitHub de Helm:

cd /tmp
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > install-helm.sh

Rendez le script exécutable avecchmod:

chmod u+x install-helm.sh

À ce stade, vous pouvez utiliser votre éditeur de texte favori pour ouvrir le script et l'inspecter pour vous assurer qu'il est sécurisé. Lorsque vous êtes satisfait, lancez-le:

./install-helm.sh

Vous pouvez être invité à entrer votre mot de passe. Fournissez-le et appuyez surENTER.

Outputhelm installed into /usr/local/bin/helm
Run 'helm init' to configure helm.

Nous terminerons ensuite l’installation en installant certains composants Helm sur notre cluster.

[[step-2 -—- Installing-Tiller]] == Étape 2 - Installation de Tiller

Tiller est un compagnon de la commandehelm qui s'exécute sur votre cluster, recevant des commandes dehelm et communiquant directement avec l'API Kubernetes pour effectuer le travail réel de création et de suppression de ressources. Pour donner à Tiller les autorisations dont il a besoin pour s'exécuter sur le cluster, nous allons créer une ressource Kubernetesserviceaccount.

[.Remarque]##

Note: Nous lierons ceserviceaccount au rôle de clustercluster-admin. Cela donnera au superutilisateur du servicetiller un accès au cluster et lui permettra d'installer tous les types de ressources dans tous les espaces de noms. C'est très bien pour explorer Helm, mais vous voudrez peut-être une configuration plus verrouillée pour un cluster de production Kubernetes.

Veuillez vous reporter àthe official Helm RBAC documentation pour plus d'informations sur la configuration de différents scénarios RBAC pour Tiller.

Créez lestillerserviceaccount:

kubectl -n kube-system create serviceaccount tiller

Ensuite, liez lestillerserviceaccount au rôlecluster-admin:

kubectl create clusterrolebinding tiller --clusterrole cluster-admin --serviceaccount=kube-system:tiller

Nous pouvons maintenant exécuterhelm init, qui installe Tiller sur notre cluster, ainsi que certaines tâches de gestion locale telles que le téléchargement des détails du dépôt destable:

helm init --service-account tiller
Output. . .

Tiller (the Helm server-side component) has been installed into your Kubernetes Cluster.

Please note: by default, Tiller is deployed with an insecure 'allow unauthenticated users' policy.
For more information on securing your installation see: https://docs.helm.sh/using_helm/#securing-your-helm-installation
Happy Helming!

Pour vérifier que Tiller est en cours d'exécution, répertoriez les pods dans l'espace de nomskube-system:

kubectl get pods --namespace kube-system
OutputNAME                                    READY     STATUS    RESTARTS   AGE
. . .
kube-dns-64f766c69c-rm9tz               3/3       Running   0          22m
kube-proxy-worker-5884                  1/1       Running   1          21m
kube-proxy-worker-5885                  1/1       Running   1          21m
kubernetes-dashboard-7dd4fc69c8-c4gwk   1/1       Running   0          22m
tiller-deploy-5c688d5f9b-lccsk          1/1       Running   0          40s

Le nom du pod Tiller commence par le préfixetiller-deploy-.

Maintenant que nous avons installé les deux composants Helm, nous sommes prêts à utiliserhelm pour installer notre première application.

[[step-3 -—- Installing-a-Helm-Chart]] == Étape 3 - Installation d'un Helm Chart

Les progiciels Helm sont appeléscharts. Helm est préconfiguré avec un référentiel de graphiques organisé appeléstable. Vous pouvez parcourir les graphiques disponiblesin their GitHub repo. Nous allons installer lesKubernetes Dashboard à titre d'exemple.

Utilisezhelm pour installer le packagekubernetes-dashboard à partir du dépôtstable:

helm install stable/kubernetes-dashboard --name dashboard-demo
OutputNAME:   dashboard-demo
LAST DEPLOYED: Wed Aug  8 20:11:07 2018
NAMESPACE: default
STATUS: DEPLOYED

. . .

Notez la ligneNAME, mise en évidence dans l'exemple de sortie ci-dessus. Dans ce cas, nous avons spécifié le nomdashboard-demo. C'est le nom de nosrelease. Un Helmrelease est un déploiement unique d'un graphique avec une configuration spécifique. Vous pouvez déployer plusieurs versions du même graphique, chacune avec sa propre configuration.

Si vous ne spécifiez pas votre propre nom de version avec--name, Helm créera un nom aléatoire pour vous.

Nous pouvons demander à Helm une liste des versions de ce cluster:

helm list
OutputNAME            REVISION    UPDATED                     STATUS      CHART                       NAMESPACE
dashboard-demo    1           Wed Aug  8 20:11:11 2018    DEPLOYED    kubernetes-dashboard-0.7.1  default

Nous pouvons maintenant utiliserkubectl pour vérifier qu'un nouveau service a été déployé sur le cluster:

kubectl get services
OutputNAME                                   TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)   AGE
dashboard-demo-kubernetes-dashboard   ClusterIP   10.32.104.73           443/TCP   51s
kubernetes                             ClusterIP   10.32.0.1              443/TCP   34m

Notez que par défaut, le nom du service correspondant à notre version est une combinaison du nom de la version de Helm et du nom du graphique.

Maintenant que nous avons déployé l’application, utilisons Helm pour modifier sa configuration et mettre à jour le déploiement.

[[step-4 -—- updated-a-release]] == Étape 4 - Mise à jour d'une version

La commandehelm upgrade peut être utilisée pour mettre à niveau une version avec un graphique nouveau ou mis à jour, ou pour mettre à jour ses options de configuration.

Nous allons apporter une simple modification à notre version dedashboard-demo pour démontrer le processus de mise à jour et de restauration: nous mettrons à jour le nom du service de tableau de bord à seulementdashboard, au lieu dedashboard-demo-kubernetes-dashboard .

Le graphiquekubernetes-dashboard fournit une option de configurationfullnameOverride pour contrôler le nom du service. Exécutonshelm upgrade avec ce jeu d’options:

helm upgrade dashboard-demo stable/kubernetes-dashboard --set fullnameOverride="dashboard"

Vous verrez une sortie similaire à l'étape initialehelm install.

Vérifiez si vos services Kubernetes reflètent les valeurs mises à jour:

kubectl get services
OutputNAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes             ClusterIP   10.32.0.1               443/TCP   36m
dashboard              ClusterIP   10.32.198.148           443/TCP   40s

Le nom de notre service a été mis à jour à la nouvelle valeur.

[.Remarque]##

Note: À ce stade, vous souhaiterez peut-être charger le tableau de bord Kubernetes dans votre navigateur et le vérifier. Pour ce faire, exécutez d'abord la commande suivante:

kubectl proxy

Cela crée un proxy qui vous permet d'accéder aux ressources de cluster distantes à partir de votre ordinateur local. D'après les instructions précédentes, votre service de tableau de bord est nommékubernetes-dashboard et il s'exécute dans l'espace de nomsdefault. Vous pouvez maintenant accéder au tableau de bord à l'url suivante:

http://localhost:8001/api/v1/namespaces/default/services/https:dashboard:/proxy/

Si nécessaire, remplacez votre propre nom de service et votre propre espace de nom pour les parties en surbrillance. Les instructions pour utiliser réellement le tableau de bord sont hors de portée de ce didacticiel, mais vous pouvez lirethe official Kubernetes Dashboard docs pour plus d'informations.

Ensuite, nous examinerons la capacité de Helm à restaurer des versions.

[[step-5 -—- rolling-back-a-release]] == Étape 5 - Annulation d'une version

Lorsque nous avons mis à jour notre version dedashboard-demo à l'étape précédente, nous avons créé un deuxièmerevision de la version. Helm conserve tous les détails des versions précédentes au cas où vous deviez revenir à une configuration ou à un graphique précédent.

Utilisezhelm list pour inspecter à nouveau la version:

helm list
OutputNAME            REVISION    UPDATED                     STATUS      CHART                       NAMESPACE
dashboard-demo  2         Wed Aug  8 20:13:15 2018    DEPLOYED    kubernetes-dashboard-0.7.1  default

La colonneREVISION nous indique qu'il s'agit maintenant de la deuxième révision.

Utilisezhelm rollback pour revenir à la première révision:

helm rollback dashboard-demo 1

Vous devriez voir la sortie suivante, indiquant que l'annulation a réussi:

OutputRollback was a success! Happy Helming!

À ce stade, si vous exécutez à nouveaukubectl get services, vous remarquerez que le nom du service est revenu à sa valeur précédente. Helm a redéployé l’application avec la configuration de la révision 1.

Ensuite, nous examinerons la possibilité de supprimer des versions avec Helm.

[[step-6 -—- deleting-a-release]] == Étape 6 - Suppression d'une version

Les versions de Helm peuvent être supprimées avec la commandehelm delete:

helm delete dashboard-demo
Outputrelease "dashboard-demo" deleted

Bien que la version ait été supprimée et que l'application du tableau de bord ne soit plus en cours d'exécution, Helm enregistre toutes les informations de révision si vous souhaitez redéployer la version. Si vous avez essayé dehelm install une nouvelle version dedashboard-demo maintenant, vous obtiendrez une erreur:

Error: a release named dashboard-demo already exists.

Si vous utilisez l'indicateur--deleted pour répertorier vos versions supprimées, vous verrez que la version est toujours là:

helm list --deleted
OutputNAME            REVISION    UPDATED                     STATUS  CHART                       NAMESPACE
dashboard-demo  3           Wed Aug  8 20:15:21 2018    DELETED kubernetes-dashboard-0.7.1  default

Pourreally supprimer la version et purger toutes les anciennes révisions, utilisez l'indicateur--purge avec la commandehelm delete:

helm delete dashboard-demo --purge

La version a maintenant été véritablement supprimée et vous pouvez réutiliser le nom de la version.

Conclusion

Dans ce didacticiel, nous avons installé l'outil de ligne de commandehelm et son service compagnontiller. Nous avons également exploré l’installation, la mise à niveau, la restauration et la suppression de diagrammes et de versions de Helm.

Pour plus d'informations sur les graphiques Helm et Helm, veuillez consulterthe official Helm documentation.