Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Introducción a timón
Helm es una herramienta de administración de paquetes para Kubernetes, que se utiliza para simplificar la implementación y administración de aplicaciones de Kubernetes. Helm se puede comparar con la herramienta yum de CentOS. Helm tiene los siguientes conceptos básicos:
Gráfico: Es un paquete de instalación administrado por Helm, que contiene los recursos del paquete de instalación que deben implementarse. El gráfico se puede comparar con el archivo rpm utilizado por CentOS yum.
Versión: es la instancia de implementación del gráfico. Un gráfico puede tener varias versiones en un clúster de Kubernetes, es decir, el gráfico se puede instalar varias veces.
Repositorio: almacén de gráficos, utilizado para publicar y almacenar gráficos.
descargar:https://github.com/helm/helm/releases
Verificar el estado de las vainas
- kubectl get pods --namespace=kube-system
- kubectl get pods --all-namespaces
Si desea eliminarlo, primero busque la implementación y luego elimínela.
- 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
Si desea ver un pod en detalle, puede describir
kubectl describe pod rke-coredns-addon-deploy-job-qz8v6--namespace=kube-system
Última versión estable: v3.9.2
descargar
https://get.helm.sh/helm-v3.9.2-linux-amd64.tar.gz
Instalar
- 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
Consulte la documentación oficial:
Agregar un almacén de gráficos
helm repo add bitnami https://charts.bitnami.com/bitnami
Ver la lista de gráficos instalables
- 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...
Instalar ejemplo de gráfico
- ##确定我们可以拿到最新的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"
En el ejemplo anterior, se publica el gráfico bitnami/mysql y su nombre es mysql-1659686641. Cuando enumeremos todos los pods, encontraremos que hay más pods de mysql.
Simplemente puede obtener la información básica de este gráfico ejecutando el comando helm show chart bitnami/mysql. O puede ejecutar helm show all bitnami/mysql para obtener toda la información sobre el gráfico.
Cada vez que ejecuta helm install, se crea una nueva versión de lanzamiento. Por lo tanto, un gráfico se puede instalar varias veces en el mismo clúster y cada uno se puede administrar y actualizar de forma independiente.
Para obtener más información sobre cómo utilizar helm, consulte:https://helm.sh/zh/docs/intro/utilizando_helm/
Con Helm puedes ver fácilmente qué gráficos se han publicado
- 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
Desinstalar una versión
- kangming@ubuntu26:~/rancher$ helm uninstall mysql-1659686641
- release "mysql-1659686641" uninstalled
Este comando desinstalará mysql-1659686641 de Kubernetes. Eliminará todos los recursos relacionados (servicio, implementación, pod, etc.) relacionados con esta versión e incluso el historial de versiones.
Si proporciona la opción --keep-history al ejecutar la desinstalación de helm, Helm guardará el historial de versiones. Puede ver información sobre esta versión a través del comando
helm status mysql-1659686641
documentación de ayuda del timón
helm get -h
búsqueda de timón
centro de búsqueda de timón desdeCentro de artefactos Busque y enumere cartas de timón en . Hay muchos repositorios diferentes almacenados en Artifact Hub.
helm search repo busca en los repositorios que agregó (usando helm repo add) a su cliente de helm local. Este comando busca basándose en datos locales y no requiere conexión a Internet.
Utilice el comando helm install para instalar un nuevo paquete de helm. El método de uso más simple solo requiere pasar dos parámetros: el nombre de la versión que nombró y el nombre del gráfico que desea instalar.
helm install happy-panda bitnami/wordpress
1. Agregar la dirección del almacén de Chart
helm repo add rancher-latest https://releases.rancher.com/server-charts/latest
2. Generar certificado de definición.
Para referencia:Generar certificado SSL autofirmado
Script de generación de certificados con un solo clic, oficial de ranchero, guardar como 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
implementar
bash ./key.sh --ssl-domain=rancher.k8s-test.com--ssl-size=2048 --ssl-date=3650
El archivo generado es el siguiente
3. Crear un espacio de nombres secreto
kubectl create namespace cattle-system
4. Certificado de servicio y texto cifrado de clave privada.
- kubectl -n cattle-system create secret tls tls-rancher-ingress
- --cert=tls.crt
- --key=tls.key
Si necesita reemplazar el certificado, puede usarkubectl -n cattle-system delete secret tls-rancher-ingress
borrartls-rancher-ingress
texto cifrado y luego use el comando anterior para crear un nuevo texto cifrado. Si está utilizando un certificado firmado por una CA privada, puede reemplazar el nuevo certificado solo si está firmado por la misma CA que el certificado actual.
Texto cifrado del certificado 5.ca
- kubectl -n cattle-system create secret generic tls-ca
- --from-file=cacerts.pem=./cacerts.pem
6. Ejecutar la instalación ranchera.
- 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. Verifique el estado y espere a que la implementación se realice correctamente y todos los nodos estén listos.
- 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
Verifique el estado del pod. Cuando el pod del ranchero esté listo, podrá acceder a él a través del navegador: rancher.k8s-test.com. Este nombre de dominio se puede asignar al nodo de equilibrio de carga. Porque la instalación anterior inicia un pod en todos los nodos en funcionamiento de forma predeterminada. Entonces, a continuación, nginx configura los puertos 80 y 443 de tres nodos.
- 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
El nombre de host anterior se puede resolver en el nodo de equilibrio de carga, que generalmente es un VIP virtualizado a través de keepalived. Por conveniencia, aquí solo se usa un nodo LB, que se resuelve directamente en 24, y luego el equilibrio de carga se realiza a través de nginx de 24.
Ver los registros del grupo de rancheros
- kubectl get pods -n cattle-system
-
- kubectl -n cattle-system logs -f rancher-5d9699f4cf-72wgp
Simplemente configúrelo en el nodo de equilibrio de carga 24 y copie el certificado generado por el script a 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;
- }
- }
acceso:https://rancher.k8s-test.com
La contraseña de Bootstrap es admin, la cuenta de inicio de sesión es admin, use un código aleatorio para la contraseña: 1BgV0yLx19YkIhOv
Haga clic en continuar para ingresar a la página de administración.
Consulte los requisitos previos anteriores, instale el clúster k8s a través de rke y prepare el entorno de helm.
1. Agregar almacén de timón
- helm repo add rancher-latest
- https://releases.rancher.com/server-charts/latest
2. Crea un espacio de nombres
kubectl create namespace cattle-system
3. Seleccione el método de certificado TLS generado por Rancher para la gestión de certificados.
4. Instale cert-manager. La instalación solo es necesaria si selecciona el método de certificado TLS generado por 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
Verifique que cert-manager esté instalado correctamente
kubectl get pods --namespace cert-manager
5. Instale rancher y use un nombre de dominio falso como nombre de host, para que rancher exponga la IP.
- helm install rancher rancher-latest/rancher
- --namespace cattle-system
- --set hostname=rancher.my.org
- --set bootstrapPassword=admin
6. Espere a que la implementación sea exitosa
- 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
Después del éxito, simplemente asigne el nombre de dominio rancher.my.org a tres nodos para realizar pruebas. Después de ver la página con éxito, se muestra que la instalación está bien. Posteriormente, solo necesitará configurar la entrada unificada de equilibrio de carga. Después de ver la siguiente página, se demuestra que no hay ningún problema con la instalación actual. Tenga en cuenta que el nombre de dominio solo se puede utilizar para el acceso y la página no se puede ver normalmente a través del acceso IP.
Después de probar manualmente que todos los nodos pueden acceder a Rancher, debe configurar el equilibrio de carga de nginx. Puede configurar directamente el reenvío de cuatro capas, de modo que no sea necesario configurar un certificado.
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;
- }
- }
Configure el archivo de hosts del cliente, la prueba pasa y se puede acceder al ranchero normalmente al acceder al portal nginx LB.