Teknologian jakaminen

Yiwen oppii käyttämään Helmiä Rancherin korkean käytettävyyden klusterin käyttöönottamiseksi

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

rancher-klusterin arkkitehtuurikaavio

Helm ottaa käyttöön rancherin korkean käytettävyyden klusterin

Johdatus Helmiin

Helm on Kubernetesin paketinhallintatyökalu, jota käytetään yksinkertaistamaan Kubernetes-sovellusten käyttöönottoa ja hallintaa. Helmiä voidaan verrata CentOS:n yum-työkaluun. Helmillä on seuraavat peruskäsitteet:

Kaavio: Se on Helmin hallinnoima asennuspaketti, joka sisältää asennettavat asennuspaketin resurssit. Kaaviota voidaan verrata CentOS yumin käyttämään rpm-tiedostoon.

Julkaisu: Se on kaavion käyttöönotto-ilmentymä Kaaviolla voi olla useita julkaisuja Kubernetes-klusterissa, eli kaavio voidaan asentaa useita kertoja.

Arkisto: Karttavarasto, jota käytetään kaavioiden julkaisemiseen ja tallentamiseen

ladata:https://github.com/helm/helm/releases

Tarkista kynsien tila

  1. kubectl get pods --namespace=kube-system
  2. kubectl get pods --all-namespaces

Jos haluat poistaa sen, etsi ensin käyttöönotto ja poista se.

  1. kangming@ubuntu26:~$ kubectl get deployment --namespace=kube-system
  2. NAMEREADY UP-TO-DATE AVAILABLE AGE
  3. calico-kube-controllers 1/1 11 4h23m
  4. coredns 2/2 22 4h22m
  5. coredns-autoscaler1/1 11 4h22m
  6. metrics-server1/1 11 4h18m
  7. tiller-deploy 0/1 10 4h15m
  8. kangming@ubuntu26:~$ kubectl delete deployment tiller-deploy --namespace=kube-system
  9. deployment.apps "tiller-deploy" deleted

Jos haluat tarkastella podia yksityiskohtaisesti, voit kuvailla

kubectl describe pod rke-coredns-addon-deploy-job-qz8v6--namespace=kube-system

helm3 asennus

Uusin vakaa versio: v3.9.2

ladata

https://get.helm.sh/helm-v3.9.2-linux-amd64.tar.gz

Asentaa

  1. tar -zxvf helm-v3.9.2-linux-amd64.tar.gz
  2. sudo mv linux-amd64/helm /usr/local/bin/helm 
  3. sudo chmod +/usr/local/bin/helm

Tutustu viralliseen dokumentaatioon:

Helm | Asiakirjat

Helm |. Pikaopas

Lisää kaaviovarasto

helm repo add bitnami https://charts.bitnami.com/bitnami

Katso luettelo asennettavista kaavioista

  1. kangming@ubuntu26:~/rancher$ helm search repo bitnami
  2. NAMECHART VERSION APP VERSION DESCRIPTION
  3. bitnami/airflow 13.0.22.3.3 Apache Airflow is a tool to express and execute...
  4. bitnami/apache9.1.162.4.54Apache HTTP Server is an open-source HTTP serve...
  5. bitnami/argo-cd 4.0.6 2.4.8 Argo CD is a continuous delivery tool for Kuber...
  6. bitnami/argo-workflows2.3.8 3.3.8 Argo Workflows is meant to orchestrate Kubernet...

Esimerkki asennuskaaviosta

  1. ##确定我们可以拿到最新的charts列表
  2. helm repo update
  3. #安装一个mysql的chat示例
  4. helm install bitnami/mysql --generate-name
  5. NAME: mysql-1659686641
  6. LAST DEPLOYED: Fri Aug5 16:04:04 2022
  7. NAMESPACE: default
  8. STATUS: deployed
  9. REVISION: 1
  10. TEST SUITE: None
  11. NOTES:
  12. CHART NAME: mysql
  13. CHART VERSION: 9.2.5
  14. APP VERSION: 8.0.30
  15. ** Please be patient while the chart is being deployed **
  16. Tip:
  17. Watch the deployment status using the command: kubectl get pods -w --namespace default
  18. Services:
  19. echo Primary: mysql-1659686641.default.svc.cluster.local:3306
  20. Execute the following to get the administrator credentials:
  21. echo Username: root
  22. MYSQL_ROOT_PASSWORD=$(kubectl get secret --namespace default mysql-1659686641 -o jsonpath="{.data.mysql-root-password}" | base64 -d)
  23. To connect to your database:
  24. 1Run a pod that you can use as a client:
  25. 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
  26. 2To connect to primary service (read/write):
  27. mysql -h mysql-1659686641.default.svc.cluster.local -uroot -p"$MYSQL_ROOT_PASSWORD"

