informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Pengantar Helm
Helm adalah alat manajemen paket untuk Kubernetes, yang digunakan untuk menyederhanakan penerapan dan pengelolaan aplikasi Kubernetes. Helm dapat dibandingkan dengan alat yum CentOS. Helm memiliki konsep dasar sebagai berikut:
Bagan: Ini adalah paket instalasi yang dikelola oleh Helm, yang berisi sumber daya paket instalasi yang perlu disebarkan. Bagan dapat dibandingkan dengan file rpm yang digunakan oleh CentOS yum.
Rilis: Ini adalah contoh penerapan bagan. Sebuah bagan dapat memiliki beberapa rilis pada kluster Kubernetes, yaitu bagan dapat diinstal beberapa kali.
Repositori: Gudang bagan, digunakan untuk menerbitkan dan menyimpan bagan
unduh:https://github.com/helm/helm/releases
Periksa status pod
- kubectl get pods --namespace=kube-system
- kubectl get pods --all-namespaces
Jika Anda ingin menghapusnya, temukan penerapannya terlebih dahulu, lalu hapus.
- 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
Jika Anda ingin melihat pod secara detail, Anda dapat menjelaskannya
kubectl describe pod rke-coredns-addon-deploy-job-qz8v6--namespace=kube-system
Versi stabil terbaru: v3.9.2
unduh
https://get.helm.sh/helm-v3.9.2-linux-amd64.tar.gz
Install
- 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
Lihat dokumentasi resmi:
Tambahkan gudang grafik
helm repo add bitnami https://charts.bitnami.com/bitnami
Lihat daftar grafik yang dapat diinstal
- 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...
Instal contoh bagan
- ##确定我们可以拿到最新的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"
Pada contoh di atas, grafik bitnami/mysql diterbitkan dengan nama mysql-1659686641. Saat kita membuat daftar semua pod, kita akan menemukan bahwa ada lebih banyak pod mysql.
Anda cukup mempelajari informasi dasar bagan ini dengan menjalankan perintah helm show chart bitnami/mysql. Atau Anda dapat menjalankan helm show all bitnami/mysql untuk mendapatkan semua informasi tentang grafik.
Setiap kali Anda menjalankan instalasi helm, versi rilis baru akan dibuat. Oleh karena itu, bagan dapat dipasang beberapa kali dalam klaster yang sama, dan masing-masing bagan dapat dikelola dan ditingkatkan secara independen.
Untuk informasi lebih lanjut tentang cara menggunakan helm, lihat:https://helm.sh/zh/docs/intro/menggunakan_helm/
Dengan Helm Anda dapat dengan mudah melihat grafik mana yang telah dipublikasikan
- 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
Copot pemasangan suatu versi
- kangming@ubuntu26:~/rancher$ helm uninstall mysql-1659686641
- release "mysql-1659686641" uninstalled
Perintah ini akan menghapus mysql-1659686641 dari Kubernetes. Perintah ini akan menghapus semua sumber daya terkait (layanan, penerapan, pod, dll.) yang terkait dengan versi ini dan bahkan riwayat versi.
Jika Anda memberikan opsi --keep-history saat menjalankan helm uninstall, Helm akan menyimpan riwayat versi. Anda dapat melihat informasi tentang versi ini melalui perintah
helm status mysql-1659686641
dokumentasi bantuan helm
helm get -h
pencarian helm
hub pencarian helm dariPusat Artefak Temukan dan daftarkan bagan helm di . Ada banyak repositori berbeda yang disimpan di Artifact Hub.
helm search repo mencari dari repositori yang Anda tambahkan (menggunakan helm repo add) ke klien helm lokal Anda. Perintah ini mencari berdasarkan data lokal dan tidak memerlukan koneksi Internet.
Gunakan perintah helm install untuk menginstal paket helm baru. Metode penggunaan yang paling sederhana hanya memerlukan penyampaian dua parameter: nama rilis yang Anda beri nama dan nama bagan yang ingin Anda instal.
helm install happy-panda bitnami/wordpress
1. Tambahkan alamat gudang Bagan
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
2. Hasilkan sertifikat definisi
Sebagai referensi:Hasilkan sertifikat SSL yang ditandatangani sendiri
Skrip pembuatan sertifikat sekali klik, pejabat peternak, simpan sebagai 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
melaksanakan
bash ./key.sh --ssl-domain=rancher.k8s-test.com--ssl-size=2048 --ssl-date=3650
File yang dihasilkan adalah sebagai berikut
3. Buat namespace rahasia
kubectl create namespace cattle-system
4. Sertifikat layanan dan ciphertext kunci pribadi
- kubectl -n cattle-system create secret tls tls-rancher-ingress
- --cert=tls.crt
- --key=tls.key
Jika Anda perlu mengganti sertifikat, Anda dapat menggunakankubectl -n cattle-system delete secret tls-rancher-ingress
untuk menghapustls-rancher-ingress
ciphertext, lalu gunakan perintah di atas untuk membuat ciphertext baru. Jika Anda menggunakan sertifikat yang ditandatangani oleh CA privat, Anda dapat mengganti sertifikat baru hanya jika sertifikat tersebut ditandatangani oleh CA yang sama dengan sertifikat saat ini.
5.ca teks sandi sertifikat
- kubectl -n cattle-system create secret generic tls-ca
- --from-file=cacerts.pem=./cacerts.pem
6. Jalankan instalasi peternak
- 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. Periksa status dan tunggu hingga peluncuran berhasil. Semua node sudah siap.
- 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
Periksa status pod. Jika pod rancher sudah siap, Anda dapat mengaksesnya melalui browser: rancher.k8s-test.com. Nama domain ini dapat dipetakan ke node penyeimbangan beban. Karena instalasi di atas memulai pod pada semua node yang berfungsi secara default. Jadi di bawah ini nginx mengkonfigurasi port 80 dan 443 dari tiga node.
- 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
Nama host di atas dapat diselesaikan ke node penyeimbang beban, yang biasanya berupa VIP yang divirtualisasikan dengan keepalive. Untuk kenyamanan, hanya satu node LB yang digunakan di sini, yang langsung diselesaikan ke 24, dan kemudian penyeimbangan beban dilakukan melalui nginx dari 24.
Lihat log rancher pod
- kubectl get pods -n cattle-system
-
- kubectl -n cattle-system logs -f rancher-5d9699f4cf-72wgp
Cukup konfigurasikan pada node penyeimbang beban 24 dan salin sertifikat yang dihasilkan oleh skrip ke 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;
- }
- }
mengakses:https://rancher.k8s-test.com
Kata sandi bootstrap adalah admin, akun login adalah admin, gunakan kode acak untuk kata sandi: 1BgV0yLx19YkIhOv
Klik lanjutkan untuk masuk ke halaman manajemen.
Lihat prasyarat sebelumnya, instal cluster k8s melalui rke, dan siapkan lingkungan helm.
1. Tambahkan gudang helm
- helm repo add rancher-latest
- https://releases.rancher.com/server-charts/latest
2. Buat ruang nama
kubectl create namespace cattle-system
3. Pilih metode sertifikat TLS yang dihasilkan Rancher untuk manajemen sertifikat.
4. Instal cert-manager. Instalasi hanya diperlukan jika Anda memilih metode sertifikat TLS yang dihasilkan 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
Verifikasi bahwa manajer sertifikat diinstal dengan benar
kubectl get pods --namespace cert-manager
5. Instal rancher dan gunakan nama domain palsu untuk nama host, sehingga rancher akan mengekspos IP tersebut.
- helm install rancher rancher-latest/rancher
- --namespace cattle-system
- --set hostname=rancher.my.org
- --set bootstrapPassword=admin
6. Tunggu hingga peluncuran berhasil
- 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
Setelah berhasil, petakan saja nama domain rancher.my.org ke tiga node untuk pengujian. Setelah berhasil melihat halaman tersebut, terlihat bahwa instalasinya OK. Nantinya, Anda hanya perlu mengonfigurasi pintu masuk terpadu penyeimbang beban. Setelah melihat halaman berikut ini membuktikan bahwa tidak ada masalah pada instalasi saat ini. Perhatikan bahwa nama domain hanya dapat digunakan untuk akses, dan halaman tidak dapat dilihat secara normal melalui akses IP.
Setelah menguji secara manual bahwa semua node dapat mengakses rancher, Anda perlu mengonfigurasi penyeimbangan beban nginx. Anda dapat langsung mengonfigurasi penerusan empat lapis, sehingga Anda tidak perlu mengonfigurasi sertifikat.
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;
- }
- }
Konfigurasikan file host klien, pengujian lolos, dan peternak dapat diakses secara normal saat mengakses portal nginx LB.