Suporte para Helm e Kustomize

A CLI do Desenvolvedor do Azure fornece suporte para Helm e Kustomize melhorarem o processo de provisionamento e implantação no AKS (Serviço de Kubernetes do Azure). Helm e Kustomize são ferramentas que ajudam você a configurar e gerenciar aplicativos kubernetes. Nas seções a seguir, você aprenderá a habilitar e personalizar o suporte para essas ferramentas em seus azd modelos.

Habilitar o suporte do Helm

Para habilitar o suporte do Helm, verifique se você tem a CLI do Helm instalada. Habilite o sinalizador de recursos do azd helm executando o azd config comando:

azd config set alpha.aks.helm on

Configuração e implantação do Helm

azd O suporte ao Helm permite que você defina uma lista de gráficos do Helm a serem instalados para cada azd serviço. Use as seções de configuração helm e k8s no arquivo azure.yaml para definir uma lista de repositórios ou releases do helm a serem instalados.

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

O azd deploy comando manipula as seguintes tarefas usando a helm seção:

  • Adiciona todos os repositórios do Helm referenciados e/ou os atualiza
  • Instala os gráficos do Helm referenciados
  • Aguarda que um lançamento do Helm faça a transição para um estado implantado
  • Lista serviços e entradas relevantes definidos nos recursos implantados

Uma captura de tela da saída de implantação do Helm.

Habilitar o suporte ao Kustomize

Para habilitar o suporte ao Kustomize, verifique se você tem a CLI do Kustomize instalada. Habilite o azd sinalizador de recurso Kustomize usando o azd config comando:

azd config set alpha.aks.kustomize on

Configuração e implantação do Kustomize

O recurso Kustomize permite que você use o Kustomize como parte das implantações do Kubernetes e fornece os seguintes recursos:

  • Suporta base e variant configurações
  • edits que pode ser executado antes das implantações
  • configMapGenerator em ambientes azd

Configure os recursos do Kustomize usando as seguintes azure.yaml seções:

  • dir: caminho relativo do serviço para o diretório Kustomize que contém um arquivo kustomization.yaml.
    • Dá suporte à substituição de variável de ambiente.
  • edits: matriz de expressões de edição que são aplicadas antes da implantação
    • Dá suporte à substituição de variável de ambiente
  • env: mapa de pares chave/valor gerados antes da implantação
    • Valores de mapa dão suporte à substituição de variável de ambiente

Casos de uso

azd dá suporte aos seguintes casos de uso do Kustomize.

Implantar manifestos K8s

A configuração a seguir executa o comando kubectl apply -k <dir> que aponta para a pasta de manifests que contém um 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

Usar camadas sobrepostas para implantar com variantes diferentes

Esse caso de uso normalmente é usado para ter configurações personalizadas para implantação em diferentes estágios ou ambientes, como dev, test e prod. No exemplo a seguir, o usuário pode especificar a ${AZURE_ENV_NAME} variável de ambiente no diretório kustomize para usar automaticamente os ambientes do azd como sua convenção de sobreposição padrão:

# 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 da implantação

Um caso de uso comum para modificar o kustomization.yaml é alterar os nomes/versões de imagens de contêiner que são utilizados como parte da sua implantação.

O exemplo a seguir especifica uma configuração edits e define qualquer comando válido kustomize edit ... . azd interpola automaticamente todas as variáveis de ambiente referenciadas dentro do 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}

Usar azd variáveis de ambiente em mapas de configuração

Mapas ou segredos de configuração são críticos na configuração de seus clusters K8s. Como o kustomize não dá suporte a nenhuma substituição direta de variável de ambiente , podemos usar o kustomize configMapGenerator com um .env arquivo.

A kustomize seção de configuração dá suporte a uma env seção em que um ou muitos pares chave/valor podem ser definidos. Essa configuração gera automaticamente um arquivo temporário .env no diretório kustomization que pode ser usado por um configMapGenerator.

A configuração a seguir cria um .env com os pares chave/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}

Gera um mapa de configuração K8s com o nome especificado e que contém todos os pares chave/valor referenciados no arquivo .env.

# kustomization.yaml

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

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

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