Yllä olevassa esimerkissä bitnami/mysql-kaavio on julkaistu ja sen nimi on mysql-1659686641. Kun luettelemme kaikki podit, huomaamme, että mysql-tyyppejä on enemmän.

Voit yksinkertaisesti oppia tämän kaavion perustiedot suorittamalla ruoriesityskaavio bitnami/mysql-komennon. Tai voit suorittaa ruorinäytön kaikki bitnami/mysql saadaksesi kaikki tiedot kaaviosta.

Aina kun suoritat ruoriasennuksen, luodaan uusi julkaisuversio. Siksi kaavio voidaan asentaa useita kertoja samaan klusteriin, ja jokaista voidaan hallita ja päivittää itsenäisesti.

Katso lisätietoja ruorin käytöstä:https://helm.sh/zh/docs/intro/using_helm/

Helmin avulla näet helposti, mitkä kartat on julkaistu

  1. kangming@ubuntu26:~/rancher$ helm list
  2. NAMENAMESPACE REVISIONUPDATED STATUSCHART APP VERSION
  3. mysql-1659686641default 1 2022-08-05 16:04:04.411386078 +0800 CST deployedmysql-9.2.5 8.0.30

Poista versio

  1. kangming@ubuntu26:~/rancherhelm uninstall mysql-1659686641
  2. release "mysql-1659686641" uninstalled

Tämä komento poistaa mysql-1659686641:n Kubernetesista. Se poistaa kaikki tähän versioon liittyvät resurssit (palvelu, käyttöönotto, pod jne.) ja jopa versiohistorian.

Jos annat valinnan --keep-history suoritettaessa ruoriasennuksen poistoa, Helm tallentaa versiohistorian. Voit tarkastella tämän version tietoja komennon kautta

helm status mysql-1659686641

ruorin ohjedokumentaatio

helm get -h

ruorihaku

  • ruorihakukeskusArtefact Hub Etsi ja luettele ruorikaaviot kohdasta . Artifact Hubiin on tallennettu paljon erilaisia ​​arkistoja.

  • ruorihaku arkistohakuja arkistoista, jotka olet lisännyt (käyttäen ruorivaraston lisäystä) paikalliseen ruoriohjelmaasi. Tämä komento etsii paikallisten tietojen perusteella eikä vaadi Internet-yhteyttä.

Käytä ruoriasennuskomentoa uuden ruoripaketin asentamiseen. Yksinkertaisin käyttötapa vaatii vain kahden parametrin välittämisen: nimeämäsi julkaisun nimen ja asennettavan kaavion nimen.

helm install happy-panda bitnami/wordpress

Helm3 asentaa rancherin (itse allekirjoitettu varmennemenetelmä)

1. Lisää kaavion varastoosoite

helm repo add rancher-latest 
https://releases.rancher.com/server-charts/latest

2. Luo määritelmäsertifikaatti

Viitteeksi:Luo itse allekirjoitettu SSL-varmenne

