2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Introduction à Helm
Helm est un outil de gestion de packages pour Kubernetes, utilisé pour simplifier le déploiement et la gestion des applications Kubernetes. Helm peut être comparé à l'outil yum de CentOS. Helm a les concepts de base suivants :
Graphique : Il s'agit d'un package d'installation géré par Helm, qui contient les ressources du package d'installation qui doivent être déployées. Le graphique peut être comparé au fichier rpm utilisé par CentOS yum.
Release : il s'agit de l'instance de déploiement du graphique. Un graphique peut avoir plusieurs versions sur un cluster Kubernetes, c'est-à-dire que le graphique peut être installé plusieurs fois.
Référentiel : entrepôt de graphiques, utilisé pour publier et stocker des graphiques
télécharger:https://github.com/helm/helm/releases
Vérifier l'état des pods
- kubectl get pods --namespace=kube-system
- kubectl get pods --all-namespaces
Si vous souhaitez le supprimer, recherchez d'abord le déploiement, puis supprimez-le.
- kangming@ubuntu26:~$ kubectl get deployment --namespace=kube-system
- NAMEREADY UP-TO-DATE AVAILABLE AGE
- calico-kube-controllers 1/1 11 4h23m
- coredns 2/2 22 4h22m
- coredns-autoscaler1/1 11 4h22m
- metrics-server1/1 11 4h18m
- tiller-deploy 0/1 10 4h15m
-
- kangming@ubuntu26:~$ kubectl delete deployment tiller-deploy --namespace=kube-system
- deployment.apps "tiller-deploy" deleted
Si vous souhaitez visualiser un pod en détail, vous pouvez décrire
kubectl describe pod rke-coredns-addon-deploy-job-qz8v6--namespace=kube-system
Dernière version stable : v3.9.2
télécharger
https://get.helm.sh/helm-v3.9.2-linux-amd64.tar.gz
Installer
- tar -zxvf helm-v3.9.2-linux-amd64.tar.gz
- sudo mv linux-amd64/helm /usr/local/bin/helm
- sudo chmod +x /usr/local/bin/helm
Consultez la documentation officielle :
Casque | Guide de démarrage rapide
Ajouter un entrepôt de graphiques
helm repo add bitnami https://charts.bitnami.com/bitnami
Afficher la liste des cartes installables
- kangming@ubuntu26:~/rancher$ helm search repo bitnami
- NAMECHART VERSION APP VERSION DESCRIPTION
- bitnami/airflow 13.0.22.3.3 Apache Airflow is a tool to express and execute...
- bitnami/apache9.1.162.4.54Apache HTTP Server is an open-source HTTP serve...
- bitnami/argo-cd 4.0.6 2.4.8 Argo CD is a continuous delivery tool for Kuber...
- bitnami/argo-workflows2.3.8 3.3.8 Argo Workflows is meant to orchestrate Kubernet...
Exemple de graphique d'installation
- ##确定我们可以拿到最新的charts列表
- helm repo update
-
- #安装一个mysql的chat示例
- helm install bitnami/mysql --generate-name
- NAME: mysql-1659686641
- LAST DEPLOYED: Fri Aug5 16:04:04 2022
- NAMESPACE: default
- STATUS: deployed
- REVISION: 1
- TEST SUITE: None
- NOTES:
- CHART NAME: mysql
- CHART VERSION: 9.2.5
- APP VERSION: 8.0.30
-
- ** Please be patient while the chart is being deployed **
-
- Tip:
-
- Watch the deployment status using the command: kubectl get pods -w --namespace default
-
- Services:
-
- echo Primary: mysql-1659686641.default.svc.cluster.local:3306
-
- Execute the following to get the administrator credentials:
-
- echo Username: root
- MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default mysql-1659686641 -o jsonpath="{.data.mysql-root-password}" | base64 -d)
-
- To connect to your database:
-
- 1. Run a pod that you can use as a client:
-
- kubectl run mysql-1659686641-client --rm --tty -i --restart='Never' --imagedocker.io/bitnami/mysql:8.0.30-debian-11-r4 --namespace default --env MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD --command -- bash
-
- 2. To connect to primary service (read/write):
-
- mysql -h mysql-1659686641.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"
Dans l'exemple ci-dessus, le graphique bitnami/mysql est publié sous le nom mysql-1659686641. Lorsque nous répertorions tous les pods, nous constaterons qu'il y a plus de pods MySQL.
Vous pouvez simplement apprendre les informations de base de ce graphique en exécutant la commande helm show chart bitnami/mysql. Ou vous pouvez exécuter helm show all bitnami/mysql pour obtenir toutes les informations sur le graphique.
Chaque fois que vous exécutez helm install, une nouvelle version est créée. Par conséquent, une carte peut être installée plusieurs fois dans le même cluster, et chacune peut être gérée et mise à niveau indépendamment.
Pour plus d’informations sur l’utilisation de Helm, consultez :https://helm.sh/zh/docs/intro/utilisation_de_helm/
Avec Helm, vous pouvez facilement voir quels graphiques ont été publiés
- kangming@ubuntu26:~/rancher$ helm list
- NAMENAMESPACE REVISIONUPDATED STATUSCHART APP VERSION
- mysql-1659686641default 1 2022-08-05 16:04:04.411386078 +0800 CST deployedmysql-9.2.5 8.0.30
Désinstaller une version
- kangming@ubuntu26:~/rancher$ helm uninstall mysql-1659686641
- release "mysql-1659686641" uninstalled
Cette commande désinstallera mysql-1659686641 de Kubernetes. Elle supprimera toutes les ressources associées (service, déploiement, pod, etc.) liées à cette version et même l'historique des versions.
Si vous fournissez l'option --keep-history lors de l'exécution de la désinstallation de helm, Helm enregistrera l'historique des versions. Vous pouvez afficher des informations sur cette version via la commande
helm status mysql-1659686641
documentation d'aide sur la barre
helm get -h
recherche de barre
centre de recherche de barre deCentre d'artefacts Recherchez et répertoriez les graphiques de barre au format . Il existe de nombreux référentiels différents stockés dans Artifact Hub.
helm search repo recherche à partir des référentiels que vous avez ajoutés (à l'aide de helm repo add) à votre client helm local. Cette commande effectue une recherche basée sur des données locales et ne nécessite pas de connexion Internet.
Utilisez la commande helm install pour installer un nouveau package helm. La méthode d'utilisation la plus simple nécessite uniquement de transmettre deux paramètres : le nom de la version que vous avez nommée et le nom de la carte que vous souhaitez installer.
helm install happy-panda bitnami/wordpress
1. Ajouter l'adresse de l'entrepôt Chart
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
2. Générer un certificat de définition
Pour référence:Générer un certificat SSL auto-signé
Script de génération de certificat en un clic, responsable de l'éleveur, enregistrer sous key.sh
- #!/bin/bash -e
-
- help ()
- {
- echo' ================================================================ '
- echo' --ssl-domain: 生成ssl证书需要的主域名,如不指定则默认为www.rancher.local,如果是ip访问服务,则可忽略;'
- echo' --ssl-trusted-ip: 一般ssl证书只信任域名的访问请求,有时候需要使用ip去访问server,那么需要给ssl证书添加扩展IP,多个IP用逗号隔开;'
- echo' --ssl-trusted-domain: 如果想多个域名访问,则添加扩展域名(SSL_TRUSTED_DOMAIN),多个扩展域名用逗号隔开;'
- echo' --ssl-size: ssl加密位数,默认2048;'
- echo' --ssl-cn: 国家代码(2个字母的代号),默认CN;'
- echo' 使用示例:'
- echo' ./create_self-signed-cert.sh --ssl-domain=www.test.com --ssl-trusted-domain=www.test2.com '
- echo' --ssl-trusted-ip=1.1.1.1,2.2.2.2,3.3.3.3 --ssl-size=2048 --ssl-date=3650'
- echo' ================================================================'
- }
-
- case "$1" in
- -h|--help) help; exit;;
- esac
-
- if [[ $1 == '' ]];then
- help;
- exit;
- fi
-
- CMDOPTS="$*"
- for OPTS in $CMDOPTS;
- do
- key=$(echo ${OPTS} | awk -F"=" '{print $1}' )
- value=$(echo ${OPTS} | awk -F"=" '{print $2}' )
- case "$key" in
- --ssl-domain) SSL_DOMAIN=$value ;;
- --ssl-trusted-ip) SSL_TRUSTED_IP=$value ;;
- --ssl-trusted-domain) SSL_TRUSTED_DOMAIN=$value ;;
- --ssl-size) SSL_SIZE=$value ;;
- --ssl-date) SSL_DATE=$value ;;
- --ca-date) CA_DATE=$value ;;
- --ssl-cn) CN=$value ;;
- esac
- done
-
- # CA相关配置
- CA_DATE=${CA_DATE:-3650}
- CA_KEY=${CA_KEY:-cakey.pem}
- CA_CERT=${CA_CERT:-cacerts.pem}
- CA_DOMAIN=cattle-ca
-
- # ssl相关配置
- SSL_CONFIG=${SSL_CONFIG:-$PWD/openssl.cnf}
- SSL_DOMAIN=${SSL_DOMAIN:-'www.rancher.local'}
- SSL_DATE=${SSL_DATE:-3650}
- SSL_SIZE=${SSL_SIZE:-2048}
-
- ## 国家代码(2个字母的代号),默认CN;
- CN=${CN:-CN}
-
- SSL_KEY=$SSL_DOMAIN.key
- SSL_CSR=$SSL_DOMAIN.csr
- SSL_CERT=$SSL_DOMAIN.crt
-
- echo -e "033[32m ---------------------------- 033[0m"
- echo -e "033[32m | 生成 SSL Cert | 033[0m"
- echo -e "033[32m ---------------------------- 033[0m"
-
- if [[ -e ./${CA_KEY} ]]; then
- echo -e "033[32m ====> 1. 发现已存在CA私钥,备份"${CA_KEY}"为"${CA_KEY}"-bak,然后重新创建 033[0m"
- mv ${CA_KEY} "${CA_KEY}"-bak
- openssl genrsa -out ${CA_KEY} ${SSL_SIZE}
- else
- echo -e "033[32m ====> 1. 生成新的CA私钥 ${CA_KEY} 033[0m"
- openssl genrsa -out ${CA_KEY} ${SSL_SIZE}
- fi
-
- if [[ -e ./${CA_CERT} ]]; then
- echo -e "033[32m ====> 2. 发现已存在CA证书,先备份"${CA_CERT}"为"${CA_CERT}"-bak,然后重新创建 033[0m"
- mv ${CA_CERT} "${CA_CERT}"-bak
- openssl req -x509 -sha256 -new -nodes -key ${CA_KEY} -days ${CA_DATE} -out ${CA_CERT} -subj "/C=${CN}/CN=${CA_DOMAIN}"
- else
- echo -e "033[32m ====> 2. 生成新的CA证书 ${CA_CERT} 033[0m"
- openssl req -x509 -sha256 -new -nodes -key ${CA_KEY} -days ${CA_DATE} -out ${CA_CERT} -subj "/C=${CN}/CN=${CA_DOMAIN}"
- fi
-
- echo -e "033[32m ====> 3. 生成Openssl配置文件 ${SSL_CONFIG} 033[0m"
- cat > ${SSL_CONFIG} <<EOM
- [req]
- req_extensions = v3_req
- distinguished_name = req_distinguished_name
- [req_distinguished_name]
- [ v3_req ]
- basicConstraints = CA:FALSE
- keyUsage = nonRepudiation, digitalSignature, keyEncipherment
- extendedKeyUsage = clientAuth, serverAuth
- EOM
-
- if [[ -n ${SSL_TRUSTED_IP} || -n ${SSL_TRUSTED_DOMAIN} || -n ${SSL_DOMAIN} ]]; then
- cat >> ${SSL_CONFIG} <<EOM
- subjectAltName = @alt_names
- [alt_names]
- EOM
- IFS=","
- dns=(${SSL_TRUSTED_DOMAIN})
- dns+=(${SSL_DOMAIN})
- for i in "${!dns[@]}"; do
- echo DNS.$((i+1)) = ${dns[$i]} >> ${SSL_CONFIG}
- done
-
- if [[ -n ${SSL_TRUSTED_IP} ]]; then
- ip=(${SSL_TRUSTED_IP})
- for i in "${!ip[@]}"; do
- echo IP.$((i+1)) = ${ip[$i]} >> ${SSL_CONFIG}
- done
- fi
- fi
-
- echo -e "033[32m ====> 4. 生成服务SSL KEY ${SSL_KEY} 033[0m"
- openssl genrsa -out ${SSL_KEY} ${SSL_SIZE}
-
- echo -e "033[32m ====> 5. 生成服务SSL CSR ${SSL_CSR} 033[0m"
- openssl req -sha256 -new -key ${SSL_KEY} -out ${SSL_CSR} -subj "/C=${CN}/CN=${SSL_DOMAIN}" -config ${SSL_CONFIG}
-
- echo -e "033[32m ====> 6. 生成服务SSL CERT ${SSL_CERT} 033[0m"
- openssl x509 -sha256 -req -in ${SSL_CSR} -CA ${CA_CERT}
- -CAkey ${CA_KEY} -CAcreateserial -out ${SSL_CERT}
- -days ${SSL_DATE} -extensions v3_req
- -extfile ${SSL_CONFIG}
-
- echo -e "033[32m ====> 7. 证书制作完成 033[0m"
- echo
- echo -e "033[32m ====> 8. 以YAML格式输出结果 033[0m"
- echo "----------------------------------------------------------"
- echo "ca_key: |"
- cat $CA_KEY | sed 's/^//'
- echo
- echo "ca_cert: |"
- cat $CA_CERT | sed 's/^//'
- echo
- echo "ssl_key: |"
- cat $SSL_KEY | sed 's/^//'
- echo
- echo "ssl_csr: |"
- cat $SSL_CSR | sed 's/^//'
- echo
- echo "ssl_cert: |"
- cat $SSL_CERT | sed 's/^//'
- echo
-
- echo -e "033[32m ====> 9. 附加CA证书到Cert文件 033[0m"
- cat ${CA_CERT} >> ${SSL_CERT}
- echo "ssl_cert: |"
- cat $SSL_CERT | sed 's/^//'
- echo
-
- echo -e "033[32m ====> 10. 重命名服务证书 033[0m"
- echo "cp ${SSL_DOMAIN}.key tls.key"
- cp ${SSL_DOMAIN}.key tls.key
- echo "cp ${SSL_DOMAIN}.crt tls.crt"
- cp ${SSL_DOMAIN}.crt tls.crt
mettre en œuvre
bash ./key.sh --ssl-domain=rancher.k8s-test.com--ssl-size=2048 --ssl-date=3650
Le fichier généré est le suivant
3. Créez un espace de noms secret
kubectl create namespace cattle-system
4. Certificat de service et texte chiffré de clé privée
- kubectl -n cattle-system create secret tls tls-rancher-ingress
- --cert=tls.crt
- --key=tls.key
Si vous devez remplacer le certificat, vous pouvez utiliserkubectl -n cattle-system delete secret tls-rancher-ingress
supprimertls-rancher-ingress
texte chiffré, puis utilisez la commande ci-dessus pour créer un nouveau texte chiffré. Si vous utilisez un certificat signé par une autorité de certification privée, vous pouvez remplacer le nouveau certificat uniquement s'il est signé par la même autorité de certification que le certificat actuel.
Texte chiffré du certificat 5.ca
- kubectl -n cattle-system create secret generic tls-ca
- --from-file=cacerts.pem=./cacerts.pem
6. Exécutez le rancher d'installation
- helm install rancher rancher-latest/rancher
- --namespace cattle-system
- --set hostname=rancher.k8s-test.com
- --set bootstrapPassword=admin
- --set ingress.tls.source=secret
- --set privateCA=true
7. Vérifiez l'état et attendez que le déploiement réussisse et que tous les nœuds soient prêts.
- kangming@ubuntu26:~$ kubectl -n cattle-system rollout status deploy/rancher
- deployment "rancher" successfully rolled out
- kangming@ubuntu26:~$ kubectl -n cattle-system get deploy rancher
- NAMEREADY UP-TO-DATE AVAILABLE AGE
- rancher 3/3 33 40m
Vérifiez l'état du pod lorsque le pod du rancher est prêt, vous pouvez y accéder via le navigateur : rancher.k8s-test.com. Ce nom de domaine peut être mappé au nœud d'équilibrage de charge. Parce que l'installation ci-dessus démarre par défaut un pod sur tous les nœuds de travail. Ainsi, ci-dessous, nginx configure les ports 80 et 443 de trois nœuds.
- kubectl get pods --all-namespaces
- 或者
- kubectl get pods -n cattle-system
-
- #查看rancher pod状态
- kubectl describe podrancher-ff955865-29ljr --namespace=cattle-system
- #一次看所有rancher pod
- kubectl -n cattle-system describe pods -l app=rancher
Le nom d'hôte ci-dessus peut être résolu en nœud d'équilibrage de charge, qui est généralement un VIP virtualisé par keepalived, pour plus de commodité, un seul nœud LB est utilisé ici, qui est directement résolu en 24, puis l'équilibrage de charge est effectué via nginx de 24.
Afficher les journaux du module Rancher
- kubectl get pods -n cattle-system
-
- kubectl -n cattle-system logs -f rancher-5d9699f4cf-72wgp
Configurez-le simplement sur le nœud d'équilibrage de charge 24 et copiez le certificat généré par le script sur 24
sudo vi /etc/nginx/nignx.conf
- stream {
- upstream rancher_servers_http {
- least_conn;
- server 192.168.43.26:80 max_fails=3 fail_timeout=5s;
- server 192.168.43.27:80 max_fails=3 fail_timeout=5s;
- server 192.168.43.28:80 max_fails=3 fail_timeout=5s;
- }
- server {
- listen 80;
- proxy_pass rancher_servers_http;
- }
-
- upstream rancher_servers_https {
- least_conn;
- server 192.168.43.26:443 max_fails=3 fail_timeout=5s;
- server 192.168.43.27:443 max_fails=3 fail_timeout=5s;
- server 192.168.43.28:443 max_fails=3 fail_timeout=5s;
- }
- server {
- listen 443;
- proxy_pass rancher_servers_https;
- }
- }
accéder:https://rancher.k8s-test.com
Le mot de passe Bootstrap est administrateur, le compte de connexion est administrateur, utilisez un code aléatoire pour le mot de passe : 1BgV0yLx19YkIhOv
Cliquez sur Continuer pour accéder à la page de gestion.
Reportez-vous aux prérequis précédents, installez le cluster k8s via rke et préparez l'environnement helm.
1. Ajouter un entrepôt de barre
- helm repo add rancher-latest
- https://releases.rancher.com/server-charts/latest
2. Créez un espace de noms
kubectl create namespace cattle-system
3. Sélectionnez la méthode de certificat TLS généré par Rancher pour la gestion des certificats.
4. Installez cert-manager L'installation n'est requise que si vous sélectionnez la méthode de certificat TLS généré par Rancher.
- # If you have installed the CRDs manually instead of with the `--set installCRDs=true` option added to your Helm install command, you should upgrade your CRD resources before upgrading the Helm chart:
-
- kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml
-
- # Add the Jetstack Helm repository
- helm repo add jetstack https://charts.jetstack.io
-
- # Update your local Helm chart repository cache
- helm repo update
-
- # Install the cert-manager Helm chart
- helm install cert-manager jetstack/cert-manager
- --namespace cert-manager
- --create-namespace
- --version v1.7.1
Vérifiez que cert-manager est correctement installé
kubectl get pods --namespace cert-manager
5. Installez Rancher et utilisez un faux nom de domaine pour le nom d'hôte, afin que Rancher expose l'adresse IP.
- helm install rancher rancher-latest/rancher
- --namespace cattle-system
- --set hostname=rancher.my.org
- --set bootstrapPassword=admin
6. Attendez que le déploiement réussisse
- kangming@ubuntu26:~$ kubectl -n cattle-system rollout status deploy/rancher
- deployment "rancher" successfully rolled out
- kangming@ubuntu26:~$ kubectl -n cattle-system get deploy rancher
- NAMEREADY UP-TO-DATE AVAILABLE AGE
- rancher 3/3 33 40m
Après succès, mappez simplement le nom de domaine rancher.my.org sur trois nœuds pour le test. Après avoir vu la page avec succès, cela montre que l'installation est OK. Plus tard, il vous suffira de configurer l’entrée unifiée d’équilibrage de charge. Après avoir vu la page suivante, il s'avère qu'il n'y a aucun problème avec l'installation actuelle. Notez que le nom de domaine ne peut être utilisé que pour l'accès et que la page ne peut pas être visualisée normalement via l'accès IP.
Après avoir testé manuellement que tous les nœuds peuvent accéder à Rancher, vous devez configurer l'équilibrage de charge nginx. Vous pouvez directement configurer le transfert à quatre couches. De cette façon, vous n'avez pas besoin de configurer un certificat.
sudo vi /etc/nginx/nignx.conf
- stream {
- upstream rancher_servers_http {
- least_conn;
- server 192.168.43.26:80 max_fails=3 fail_timeout=5s;
- server 192.168.43.27:80 max_fails=3 fail_timeout=5s;
- server 192.168.43.28:80 max_fails=3 fail_timeout=5s;
- }
- server {
- listen 80;
- proxy_pass rancher_servers_http;
- }
-
- upstream rancher_servers_https {
- least_conn;
- server 192.168.43.26:443 max_fails=3 fail_timeout=5s;
- server 192.168.43.27:443 max_fails=3 fail_timeout=5s;
- server 192.168.43.28:443 max_fails=3 fail_timeout=5s;
- }
- server {
- listen 443;
- proxy_pass rancher_servers_https;
- }
- }
Configurez le fichier hosts du client, le test réussit et le rancher est accessible normalement lors de l'accès au portail nginx LB.