моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Введение в Хелм
Helm — это инструмент управления пакетами для Kubernetes, используемый для упрощения развертывания и управления приложениями Kubernetes. Helm можно сравнить с инструментом yum в CentOS. В Helm есть следующие основные концепции:
Диаграмма: это установочный пакет, управляемый Helm, который содержит ресурсы установочного пакета, которые необходимо развернуть. Диаграмму можно сравнить с RPM-файлом, используемым CentOS yum.
Релиз. Это экземпляр развертывания диаграммы. Чарт может иметь несколько выпусков в кластере Kubernetes, то есть диаграмму можно устанавливать несколько раз.
Репозиторий: хранилище диаграмм, используемое для публикации и хранения диаграмм.
скачать:https://github.com/helm/helm/releases
Проверьте состояние модулей
- kubectl get pods --namespace=kube-system
- kubectl get pods --all-namespaces
Если вы хотите удалить его, сначала найдите развертывание, а затем удалите его.
- 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
Если вы хотите просмотреть модуль подробно, вы можете описать
kubectl describe pod rke-coredns-addon-deploy-job-qz8v6--namespace=kube-system
Последняя стабильная версия: v3.9.2.
скачать
https://get.helm.sh/helm-v3.9.2-linux-amd64.tar.gz
Установить
- 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
Ознакомьтесь с официальной документацией:
Рулевое руководство | Краткое руководство
Добавить склад диаграмм
helm repo add bitnami https://charts.bitnami.com/bitnami
Посмотреть список устанавливаемых карт
- 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...
Пример схемы установки
- ##确定我们可以拿到最新的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"
В приведенном выше примере диаграмма bitnami/mysql публикуется с именем mysql-1659686641. Когда мы перечислим все модули, мы обнаружим, что модулей MySQL больше.
Вы можете просто изучить основную информацию об этой диаграмме, выполнив команду helm showchart bitnami/mysql. Или вы можете выполнить helm show all bitnami/mysql, чтобы получить всю информацию о графике.
Всякий раз, когда вы выполняете установку Helm, создается новая версия выпуска. Таким образом, диаграмму можно устанавливать несколько раз в одном кластере, и каждой из них можно независимо управлять и обновлять.
Дополнительную информацию о том, как использовать шлем, см.:https://helm.sh/zh/docs/intro/using_helm/
С помощью Helm вы можете легко увидеть, какие диаграммы были опубликованы.
- 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
Удаление версии
- kangming@ubuntu26:~/rancher$ helm uninstall mysql-1659686641
- release "mysql-1659686641" uninstalled
Эта команда удалит mysql-1659686641 из Kubernetes. Она удалит все связанные ресурсы (сервис, развертывание, модуль и т. д.), связанные с этой версией, и даже историю версий.
Если вы укажете опцию --keep-history при выполнении удаления Helm, Helm сохранит историю версий. Посмотреть информацию об этой версии можно через команду
helm status mysql-1659686641
справочная документация по Helm
helm get -h
поиск руля
хаб поиска руля изАртефакт Хаб Найдите и перечислите схемы рулевого управления в формате . В Artifact Hub хранится множество различных репозиториев.
Репозиторий поиска Helm выполняет поиск из репозиториев, которые вы добавили (с помощью добавления репозитория Helm) в локальный клиент Helm. Эта команда выполняет поиск на основе локальных данных и не требует подключения к Интернету.
Используйте команду установки helm, чтобы установить новый пакет helm. Самый простой метод использования требует передачи только двух параметров: имени выпуска, который вы назвали, и имени диаграммы, которую вы хотите установить.
helm install happy-panda bitnami/wordpress
1. Добавьте адрес склада Chart.
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
2. Создать сертификат определения
Для справки:Создать самозаверяющий SSL-сертификат
Сценарий генерации сертификата в один клик, официальный владелец ранчо, сохранить как 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
осуществлять
bash ./key.sh --ssl-domain=rancher.k8s-test.com--ssl-size=2048 --ssl-date=3650
Сгенерированный файл выглядит следующим образом
3. Создайте секретное пространство имен.
kubectl create namespace cattle-system
4. Сертификат обслуживания и зашифрованный текст закрытого ключа.
- kubectl -n cattle-system create secret tls tls-rancher-ingress
- --cert=tls.crt
- --key=tls.key
Если вам необходимо заменить сертификат, вы можете использоватьkubectl -n cattle-system delete secret tls-rancher-ingress
удалитьtls-rancher-ingress
зашифрованный текст, а затем используйте приведенную выше команду для создания нового зашифрованного текста. Если вы используете сертификат, подписанный частным центром сертификации, вы можете заменить новый сертификат только в том случае, если он подписан тем же центром сертификации, что и текущий сертификат.
Зашифрованный текст сертификата 5.ca
- kubectl -n cattle-system create secret generic tls-ca
- --from-file=cacerts.pem=./cacerts.pem
6. Выполняем установку ранчера
- 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. Проверьте статус и дождитесь успешного развертывания и готовности всех узлов.
- 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
Проверьте состояние модуля. Когда модуль владельца ранчо будет готов, вы сможете получить к нему доступ через браузер: rancher.k8s-test.com. Это доменное имя можно сопоставить с узлом балансировки нагрузки. Потому что приведенная выше установка по умолчанию запускает под на всех рабочих узлах. Итак, ниже nginx настраивает порты 80 и 443 трех узлов.
- 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
Вышеуказанное имя хоста может быть преобразовано в узел балансировки нагрузки, который обычно представляет собой виртуальный VIP, виртуализированный с помощью Keepalived. Для удобства здесь используется только один узел LB, который напрямую разрешается до 24, а затем балансировка нагрузки выполняется через nginx, равный 24.
Просмотр журналов модуля Rancher
- kubectl get pods -n cattle-system
-
- kubectl -n cattle-system logs -f rancher-5d9699f4cf-72wgp
Просто настройте его на 24 узле балансировки нагрузки и скопируйте сгенерированный скриптом сертификат на 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;
- }
- }
доступ:https://rancher.k8s-test.com
Пароль начальной загрузки — admin, учетная запись для входа — admin, в качестве пароля используйте случайный код: 1BgV0yLx19YkIhOv
Нажмите «Продолжить», чтобы войти на страницу управления.
Обратитесь к предыдущим предварительным требованиям, установите кластер k8s через rke и подготовьте среду управления.
1. Добавить склад управления
- helm repo add rancher-latest
- https://releases.rancher.com/server-charts/latest
2. Создайте пространство имен
kubectl create namespace cattle-system
3. Для управления сертификатами выберите метод сертификата TLS, созданного Rancher.
4. Установите диспетчер сертификатов. Установка требуется только в том случае, если вы выбрали метод сертификата TLS, сгенерированного 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
Убедитесь, что менеджер сертификатов установлен правильно.
kubectl get pods --namespace cert-manager
5. Установите rancher и используйте поддельное доменное имя в качестве имени хоста, чтобы rancher раскрыл IP-адрес.
- helm install rancher rancher-latest/rancher
- --namespace cattle-system
- --set hostname=rancher.my.org
- --set bootstrapPassword=admin
6. Подождите, пока развертывание завершится успешно.
- 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
В случае успеха просто сопоставьте доменное имя rancher.my.org с тремя узлами для тестирования. После успешного просмотра страницы будет показано, что установка прошла успешно. Далее вам останется только настроить единый вход балансировки нагрузки. Просмотр следующей страницы доказывает, что с текущей установкой проблем нет. Обратите внимание, что доменное имя можно использовать только для доступа, и страницу нельзя нормально просмотреть через доступ по IP.
После проверки вручную того, что все узлы имеют доступ к ранчеру, вам необходимо настроить балансировку нагрузки nginx. Вы можете напрямую настроить четырехуровневую переадресацию. Таким образом, вам не нужно настраивать сертификат.
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;
- }
- }
Настройте файл хостов клиента, тест пройдет, и к ранчеру можно будет получить обычный доступ при доступе к порталу nginx LB.