Yhden napsautuksen varmenteen luomisskripti, karjankasvattajan virallinen, tallenna nimellä key.sh

  1. #!/bin/bash -e
  2. help ()
  3. {
  4. echo' ================================================================ '
  5. echo' --ssl-domain: 生成ssl证书需要的主域名,如不指定则默认为www.rancher.local,如果是ip访问服务,则可忽略;'
  6. echo' --ssl-trusted-ip: 一般ssl证书只信任域名的访问请求,有时候需要使用ip去访问server,那么需要给ssl证书添加扩展IP,多个IP用逗号隔开;'
  7. echo' --ssl-trusted-domain: 如果想多个域名访问,则添加扩展域名(SSL_TRUSTED_DOMAIN),多个扩展域名用逗号隔开;'
  8. echo' --ssl-size: ssl加密位数,默认2048;'
  9. echo' --ssl-cn: 国家代码(2个字母的代号),默认CN;'
  10. echo' 使用示例:'
  11. echo' ./create_self-signed-cert.sh --ssl-domain=www.test.com --ssl-trusted-domain=www.test2.com  '
  12. echo' --ssl-trusted-ip=1.1.1.1,2.2.2.2,3.3.3.3 --ssl-size=2048 --ssl-date=3650'
  13. echo' ================================================================'
  14. }
  15. case "$1" in
  16. -h|--helphelpexit;;
  17. esac
  18. if [[ $1 == '' ]];then
  19. help;
  20. exit;
  21. fi
  22. CMDOPTS="$*"
  23. for OPTS in $CMDOPTS;
  24. do
  25. key=$(echo ${OPTS} | awk -F"=" '{print $1}' )
  26. value=$(echo ${OPTS} | awk -F"=" '{print $2}' )
  27. case "$key" in
  28. --ssl-domain) SSL_DOMAIN=$value ;;
  29. --ssl-trusted-ip) SSL_TRUSTED_IP=$value ;;
  30. --ssl-trusted-domain) SSL_TRUSTED_DOMAIN=$value ;;
  31. --ssl-size) SSL_SIZE=$value ;;
  32. --ssl-date) SSL_DATE=$value ;;
  33. --ca-date) CA_DATE=$value ;;
  34. --ssl-cn) CN=$value ;;
  35. esac
  36. done
  37. # CA相关配置
  38. CA_DATE=${CA_DATE:-3650}
  39. CA_KEY=${CA_KEY:-cakey.pem}
  40. CA_CERT=${CA_CERT:-cacerts.pem}
  41. CA_DOMAIN=cattle-ca
  42. # ssl相关配置
  43. SSL_CONFIG=${SSL_CONFIG:-$PWD/openssl.cnf}
  44. SSL_DOMAIN=${SSL_DOMAIN:-'www.rancher.local'}
  45. SSL_DATE=${SSL_DATE:-3650}
  46. SSL_SIZE=${SSL_SIZE:-2048}
  47. ## 国家代码(2个字母的代号),默认CN;
  48. CN=${CN:-CN}
  49. SSL_KEY=$SSL_DOMAIN.key
  50. SSL_CSR=$SSL_DOMAIN.csr
  51. SSL_CERT=$SSL_DOMAIN.crt
  52. echo -e "033[32m ---------------------------- 033[0m"
  53. echo -e "033[32m | 生成 SSL Cert | 033[0m"
  54. echo -e "033[32m ---------------------------- 033[0m"
  55. if [[ -e ./${CA_KEY} ]]; then
  56. echo -e "033[32m ====> 1. 发现已存在CA私钥,备份"${CA_KEY}"为"${CA_KEY}"-bak,然后重新创建 033[0m"
  57. mv ${CA_KEY} "${CA_KEY}"-bak
  58. openssl genrsa -out ${CA_KEY} ${SSL_SIZE}
  59. else
  60. echo -e "033[32m ====> 1. 生成新的CA私钥 ${CA_KEY} 033[0m"
  61. openssl genrsa -out ${CA_KEY} ${SSL_SIZE}
  62. fi
  63. if [[ -e ./${CA_CERT} ]]; then
  64. echo -e "033[32m ====> 2. 发现已存在CA证书,先备份"${CA_CERT}"为"${CA_CERT}"-bak,然后重新创建 033[0m"
  65. mv ${CA_CERT} "${CA_CERT}"-bak
  66. openssl req -x509 -sha256 -new -nodes -key ${CA_KEY} -days ${CA_DATE} -out ${CA_CERT} -subj "/C=${CN}/CN=${CA_DOMAIN}"
  67. else
  68. echo -e "033[32m ====> 2. 生成新的CA证书 ${CA_CERT} 033[0m"
  69. openssl req -x509 -sha256 -new -nodes -key ${CA_KEY} -days ${CA_DATE} -out ${CA_CERT} -subj "/C=${CN}/CN=${CA_DOMAIN}"
  70. fi
  71. echo -e "033[32m ====> 3. 生成Openssl配置文件 ${SSL_CONFIG} 033[0m"
  72. cat > ${SSL_CONFIG} <<EOM
  73. [req]
  74. req_extensions = v3_req
  75. distinguished_name = req_distinguished_name
  76. [req_distinguished_name]
  77. [ v3_req ]
  78. basicConstraints = CA:FALSE
  79. keyUsage = nonRepudiation, digitalSignature, keyEncipherment
  80. extendedKeyUsage = clientAuth, serverAuth
  81. EOM
  82. if [[ -n ${SSL_TRUSTED_IP} || -n ${SSL_TRUSTED_DOMAIN} || -n ${SSL_DOMAIN} ]]; then
  83. cat >> ${SSL_CONFIG} <<EOM
  84. subjectAltName = @alt_names
  85. [alt_names]
  86. EOM
  87. IFS=","
  88. dns=(${SSL_TRUSTED_DOMAIN})
  89. dns+=(${SSL_DOMAIN})
  90. for i in "${!dns[@]}"do
  91. echo DNS.$((i+1)) = ${dns[$i]} >> ${SSL_CONFIG}
  92. done
  93. if [[ -n ${SSL_TRUSTED_IP} ]]; then
  94. ip=(${SSL_TRUSTED_IP})
  95. for i in "${!ip[@]}"do
  96. echo IP.$((i+1)) = ${ip[$i]} >> ${SSL_CONFIG}
  97. done
  98. fi
  99. fi
  100. echo -e "033[32m ====> 4. 生成服务SSL KEY ${SSL_KEY} 033[0m"
  101. openssl genrsa -out ${SSL_KEY} ${SSL_SIZE}
  102. echo -e "033[32m ====> 5. 生成服务SSL CSR ${SSL_CSR} 033[0m"
  103. openssl req -sha256 -new -key ${SSL_KEY} -out ${SSL_CSR} -subj "/C=${CN}/CN=${SSL_DOMAIN}" -config ${SSL_CONFIG}
  104. echo -e "033[32m ====> 6. 生成服务SSL CERT ${SSL_CERT} 033[0m"
  105. openssl x509 -sha256 -req -in ${SSL_CSR} -CA ${CA_CERT} 
  106. -CAkey ${CA_KEY} -CAcreateserial -out ${SSL_CERT} 
  107. -days ${SSL_DATE} -extensions v3_req 
  108. -extfile ${SSL_CONFIG}
  109. echo -e "033[32m ====> 7. 证书制作完成 033[0m"
  110. echo
  111. echo -e "033[32m ====> 8. 以YAML格式输出结果 033[0m"
  112. echo "----------------------------------------------------------"
  113. echo "ca_key: |"
  114. cat $CA_KEY | sed 's/^//'
  115. echo
  116. echo "ca_cert: |"
  117. cat $CA_CERT | sed 's/^//'
  118. echo
  119. echo "ssl_key: |"
  120. cat $SSL_KEY | sed 's/^//'
  121. echo
  122. echo "ssl_csr: |"
  123. cat $SSL_CSR | sed 's/^//'
  124. echo
  125. echo "ssl_cert: |"
  126. cat $SSL_CERT | sed 's/^//'
  127. echo
  128. echo -e "033[32m ====> 9. 附加CA证书到Cert文件 033[0m"
  129. cat ${CA_CERT} >> ${SSL_CERT}
  130. echo "ssl_cert: |"
  131. cat $SSL_CERT | sed 's/^//'
  132. echo
  133. echo -e "033[32m ====> 10. 重命名服务证书 033[0m"
  134. echo "cp ${SSL_DOMAIN}.key tls.key"
  135. cp ${SSL_DOMAIN}.key tls.key
  136. echo "cp ${SSL_DOMAIN}.crt tls.crt"
  137. cp ${SSL_DOMAIN}.crt tls.crt

