Instalación de aplicaciones existentes con Helm en Azure Kubernetes Service (AKS)
Helm es una herramienta de empaquetado de código abierto que ayuda a instalar y administrar el ciclo de vida de las aplicaciones de Kubernetes. De forma similar a los administradores de paquetes de Linux, como APT y Yum, puede utilizar Helm para administrar gráficos de Kubernetes, que son paquetes de recursos preconfigurados de Kubernetes.
En este artículo se muestra cómo configurar y usar Helm en un clúster de Kubernetes en Azure Kubernetes Service (AKS).
Antes de empezar
- Este artículo supone que ya tiene un clúster de AKS. Si necesita un clúster de AKS, cree uno mediante la CLI de Azure, Azure PowerShell o Azure Portal.
- El clúster de AKS debe tener un ACR integrado. Para detalles sobre cómo crear un clúster de AKS con un ACR integrado, consulte Autenticación con Azure Container Registry desde Azure Kubernetes Service.
- También necesita tener instalada la CLI de Helm, que es el cliente que se ejecuta en el sistema de desarrollo. Permite iniciar, detener y administrar las aplicaciones con Helm. Si usa Azure Cloud Shell, la CLI de Helm ya está instalada. Para obtener las instrucciones de instalación en su plataforma local, consulte Instalación de Helm.
Importante
Helm está diseñada para ejecutarse en nodos de Linux. Si tiene nodos de Windows Server en el clúster, debe asegurarse de que los pods de Helm solo se programan para ejecutarse en nodos de Linux. También deberá asegurarse de que todos los gráficos de Helm que instale están programados también para ejecutarse en los nodos correctos. Los comandos de este artículo utilizan selectores de nodo para asegurarse de que los pods están programados para los nodos correctos, pero no todos los gráficos de Helm pueden exponer un selector de nodo. También puede considerar otras opciones en el clúster, como los valores taints.
Comprobación de la versión de Helm
Use el comando
helm version
para comprobar que tiene Helm 3 instalado.helm version
En la siguiente salida de ejemplo se muestra la versión 3.0.0 de Helm instalada:
version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}
Instalación de una aplicación con Helm v3
Adición de repositorios de Helm
Agregue el repositorio ingress-nginx mediante el comando helm repo.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
Búsqueda de gráficos de Helm
Buscar los gráficos de Helm creados previamente mediante el comando helm search.
helm search repo ingress-nginx
En la siguiente salida de ejemplo condensada se muestran algunos de los gráficos de Helm disponibles para usar:
NAME CHART VERSION APP VERSION DESCRIPTION ingress-nginx/ingress-nginx 4.7.0 1.8.0 Ingress controller for Kubernetes using NGINX a...
Actualice la lista de gráficos mediante el comando helm repo update.
helm repo update
La siguiente salida de ejemplo muestra una actualización de repositorio correcta:
Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "ingress-nginx" chart repository Update Complete. ⎈ Happy Helming!⎈
Importación de las imágenes de gráfico de Helm en ACR
En este artículo se usa el gráfico de Helm del controlador de entrada de NGINX, que se basa en tres imágenes de contenedor.
Use
az acr import
para importar las imágenes del controlador de entrada NGINX en ACR.REGISTRY_NAME=<REGISTRY_NAME> CONTROLLER_REGISTRY=registry.k8s.io CONTROLLER_IMAGE=ingress-nginx/controller CONTROLLER_TAG=v1.8.0 PATCH_REGISTRY=registry.k8s.io PATCH_IMAGE=ingress-nginx/kube-webhook-certgen PATCH_TAG=v20230407 DEFAULTBACKEND_REGISTRY=registry.k8s.io DEFAULTBACKEND_IMAGE=defaultbackend-amd64 DEFAULTBACKEND_TAG=1.5 az acr import --name $REGISTRY_NAME --source $CONTROLLER_REGISTRY/$CONTROLLER_IMAGE:$CONTROLLER_TAG --image $CONTROLLER_IMAGE:$CONTROLLER_TAG az acr import --name $REGISTRY_NAME --source $PATCH_REGISTRY/$PATCH_IMAGE:$PATCH_TAG --image $PATCH_IMAGE:$PATCH_TAG az acr import --name $REGISTRY_NAME --source $DEFAULTBACKEND_REGISTRY/$DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG --image $DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG
Nota
Además de importar imágenes de contenedor en el ACR, también puede importar gráficos de Helm en el ACR. Para más información, consulte Inserción y extracción de gráficos de Helm en Azure Container Registry.
Ejecución de gráficos de Helm
Instale los gráficos de Helm mediante el comando helm install y especifique un nombre de versión y el nombre del gráfico que se va a instalar.
Sugerencia
En el siguiente ejemplo se crea un espacio de nombres de Kubernetes para los recursos de entrada denominado ingress-basic y está diseñada para funcionar en el espacio de nombres. Especifique un espacio de nombres para su propio entorno según sea necesario.
ACR_URL=<REGISTRY_URL> # Create a namespace for your ingress resources kubectl create namespace ingress-basic # Use Helm to deploy an NGINX ingress controller helm install ingress-nginx ingress-nginx/ingress-nginx \ --version 4.0.13 \ --namespace ingress-basic \ --set controller.replicaCount=2 \ --set controller.nodeSelector."kubernetes\.io/os"=linux \ --set controller.image.registry=$ACR_URL \ --set controller.image.image=$CONTROLLER_IMAGE \ --set controller.image.tag=$CONTROLLER_TAG \ --set controller.image.digest="" \ --set controller.admissionWebhooks.patch.nodeSelector."kubernetes\.io/os"=linux \ --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \ --set controller.admissionWebhooks.patch.image.registry=$ACR_URL \ --set controller.admissionWebhooks.patch.image.image=$PATCH_IMAGE \ --set controller.admissionWebhooks.patch.image.tag=$PATCH_TAG \ --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \ --set defaultBackend.image.registry=$ACR_URL \ --set defaultBackend.image.image=$DEFAULTBACKEND_IMAGE \ --set defaultBackend.image.tag=$DEFAULTBACKEND_TAG \ --set defaultBackend.image.digest=""
En la siguiente salida de ejemplo condensada se muestra el estado de implementación de los recursos de Kubernetes creados mediante el gráfico de Helm:
NAME: nginx-ingress LAST DEPLOYED: Wed Jul 28 11:35:29 2021 NAMESPACE: ingress-basic STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: The ingress-nginx controller has been installed. It may take a few minutes for the LoadBalancer IP to be available. You can watch the status by running 'kubectl --namespace ingress-basic get services -o wide -w nginx-ingress-ingress-nginx-controller' ...
Obtenga la EXTERNAL-IP del servicio mediante el comando
kubectl get services
.kubectl --namespace ingress-basic get services -o wide -w ingress-nginx-ingress-nginx-controller
En la salida de ejemplo siguiente se muestra la EXTERNAL-IP para el servicio ingress-nginx-ingress-nginx-controller:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR nginx-ingress-ingress-nginx-controller LoadBalancer 10.0.254.93 <EXTERNAL_IP> 80:30004/TCP,443:30348/TCP 61s app.kubernetes.io/component=controller,app.kubernetes.io/instance=nginx-ingress,app.kubernetes.io/name=ingress-nginx
Lista de versiones
Obtenga una lista de las versiones instaladas en el clúster mediante el comando
helm list
.helm list --namespace ingress-basic
En la salida de ejemplo siguiente se muestra la versión de ingress-nginx implementada en el paso anterior:
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION ingress-nginx ingress-basic 1 2021-07-28 11:35:29.9623734 -0500 CDT deployed ingress-nginx-3.34.0 0.47.0
Limpieza de recursos
La implementación de un gráfico de Helm crea recursos de Kubernetes, como pods, implementaciones y servicios.
Limpie los recursos mediante el comando helm uninstall y especifique el nombre de la versión.
helm uninstall --namespace ingress-basic ingress-nginx
En el siguiente ejemplo de salida se muestra que se ha desinstalado la versión denominada ingress-nginx:
release "nginx-ingress" uninstalled
Elimine el espacio de nombres de ejemplo completo mediante el comando
kubectl delete
y especifique el nombre.kubectl delete namespace ingress-basic
Pasos siguientes
Para más información sobre cómo administrar las implementaciones de aplicaciones de Kubernetes con Helm, consulte la documentación de Helm.
Azure Kubernetes Service