le mie informazioni di contatto
Posta[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Introduzione a Helm
Helm è uno strumento di gestione dei pacchetti per Kubernetes, utilizzato per semplificare la distribuzione e la gestione delle applicazioni Kubernetes. Helm può essere paragonato allo strumento yum di CentOS. Helm ha i seguenti concetti di base:
Grafico: è un pacchetto di installazione gestito da Helm, che contiene le risorse del pacchetto di installazione che devono essere distribuite. Il grafico può essere paragonato al file rpm utilizzato da CentOS yum.
Rilascio: è l'istanza di distribuzione del grafico. Un grafico può avere più versioni su un cluster Kubernetes, ovvero il grafico può essere installato più volte.
Repository: magazzino di grafici, utilizzato per pubblicare e archiviare i grafici
scaricamento:Italiano: https://github.com/helm/helm/releases
Controlla lo stato dei pod
- kubectl get pods --namespace=kube-system
- kubectl get pods --all-namespaces
Se vuoi eliminarlo, trova prima la distribuzione e poi eliminala.
- 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
Se desideri visualizzare un pod in dettaglio, puoi descriverlo
kubectl describe pod rke-coredns-addon-deploy-job-qz8v6--namespace=kube-system
Ultima versione stabile: v3.9.2
scaricamento
https://get.helm.sh/helm-v3.9.2-linux-amd64.tar.gz
Installare
- 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
Consulta la documentazione ufficiale:
Aggiungi un magazzino grafico
helm repo add bitnami https://charts.bitnami.com/bitnami
Visualizza l'elenco delle carte installabili
- 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...
Installa l'esempio del grafico
- ##确定我们可以拿到最新的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"
Nell'esempio sopra, il grafico bitnami/mysql è pubblicato con il nome mysql-1659686641. Quando elenchiamo tutti i pod, scopriremo che ci sono più pod mysql.
Puoi semplicemente apprendere le informazioni di base di questo grafico eseguendo il comando helm show chart bitnami/mysql. Oppure puoi eseguire helm show all bitnami/mysql per ottenere tutte le informazioni sul grafico.
Ogni volta che si esegue l'installazione di helm, viene creata una nuova versione di rilascio. Pertanto, un grafico può essere installato più volte nello stesso cluster e ognuno può essere gestito e aggiornato in modo indipendente.
Per ulteriori informazioni su come utilizzare il timone, vedere:https://helm.sh/zh/docs/intro/using_helm/
Con Helm puoi vedere facilmente quali grafici sono stati pubblicati
- 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
Disinstallare una versione
- kangming@ubuntu26:~/rancher$ helm uninstall mysql-1659686641
- release "mysql-1659686641" uninstalled
Questo comando disinstallerà mysql-1659686641 da Kubernetes ed eliminerà tutte le risorse correlate (servizio, distribuzione, pod, ecc.) relative a questa versione e anche la cronologia delle versioni.
Se fornisci l'opzione --keep-history durante l'esecuzione della disinstallazione di helm, Helm salverà la cronologia delle versioni. È possibile visualizzare le informazioni su questa versione tramite il comando
helm status mysql-1659686641
documentazione di aiuto al timone
helm get -h
ricerca del timone
hub di ricerca del timone daHub degli artefatti Trovare ed elencare le carte timone in . Esistono molti repository diversi archiviati in Artifact Hub.
helm search repo esegue ricerche dai repository aggiunti (utilizzando helm repo add) al client helm locale. Questo comando esegue la ricerca in base ai dati locali e non richiede una connessione Internet.
Utilizza il comando helm install per installare un nuovo pacchetto helm. Il metodo di utilizzo più semplice richiede solo il passaggio di due parametri: il nome della versione che hai nominato e il nome del grafico che desideri installare.
helm install happy-panda bitnami/wordpress
1. Aggiungi l'indirizzo del magazzino del grafico
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
2. Genera il certificato di definizione
Per riferimento:Genera certificato SSL autofirmato
Script per la generazione del certificato con un clic, funzionario del rancher, salva come 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
strumento
bash ./key.sh --ssl-domain=rancher.k8s-test.com--ssl-size=2048 --ssl-date=3650
Il file generato è il seguente
3. Crea uno spazio dei nomi segreto
kubectl create namespace cattle-system
4. Certificato di servizio e testo cifrato a chiave privata
- kubectl -n cattle-system create secret tls tls-rancher-ingress
- --cert=tls.crt
- --key=tls.key
Se è necessario sostituire il certificato, è possibile utilizzarekubectl -n cattle-system delete secret tls-rancher-ingress
cancellaretls-rancher-ingress
testo cifrato, quindi utilizzare il comando precedente per creare un nuovo testo cifrato. Se utilizzi un certificato firmato da una CA privata, puoi sostituire il nuovo certificato solo se è firmato dalla stessa CA del certificato corrente.
Testo cifrato del certificato 5.ca
- kubectl -n cattle-system create secret generic tls-ca
- --from-file=cacerts.pem=./cacerts.pem
6. Eseguire l'installazione rancher
- 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. Controlla lo stato e attendi che l'implementazione abbia esito positivo. Tutti i nodi sono pronti.
- 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
Controlla lo stato del pod. Quando il pod del rancher è pronto, puoi accedervi tramite il browser: rancher.k8s-test.com. Questo nome di dominio può essere mappato al nodo di bilanciamento del carico. Poiché l'installazione precedente avvia un pod su tutti i nodi funzionanti per impostazione predefinita. Quindi di seguito nginx configura le porte 80 e 443 di tre nodi.
- 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
Il nome host sopra può essere risolto nel nodo di bilanciamento del carico, che di solito è un VIP virtualizzato da keepalived, qui viene utilizzato solo un nodo LB, che viene risolto direttamente in 24, quindi il bilanciamento del carico viene eseguito tramite nginx di 24.
Visualizza i registri del rancher pod
- kubectl get pods -n cattle-system
-
- kubectl -n cattle-system logs -f rancher-5d9699f4cf-72wgp
Basta configurarlo sul nodo di bilanciamento del carico 24 e copiare su 24 il certificato generato dallo script
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;
- }
- }
accesso:https://rancher.k8s-test.com
La password di bootstrap è admin, l'account di accesso è admin, utilizza un codice casuale per la password: 1BgV0yLx19YkIhOv
Fare clic su Continua per accedere alla pagina di gestione.
Fare riferimento ai prerequisiti precedenti, installare il cluster k8s tramite rke e preparare l'ambiente helm.
1. Aggiungi il magazzino timone
- helm repo add rancher-latest
- https://releases.rancher.com/server-charts/latest
2. Creare uno spazio dei nomi
kubectl create namespace cattle-system
3. Selezionare il metodo di certificato TLS generato da Rancher per la gestione dei certificati.
4. Installa cert-manager L'installazione è necessaria solo se si seleziona il metodo del certificato TLS generato da 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
Verificare che Cert-Manager sia installato correttamente
kubectl get pods --namespace cert-manager
5. Installa rancher e utilizza un nome di dominio falso come nome host, in modo che rancher esponga l'IP.
- helm install rancher rancher-latest/rancher
- --namespace cattle-system
- --set hostname=rancher.my.org
- --set bootstrapPassword=admin
6. Attendi il completamento dell'implementazione
- 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
Dopo il successo, mappa semplicemente il nome di dominio rancher.my.org su tre nodi per il test. Dopo aver visto con successo la pagina, mostra che l'installazione è OK. Successivamente, dovrai solo configurare l'ingresso unificato per il bilanciamento del carico. Dopo aver visto la pagina seguente, viene dimostrato che non ci sono problemi con l'installazione corrente. Tieni presente che il nome di dominio può essere utilizzato solo per l'accesso e la pagina non può essere visualizzata normalmente tramite l'accesso IP.
Dopo aver verificato manualmente che tutti i nodi possano accedere a rancher, è necessario configurare il bilanciamento del carico nginx. Puoi configurare direttamente l'inoltro a quattro livelli, in modo da non dover configurare un certificato.
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;
- }
- }
Configura il file host del cliente, il test viene superato ed è possibile accedere normalmente al rancher quando si accede al portale nginx LB.