toteuttaa

bash ./key.sh --ssl-domain=rancher.k8s-test.com--ssl-size=2048 --ssl-date=3650

Luotu tiedosto on seuraava

3. Luo salainen nimiavaruus

kubectl create namespace cattle-system

4. Palveluvarmenne ja yksityisen avaimen salateksti

  1. kubectl -n cattle-system create secret tls tls-rancher-ingress 
  2. --cert=tls.crt 
  3. --key=tls.key

Jos sinun on vaihdettava varmenne, voit käyttääkubectl -n cattle-system delete secret tls-rancher-ingresspoistaaksesitls-rancher-ingress salakirjoitus ja luo sitten uusi salateksti yllä olevalla komennolla. Jos käytät yksityisen CA:n allekirjoittamaa varmennetta, voit korvata uuden varmenteen vain, jos sen on allekirjoittanut sama CA kuin nykyinen varmenne.

5.ca sertifikaatin salateksti

  1. kubectl -n cattle-system create secret generic tls-ca 
  2. --from-file=cacerts.pem=./cacerts.pem

6. Suorita asennus rancher

  1. helm install rancher rancher-latest/rancher 
  2. --namespace cattle-system 
  3. --set hostname=rancher.k8s-test.com 
  4. --set bootstrapPassword=admin 
  5. --set ingress.tls.source=secret 
  6. --set privateCA=true

