2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Einführung in Helm
Helm ist ein Paketverwaltungstool für Kubernetes, das die Bereitstellung und Verwaltung von Kubernetes-Anwendungen vereinfacht. Helm kann mit dem Yum-Tool von CentOS verglichen werden. Helm hat die folgenden Grundkonzepte:
Diagramm: Es handelt sich um ein von Helm verwaltetes Installationspaket, das die bereitzustellenden Installationspaketressourcen enthält. Das Diagramm kann mit der von CentOS yum verwendeten RPM-Datei verglichen werden.
Release: Es handelt sich um die Bereitstellungsinstanz des Diagramms. Ein Diagramm kann mehrere Releases auf einem Kubernetes-Cluster haben, d. h. das Diagramm kann mehrmals installiert werden.
Repository: Diagrammlager, das zum Veröffentlichen und Speichern von Diagrammen verwendet wird
herunterladen:https://github.com/helm/helm/releases
Überprüfen Sie den Status der Pods
- kubectl get pods --namespace=kube-system
- kubectl get pods --all-namespaces
Wenn Sie es löschen möchten, suchen Sie zuerst die Bereitstellung und löschen Sie sie dann.
- 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
Wenn Sie einen Pod im Detail betrachten möchten, können Sie ihn beschreiben
kubectl describe pod rke-coredns-addon-deploy-job-qz8v6--namespace=kube-system
Neueste stabile Version: v3.9.2
herunterladen
https://get.helm.sh/helm-v3.9.2-linux-amd64.tar.gz
Installieren
- 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
Schauen Sie sich die offizielle Dokumentation an:
Fügen Sie ein Diagrammlager hinzu
helm repo add bitnami https://charts.bitnami.com/bitnami
Sehen Sie sich die Liste der installierbaren Diagramme an
- 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...
Beispiel für ein Installationsdiagramm
- ##确定我们可以拿到最新的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"
Im obigen Beispiel wird das Diagramm bitnami/mysql unter dem Namen mysql-1659686641 veröffentlicht. Wenn wir alle Pods auflisten, werden wir feststellen, dass es mehr MySQL-Pods gibt.
Sie können die grundlegenden Informationen dieses Diagramms einfach erfahren, indem Sie den Befehl helm show chart bitnami/mysql ausführen. Oder Sie können helm show all bitnami/mysql ausführen, um alle Informationen über das Diagramm zu erhalten.
Immer wenn Sie helm install ausführen, wird eine neue Release-Version erstellt. Daher kann ein Diagramm mehrmals im selben Cluster installiert werden und jedes Diagramm kann unabhängig verwaltet und aktualisiert werden.
Weitere Informationen zur Verwendung von Helm finden Sie unter:https://helm.sh/zh/docs/intro/using_helm/
Mit Helm können Sie ganz einfach sehen, welche Diagramme veröffentlicht wurden
- 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
Deinstallieren Sie eine Version
- kangming@ubuntu26:~/rancher$ helm uninstall mysql-1659686641
- release "mysql-1659686641" uninstalled
Dieser Befehl deinstalliert mysql-1659686641 von Kubernetes. Dabei werden alle zugehörigen Ressourcen (Dienst, Bereitstellung, Pod usw.) im Zusammenhang mit dieser Version und sogar der Versionsverlauf gelöscht.
Wenn Sie beim Ausführen der Helm-Deinstallation die Option --keep-history angeben, speichert Helm den Versionsverlauf. Sie können Informationen zu dieser Version über den Befehl anzeigen
helm status mysql-1659686641
Helm-Hilfedokumentation
helm get -h
Helmsuche
Helm Search Hub vonArtefakt-Hub Suchen und listen Sie Steuerkarten in auf. Im Artifact Hub sind viele verschiedene Repositories gespeichert.
Helm Search Repo durchsucht Repositorys, die Sie (mithilfe von Helm Repo Add) zu Ihrem lokalen Helm-Client hinzugefügt haben. Dieser Befehl sucht basierend auf lokalen Daten und erfordert keine Internetverbindung.
Verwenden Sie den Befehl helm install, um ein neues Helm-Paket zu installieren. Die einfachste Verwendungsmethode erfordert lediglich die Übergabe von zwei Parametern: dem von Ihnen genannten Release-Namen und dem Namen des Diagramms, das Sie installieren möchten.
helm install happy-panda bitnami/wordpress
1. Fügen Sie die Chart-Lageradresse hinzu
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
2. Definitionszertifikat erstellen
Als Referenz:Generieren Sie ein selbstsigniertes SSL-Zertifikat
Ein-Klick-Skript zur Zertifikatserstellung, Rancher-Beamter, speichern als 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
implementieren
bash ./key.sh --ssl-domain=rancher.k8s-test.com--ssl-size=2048 --ssl-date=3650
Die generierte Datei lautet wie folgt
3. Erstellen Sie einen geheimen Namespace
kubectl create namespace cattle-system
4. Dienstzertifikat und Geheimtext des privaten Schlüssels
- kubectl -n cattle-system create secret tls tls-rancher-ingress
- --cert=tls.crt
- --key=tls.key
Wenn Sie das Zertifikat ersetzen müssen, können Sie es verwendenkubectl -n cattle-system delete secret tls-rancher-ingress
löschentls-rancher-ingress
Chiffretext und verwenden Sie dann den obigen Befehl, um einen neuen Chiffretext zu erstellen. Wenn Sie ein von einer privaten Zertifizierungsstelle signiertes Zertifikat verwenden, können Sie das neue Zertifikat nur ersetzen, wenn es von derselben Zertifizierungsstelle wie das aktuelle Zertifikat signiert ist.
Chiffretext des 5.ca-Zertifikats
- kubectl -n cattle-system create secret generic tls-ca
- --from-file=cacerts.pem=./cacerts.pem
6. Führen Sie den Installations-Rancher aus
- 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. Überprüfen Sie den Status und warten Sie, bis der Rollout erfolgreich ist. Alle Knoten sind bereit.
- 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
Überprüfen Sie den Pod-Status. Wenn der Pod des Ranchers bereit ist, können Sie über den Browser darauf zugreifen: rancher.k8s-test.com. Dieser Domänenname kann dem Lastausgleichsknoten zugeordnet werden. Denn die obige Installation startet standardmäßig einen Pod auf allen Arbeitsknoten. Im Folgenden konfiguriert Nginx also die Ports 80 und 443 von drei Knoten.
- 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
Der obige Hostname kann in den Lastausgleichsknoten aufgelöst werden, bei dem es sich normalerweise um einen durch Keepalived virtualisierten VIP handelt. Der Einfachheit halber wird hier nur ein LB-Knoten verwendet, der direkt in 24 aufgelöst wird, und der Lastausgleich erfolgt dann über Nginx von 24.
Sehen Sie sich die Protokolle des Rancher-Pods an
- kubectl get pods -n cattle-system
-
- kubectl -n cattle-system logs -f rancher-5d9699f4cf-72wgp
Konfigurieren Sie es einfach auf dem 24-Lastausgleichsknoten und kopieren Sie das vom Skript generierte Zertifikat auf 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;
- }
- }
Zugang:https://rancher.k8s-test.com
Das Bootstrap-Passwort ist admin, das Anmeldekonto ist admin, verwenden Sie einen Zufallscode für das Passwort: 1BgV0yLx19YkIhOv
Klicken Sie auf „Weiter“, um zur Verwaltungsseite zu gelangen.
Beachten Sie die vorherigen Voraussetzungen, installieren Sie den K8S-Cluster über RKE und bereiten Sie die Helmumgebung vor.
1. Helmlager hinzufügen
- helm repo add rancher-latest
- https://releases.rancher.com/server-charts/latest
2. Erstellen Sie einen Namensraum
kubectl create namespace cattle-system
3. Wählen Sie die von Rancher generierte TLS-Zertifikatsmethode für die Zertifikatsverwaltung aus.
4. Installieren Sie cert-manager. Die Installation ist nur erforderlich, wenn Sie die von Rancher generierte TLS-Zertifikatsmethode auswählen.
- # 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
Stellen Sie sicher, dass der Zertifikatsmanager korrekt installiert ist
kubectl get pods --namespace cert-manager
5. Installieren Sie Rancher und verwenden Sie einen gefälschten Domänennamen als Hostnamen, damit Rancher die IP offenlegt.
- helm install rancher rancher-latest/rancher
- --namespace cattle-system
- --set hostname=rancher.my.org
- --set bootstrapPassword=admin
6. Warten Sie, bis der Rollout erfolgreich ist
- 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
Nach dem Erfolg ordnen Sie den Domänennamen rancher.my.org zum Testen einfach drei Knoten zu. Nachdem die Seite erfolgreich angezeigt wurde, wird angezeigt, dass die Installation in Ordnung ist. Später müssen Sie nur noch den einheitlichen Lastausgleichseingang konfigurieren. Nachdem Sie die folgende Seite gesehen haben, zeigt sich, dass bei der aktuellen Installation kein Problem vorliegt. Beachten Sie, dass der Domänenname nur für den Zugriff verwendet werden kann und die Seite nicht normal über den IP-Zugriff angezeigt werden kann.
Nachdem Sie manuell getestet haben, ob alle Knoten auf Rancher zugreifen können, müssen Sie den Nginx-Lastausgleich konfigurieren. Sie können die vierschichtige Weiterleitung direkt konfigurieren, sodass Sie kein Zertifikat konfigurieren müssen.
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;
- }
- }
Konfigurieren Sie die Hosts-Datei des Clients, den Test bestanden und der Rancher kann beim Zugriff auf das Nginx LB-Portal normal aufgerufen werden.