Compatibilidad con Helm y Kustomize

La CLI para desarrolladores de Azure proporciona compatibilidad con Helm y Kustomize para mejorar el proceso de aprovisionamiento e implementación en Azure Kubernetes Service (AKS). Helm y Kustomize son herramientas que le ayudan a configurar y administrar aplicaciones de Kubernetes. En las secciones siguientes, aprenderá a habilitar y personalizar la compatibilidad con estas herramientas en las azd plantillas.

Habilitación de la compatibilidad con Helm

Para habilitar la compatibilidad con Helm, asegúrese de que tiene instalada la CLI de Helm. Habilite la bandera de características de azd ejecutando el comando azd config.

azd config set alpha.aks.helm on

Configuración y despliegue de Helm

azd La compatibilidad con Helm le permite definir una lista de gráficos de Helm que se van a instalar para cada azd servicio. Utilice las secciones de configuración helm y k8s en el archivo azure.yaml para definir una lista de repositorios o lanzamientos de Helm que se van a instalar.

name: todo-nodejs-mongo-aks
metadata:
  template: todo-nodejs-mongo-aks@0.0.1-beta
services:
  argocd:
    host: aks
    k8s:
      namespace: argo
      service:
        name: argocd-server
      helm:
        repositories:
          - name: argo
            url: https://argoproj.github.io/argo-helm
        releases:
          - name: argocd
            chart: argo/argo-cd
            version: 5.51.4
  jupyterhub:
    host: aks
    k8s:
      namespace: jupyterhub
      service:
        name: proxy-public
      helm:
        repositories:
          - name: jupyterhub
            url: https://hub.jupyter.org/helm-chart/
        releases:
          - name: jupyterhub
            chart: jupyterhub/jupyterhub
            version: 3.1.0

El azd deploy comando controla las siguientes tareas mediante la helm sección :

  • Agrega los repositorios de Helm a los que se hace referencia o los actualiza.
  • Instala los gráficos de Helm a los que se hace referencia.
  • Espera a que la versión de Helm pase a un estado implementado.
  • Enumera los servicios y entradas pertinentes definidos dentro de los recursos implementados.

Captura de pantalla de la salida de implementación de Helm.

Habilitación de la compatibilidad con Kustomize

Para habilitar la compatibilidad con Kustomize, asegúrese de que tiene instalada la CLI de Kustomize. Habilite la azd marca de características Kustomize mediante el azd config comando :

azd config set alpha.aks.kustomize on

Configuración e implementación de Kustomize

La característica Kustomize permite usar Kustomize como parte de las implementaciones de Kubernetes y proporciona las siguientes características:

  • Admite las configuraciones base y variant
  • edits que se puede ejecutar antes de las implementaciones
  • configMapGenerator con azd entornos

Configure las características de Kustomize mediante las secciones siguientes azure.yaml :

  • dir: ruta de acceso relativa del servicio al directorio Kustomize que contiene un kustomization.yaml archivo.
    • Admite la sustitución de variables de entorno.
  • edits: matriz de expresiones de edición que se aplican antes de la implementación
    • Admite la sustitución de variables de entorno
  • env: Mapa de pares clave-valor generados antes de la implementación
    • Los valores de asignación admiten la sustitución de variables de entorno

Casos de uso

azd admite los siguientes casos de uso de Kustomize.

Implementación de manifiestos K8s

La siguiente configuración ejecuta el comando kubectl apply -k <dir> que señala la carpeta de su manifiesto que contiene un kustomization.yaml:

# azure.yaml

name: todo-nodejs-mongo-aks
metadata:
  template: todo-nodejs-mongo-aks@0.0.1-beta
services:
  api:
    project: ./src/api
    language: js
    host: aks
    k8s:
      kustomize:
        dir: ./kustomize/base

Uso de capas superpuestas para desplegar con diferentes variantes

Este caso de uso se usa normalmente para tener configuraciones personalizadas para la implementación en diferentes fases o entornos, como dev, test y prod. En el ejemplo siguiente, el usuario puede especificar la ${AZURE_ENV_NAME} variable de entorno dentro del directorio kustomize para usar automáticamente los entornos azd como convención de superposición predeterminada:

# azure.yaml

name: todo-nodejs-mongo-aks
metadata:
  template: todo-nodejs-mongo-aks@0.0.1-beta
services:
  api:
    project: ./src/api
    language: js
    host: aks
    k8s:
      kustomize:
        dir: ./kustomize/overlays/${AZURE_ENV_NAME}

Modificar kustomization.yaml antes de la implementación

Un caso de uso común para modificar el kustomization.yaml es cambiar los nombres o versiones de la imagen de contenedor que se utilizan como parte de la implementación.

En el ejemplo siguiente se especifica una edits configuración y se establece cualquier comando válido kustomize edit ... . azd interpola automáticamente las variables de entorno a las que se hace referencia en el edit comando .

# azure.yaml

name: todo-nodejs-mongo-aks
metadata:
  template: todo-nodejs-mongo-aks@0.0.1-beta
services:
  api:
    project: ./src/api
    language: js
    host: aks
    k8s:
      kustomize:
        dir: ./kustomize/overlays/${AZURE_ENV_NAME}
        edits:
          - set image todo-api=${SERVICE_API_IMAGE_NAME}

Uso de azd variables de entorno en mapas de configuración

Los mapas de configuración o los secretos son fundamentales para configurar los clústeres K8s. Dado que kustomize no admite ninguna sustitución directa de variables de entorno , podemos usar kustomize configMapGenerator con un .env archivo .

La kustomize sección de configuración admite una env sección en la que se pueden definir uno o varios pares clave-valor. Esta configuración genera automáticamente un archivo temporal .env dentro del directorio de kustomization que puede ser utilizado por un configMapGenerator.

La siguiente configuración crea un .env con los pares clave-valor especificados.

# azure.yaml

name: todo-nodejs-mongo-aks
metadata:
  template: todo-nodejs-mongo-aks@0.0.1-beta
services:
  api:
    project: ./src/api
    language: js
    host: aks
    k8s:
      kustomize:
        dir: ./kustomize/overlays/${AZURE_ENV_NAME}
        edits:
          - set image todo-api=${SERVICE_API_IMAGE_NAME}
        env:
          AZURE_AKS_IDENTITY_CLIENT_ID: ${AZURE_AKS_IDENTITY_CLIENT_ID}
          AZURE_KEY_VAULT_ENDPOINT: ${AZURE_KEY_VAULT_ENDPOINT}
          APPLICATIONINSIGHTS_CONNECTION_STRING: ${APPLICATIONINSIGHTS_CONNECTION_STRING}

configMapGenerator genera un mapa de configuración de K8s con el nombre especificado y contiene todos los pares clave-valor a los que se hace referencia en el .env archivo.

# kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - deployment.yaml
  - service.yaml
  - ingress.yaml

configMapGenerator:
  - name: todo-web-config
    envs:
      - .env