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

  1. 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...
    
  2. 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

  1. 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'
    ...
    
  2. 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.