7. Tarkista tila ja odota, että käyttöönotto onnistuu ja kaikki solmut ovat valmiita.

  1. kangming@ubuntu26:~$ kubectl -n cattle-system rollout status deploy/rancher
  2. deployment "rancher" successfully rolled out
  3. kangming@ubuntu26:~$ kubectl -n cattle-system get deploy rancher
  4. NAMEREADY UP-TO-DATE AVAILABLE AGE
  5. rancher 3/3 33 40m

Tarkista pod-tila Kun rancherin pod on valmis, voit käyttää sitä selaimen kautta: rancher.k8s-test.com. Tämä toimialueen nimi voidaan yhdistää kuormituksen tasapainotussolmuun. Koska yllä oleva asennus käynnistää oletuksena podin kaikissa toimivissa solmuissa. Joten alla nginx konfiguroi kolmen solmun portit 80 ja 443.

  1. kubectl get pods --all-namespaces
  2. 或者
  3. kubectl get pods -n cattle-system
  4. #查看rancher pod状态
  5. kubectl describe podrancher-ff955865-29ljr --namespace=cattle-system
  6. #一次看所有rancher pod
  7. kubectl -n cattle-system describe pods -l app=rancher

Yllä oleva isäntänimi voidaan määrittää kuormituksen tasapainotussolmulle, joka on yleensä VIP-virtualisoitu Keepalivedin avulla. Mukavuuden vuoksi tässä käytetään vain yhtä LB-solmua, joka on määritetty suoraan arvoon 24, ja sitten kuormituksen tasapainotus tehdään nginx of 24:n kautta.

ongelmien karttoittaminen

Katso rancher podin lokit

  1. kubectl get pods -n cattle-system
  2. kubectl -n cattle-system logs -f rancher-5d9699f4cf-72wgp

Määritä kuormituksen tasapainotus

Määritä se vain 24 kuormituksen tasapainotussolmuun ja kopioi komentosarjan luoma varmenne numeroon 24

sudo vi /etc/nginx/nignx.conf

  1. stream {
  2. upstream rancher_servers_http {
  3. least_conn;
  4. server 192.168.43.26:80 max_fails=3 fail_timeout=5s;
  5. server 192.168.43.27:80 max_fails=3 fail_timeout=5s;
  6. server 192.168.43.28:80 max_fails=3 fail_timeout=5s;
  7. }
  8. server {
  9. listen 80;
  10. proxy_pass rancher_servers_http;
  11. }
  12. upstream rancher_servers_https {
  13. least_conn;
  14. server 192.168.43.26:443 max_fails=3 fail_timeout=5s;
  15. server 192.168.43.27:443 max_fails=3 fail_timeout=5s;
  16. server 192.168.43.28:443 max_fails=3 fail_timeout=5s;
  17. }
  18. server {
  19. listen 443;
  20. proxy_pass rancher_servers_https;
  21. }
  22. }

