Table des matières
1. Pourquoi avez-vous besoin de Helm ?
(2) Helm a trois concepts importants :
(3) Caractéristiques de la barre
(1) Modifications architecturales
(2) Créer automatiquement un espace de noms
3. Déploiement du gestionnaire de packages d'application Helm
1. Déployer l'outil client Helm
2. Commandes Helm couramment utilisées
3. Configurer l'entrepôt de cartes national
4. Utilisez un graphique pour déployer une application Nginx
5. Utilisez le graphique pour déployer une application Tomcat
6. Modèles de rendu avec des variables
Configuration prérequise : basée sur k8s (kubernetes plusieurs tours)
1. Pourquoi avez-vous besoin de Helm ?
Les services d'application déployés sur Kubernetes sont composés de descriptions de ressources spécifiques, notamment le déploiement, le service, etc. Chaque objet ressource est enregistré dans son propre fichier ou écrit collectivement dans un fichier de configuration. Déployez-le ensuite via la commande kubectl apply –f demo.yaml.
Si le système métier ne comprend qu'un ou plusieurs de ces services, alors la méthode de gestion du déploiement ci-dessus est suffisante.
Pour un système d'entreprise complexe, il y aura de nombreux fichiers de description de ressources similaires à ceux ci-dessus. Par exemple, une application d'architecture de microservices peut avoir jusqu'à dix ou dizaines de services qui composent l'application. S'il est nécessaire de mettre à jour ou de restaurer une application, il peut être nécessaire de modifier et de maintenir un grand nombre de fichiers d'objets de ressources impliqués, et cette façon d'organiser et de gérer les applications devient insuffisante.
De plus, en raison du manque de gestion et de contrôle des versions d’applications publiées, la maintenance et les mises à jour des applications sur Kubernetes sont confrontées à de nombreux défis, principalement confrontés aux problèmes suivants :
Comment gérer ces services dans leur ensemble
Comment réutiliser efficacement ces fichiers de ressources
La gestion des versions au niveau de l'application n'est pas prise en charge
(1) Introduction à Helm
Helm est un outil de gestion de packages Kubernetes. Tout comme les gestionnaires de packages sous Linux, tels que yum/apt-get, etc., Helm peut facilement déployer des fichiers yaml précédemment packagés sur Kubernetes.
(2) Helm a trois concepts importants :
helm : Un outil client en ligne de commande principalement utilisé pour la création, le packaging, la publication et la gestion des graphiques d'application Kubernetes.
Graphique : Répertoire ou package compressé, utilisé pour la description de l'application, composé d'une série de fichiers utilisés pour décrire les objets ressources k8s.
Release : entité de déploiement basée sur un graphique. Une fois qu'un graphique est exécuté par Helm, une version correspondante sera générée ; un véritable objet de ressource en cours d'exécution sera créé dans k8s.
(3) Caractéristiques de la barre
Un gestionnaire de packages développé pour Kubernetes. Chaque package est appelé un graphique, et un graphique est un répertoire (généralement, le répertoire sera empaqueté et compressé pour former un seul fichier au format nom-version.tar.gz pour une transmission facile. et stockage)
Pour les éditeurs d'applications, Helm peut être utilisé pour empaqueter des applications, gérer les dépendances des applications, gérer les versions d'applications et publier des applications dans des entrepôts de logiciels.
Pour les utilisateurs, après avoir utilisé Helm, ils n'ont plus besoin de comprendre la syntaxe Yaml de Kubernetes et d'écrire des fichiers de déploiement d'applications. Ils peuvent télécharger et installer les applications requises sur Kubernetes via Helm.
Helm fournit des fonctions puissantes pour le déploiement, la suppression, la mise à niveau et la restauration de logiciels sur Kubernetes
2. Modifications de Helm V3
Le 13 novembre 2019, l'équipe Helm a publié la première version stable de Helm v3. Les principaux changements de cette version sont les suivants :
(1) Modifications architecturales
Le changement le plus évident est la suppression de Tiller
1) Les noms de versions peuvent être réutilisés dans différents espaces de noms
2) Prise en charge de la poussée du graphique vers le port de l'entrepôt miroir Docker
3) Utilisez JSONSchema pour vérifier les valeurs du graphique
4) Autres
Helm CLI individuel renomme pour mieux coordonner la formulation avec d'autres gestionnaires de packages
helm delete` a été renommé `helm uninstall
helm inspect a été renommé en helm show
helm fetch a été renommé en helm pull
Cependant, les anciennes commandes ci-dessus peuvent toujours être utilisées.
La commande helm serve utilisée pour créer temporairement le référentiel de graphiques localement a été supprimée.
(2) Créer automatiquement un espace de noms
Helm 2 a créé l'espace de noms lors de la création d'une distribution dans un espace de noms qui n'existait pas. Helm 3 suit le comportement des autres objets Kubernetes et renvoie une erreur si l'espace de noms n'existe pas.
Requirements.yaml n'est plus nécessaire, les dépendances sont définies directement dans chart.yaml.
3. Déploiement du gestionnaire de packages d'application Helm
1. Déployer l'outil client Helm
Adresse de téléchargement du client Helm : versions · helm/helm · GitHub
Décompressez le package de code source et déplacez-le vers le répertoire /usr/bin/.
[root@k8s-master ~]# wget https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz
[root@k8s-master ~]# tar xf helm-v3.5.2-linux-amd64.tar.gz
[root@k8s-master ~]# cd linux-amd64/
[root@k8s-master linux-amd64]# ls
[root@k8s-master linux-amd64]# mv helm /usr/bin/
[root@k8s-master ~]# helm #Vérifiez si la commande helm est disponible
2. Commandes Helm couramment utilisées
Commande |
décrire |
créer |
Créez un graphique et spécifiez un nom |
dépendance |
Gérer les dépendances des graphiques |
obtenir |
Téléchargez une version. Sous-commandes disponibles : tout, hooks, manifeste, notes, valeurs |
histoire |
Obtenir l'historique des versions |
installer |
Installer un graphique |
liste |
Liste des versions |
emballer |
Emballez le répertoire des graphiques dans un fichier d'archive de graphiques |
tirer |
Téléchargez le graphique depuis le référentiel distant et extrayez-le localement# helm pull stable/mysql --untar |
dépôt |
Ajoutez, répertoriez, supprimez, mettez à jour et indexez des référentiels de graphiques. Sous-commandes disponibles : ajouter, indexer, lister, supprimer, mettre à jour |
retour en arriere |
Restauration par rapport à la version précédente |
recherche |
Recherchez des graphiques en fonction de mots-clés. Sous-commandes disponibles : hub, repo |
montrer |
Afficher les détails du graphique. Sous-commandes disponibles : all, chart, readme, valeurs |
statut |
Afficher l'état d'une version nommée |
modèle |
Modèle de rendu local |
désinstaller |
Désinstaller une version |
mise à niveau |
Mettre à jour une version |
version |
Vérifier la version du client Helm |
3. Configurer l'entrepôt de cartes national
L' entrepôt Microsoft ( Index of /kubernetes/charts/ ) est fortement recommandé. En gros, tous les graphiques du site officiel sont disponibles ici.
Entrepôt Alibaba Cloud ( https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts )
Entrepôt officiel ( Kubeapps | Accueil ) L'entrepôt de cartes officiel est un peu difficile à utiliser en Chine.
Ajouter un référentiel de graphiques
[root@k8s-master ~]# dépôt de barre ajouté stable http://mirror.azure.cn/kubernetes/charts
[root@k8s-master ~]# helm repo ajouter aliyun https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
[root@k8s-master ~]# mise à jour du dépôt de barre
Afficher le référentiel de graphiques configuré
[root@k8s-master ~]# liste des dépôts de barre
Supprimez le dépôt :
[root@k8s-master ~]# helm repo supprimer aliyun
[root@k8s-master ~]# liste des dépôts de barre
4. Utilisez un graphique pour déployer une application Nginx
1) Créer un graphique
[root@k8s-master ~]# helm crée nginx
[root@k8s-master ~]# arbre nginx/
Explication détaillée:
nginx/
├── graphiques #dépend des fichiers de graphiques d'autres packages
├── Chart.yaml #Le fichier de description du graphique, comprenant l'adresse IP, les informations de version, etc.
├── modèles # Répertoire pour stocker les fichiers de modèles k8s
│ ├── déploiement.yaml #Créer un modèle yaml pour les ressources de déploiement k8s
│ ├── _helpers.tpl #Les fichiers commençant par un trait de soulignement peuvent être référencés par d'autres modèles
│ ├── hpa.yaml #Configurer les ressources de service, mémoire CPU
│ ├── ingress.yaml # Configuration d'entrée pour accéder au nom de domaine du service
│ ├── Fichier NOTES.txt #Description, le contenu affiché à l'utilisateur après l'installation de helm
│ ├── serviceaccount.yaml
│ ├── service.yaml #kubernetes Modèle yaml de service
│ └── épreuves
│ └── test-connection.yaml
└──values.yaml #Variables utilisées pour les fichiers modèles
2) Modifiez le type de service dans Values.yaml en NodePort
[root@k8s-master ~]# cd nginx/
[root@k8s-master nginx]# vim valeurs.yaml
3) Installez la tâche graphique (notez le dernier point de la commande)
[root@k8s-master nginx]# helm install -f valeurs.yaml
4) Voir la version
[root@k8s-master nginx]# helm ls #ou liste de helm
5) Supprimer la version
[root@k8s-master nginx]# helm supprimer nginx
6) Vérifiez l'état du pod
[root@k8s-master nginx]# kubectl obtenir le pod
[root@k8s-master nginx]# kubectl obtient pod -o large
7) Vérifiez l'état du SVC
[root@k8s-master nginx]# kubectl obtient svc
Visitez 192.168.100.132:30281
5. Utilisez le graphique pour déployer une application Tomcat
[root@k8s-master ~]# helm crée Tomcat
Création de Tomcat
[root@k8s-master ~]# cd tomcat/
Modifier les fichiers déploiement.yaml et service.yaml
[root@k8s-master tomcat]# vim templates/deployment.yaml
[root@k8s-master tomcat]# vim templates/service.yaml
Créer une version
[root@k8s-master tomcat]# helm install tomcat .
Voir la version
[root@k8s-master tomcat]# helm ls
Afficher les pods et les svc
[root@k8s-master tomcat]# kubectl get pod [root@k8s-master tomcat]# kubectl get pod -o wide [root@k8s-master tomcat]# kubectl get svc
Préparer la page de test
[root@k8s-master tomcat]# kubectl exec -it tomcat-67df6cd4d6-s7qxl /bin/bash
root@tomcat-67df6cd4d6-s7qxl:/usr/local/tomcat# mkdir webapps/ROOT
root@tomcat-67df6cd4d6-s7qxl:/usr/local/tomcat# echo "helm test1" > webapps/ROOT/index.jsp
[root@k8s-master tomcat]# kubectl exec -it tomcat-67df6cd4d6-tkp95 /bin/bash
root@tomcat-67df6cd4d6-tkp95:/usr/local/tomcat# mkdir webapps/ROOT
root@tomcat-67df6cd4d6-tkp95:/usr/local/tomcat# echo "helm test2" > webapps/ROOT/index.jsp
Test d'accès :
Visitez 192.168.100.132:32092
Visitez 192.168.100.133:32092
supprimer
[root@k8s-master tomcat]# helm supprimer tomcat
[root@k8s-master tomcat]# helm ls
Mise à niveau (réappliquer après avoir modifié le fichier yaml)
[root@k8s-master tomcat]# helm install tomcat .
[root@k8s-master tomcat]# helm ls
[root@k8s-master tomcat]# kubectl obtenir le pod
[root@k8s-master tomcat]# vim templates/deployment.yaml
[root@k8s-master tomcat]# mise à niveau de la barre tomcat.
[root@k8s-master tomcat]# kubectl obtenir le pod
[root@k8s-master tomcat]# helm ls
retour en arriere
[root@k8s-master tomcat]# helm rollback tomcat 1
[root@k8s-master tomcat]# helm ls
[root@k8s-master tomcat]# kubectl obtenir le pod
6. Modèles de rendu avec des variables
Testez si le modèle est normal
[root@k8s-master tomcat]# helm install --dry-run tomcat .
Définir les variables dans le fichier Values.yaml
[root@k8s-master tomcat]# valeurs de chat.yaml
[root@k8s-master tomcat]# cat templates/deployment.yaml
[root@k8s-master tomcat]# cat templates/service.yaml
Les variables des fichiers déploiement.yaml et service.yaml sont des valeurs prédéfinies et référencées dans valeurs.yaml.
Release.Name représente le nom après l'installation de Helm
[root@k8s-master tomcat]# helm supprimer tomcat
Supprimez tous les fichiers redondants du répertoire des modèles, ne laissant que deux fichiers de test.
[root@k8s-master tomcat]# modèles ls/
[root@k8s-master tomcat]# helm install -f valeurs.yaml
[root@k8s-master tomcat]# helm ls
Afficher le statut de publication
[root@k8s-master tomcat]# statut de barre tomcat
[root@k8s-master tomcat]# kubectl obtenir le pod
Afficher les détails du module
[root@k8s-master tomcat]# kubectl décrit le pod tomcat-dp-67df6cd4d6-78pxc