pääsy:https://rancher.k8s-test.com

Bootstrap-salasana on admin, kirjautumistili on admin, käytä salasanana satunnaista koodia: 1BgV0yLx19YkIhOv

Siirry hallintasivulle napsauttamalla Jatka.

helm3 asentaa rancherin (rancherin mukana tulee oma varmenteiden hallinta)

Katso edelliset edellytykset, asenna k8s-klusteri rke:n kautta ja valmistele ruoriympäristö.

1. Lisää ruorivarasto

  1. helm repo add rancher-latest 
  2. https://releases.rancher.com/server-charts/latest

2. Luo nimiavaruus

kubectl create namespace cattle-system

3. Valitse Rancherin luoma TLS-varmennemenetelmä varmenteiden hallintaa varten.

4. Asenna cert-manager Asennus vaaditaan vain, jos valitset Rancherin luoman TLS-varmennemenetelmän.

  1. 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:
  2. kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml
  3. Add the Jetstack Helm repository
  4. helm repo add jetstack https://charts.jetstack.io
  5. # Update your local Helm chart repository cache
  6. helm repo update
  7. # Install the cert-manager Helm chart
  8. helm install cert-manager jetstack/cert-manager 
  9. --namespace cert-manager 
  10. --create-namespace 
  11. --version v1.7.1

Varmista, että varmenteiden hallintaohjelma on asennettu oikein

kubectl get pods --namespace cert-manager

5. Asenna rancher ja käytä väärää verkkotunnusta isäntänimenä, jotta rancher paljastaa IP-osoitteen.

  1. helm install rancher rancher-latest/rancher 
  2. --namespace cattle-system 
  3. --set hostname=rancher.my.org 
  4. --set bootstrapPassword=admin

6. Odota, että käyttöönotto onnistuu

  1. kangming@ubuntu26:~$ kubectl -n cattle-system rollout status deploy/rancher
  2. deployment "rancher" successfully rolled out
  3. kangming@ubuntu26:~$ kubectl -n cattle-system get deploy rancher
  4. NAMEREADY UP-TO-DATE AVAILABLE AGE
  5. rancher 3/3 33 40m

Onnistuneena yhdistä verkkotunnus rancher.my.org kolmeen solmuun testausta varten. Kun olet nähnyt sivun, asennus on kunnossa. Myöhemmin sinun tarvitsee vain määrittää kuormituksen tasauksen yhtenäinen sisäänkäynti. Kun olet nähnyt seuraavan sivun, se osoittaa, että nykyisessä asennuksessa ei ole ongelmia. Huomaa, että verkkotunnuksen nimeä voidaan käyttää vain pääsyyn, eikä sivua voi tarkastella normaalisti IP-yhteyden kautta.

Määritä kuormituksen tasapainotusportaali

Kun olet testannut manuaalisesti, että kaikki solmut voivat käyttää rancheria, sinun on määritettävä nginx-kuormituksen tasapainotus. Voit määrittää nelikerroksisen edelleenlähetyksen suoraan, jotta sinun ei tarvitse määrittää varmennetta.

sudo vi /etc/nginx/nignx.conf

  1. stream {
  2. upstream rancher_servers_http {
  3. least_conn;
  4. server 192.168.43.26:80 max_fails=3 fail_timeout=5s;
  5. server 192.168.43.27:80 max_fails=3 fail_timeout=5s;
  6. server 192.168.43.28:80 max_fails=3 fail_timeout=5s;
  7. }
  8. server {
  9. listen 80;
  10. proxy_pass rancher_servers_http;
  11. }
  12. upstream rancher_servers_https {
  13. least_conn;
  14. server 192.168.43.26:443 max_fails=3 fail_timeout=5s;
  15. server 192.168.43.27:443 max_fails=3 fail_timeout=5s;
  16. server 192.168.43.28:443 max_fails=3 fail_timeout=5s;
  17. }
  18. server {
  19. listen 443;
  20. proxy_pass rancher_servers_https;
  21. }
  22. }

Määritä asiakkaan hosts-tiedosto, testi läpäisee ja karjatilaajaa voidaan käyttää normaalisti, kun käytetään nginx LB -portaalia.