Suporte para Helm e Kustomize

O Azure Developer CLI fornece suporte para Helm e Kustomize para melhorar o processo de provisionamento e implementação do Azure Kubernetes Service (AKS). Helm e Kustomize são ferramentas que ajudam a configurar e gerir aplicações Kubernetes. Nas secções seguintes, aprende como ativar e personalizar o suporte para estas ferramentas nos seus azd modelos.

Ativar o suporte ao Helm

Para ativar o suporte Helm, certifique-se de que tem a CLI Helm instalada. Ative a flag de funcionalidade azd executando o comando azd config:

azd config set alpha.aks.helm on

Configuração e implantação do Helm

azd O suporte Helm permite-lhe definir uma lista de cartas Helm para instalar para cada azd serviço. Utilize as seções de configuração helm e k8s no ficheiro azure.yaml para definir uma lista de repositórios ou lançamentos helm para 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

O azd deploy comando gere as seguintes tarefas usando a helm secção:

  • Adiciona quaisquer repositórios de Helm referenciados e/ou atualiza-os
  • Instala os gráficos de Helm referenciados
  • Aguarda o lançamento do Helm para transitar para o estado de implantação
  • Lista os serviços e entradas relevantes definidos dentro dos recursos implementados

Uma captura de ecrã do resultado do lançamento do Helm.

Ativar o suporte Kustomize

Para ativar o suporte Kustomize, certifique-se de que tem a CLI Kustomize instalada. Ative a funcionalidade Kustomize através da flag azd usando o comando azd config.

azd config set alpha.aks.kustomize on

Configuração e implementação com o Kustomize

A funcionalidade Kustomize permite-lhe usar Kustomize como parte das implementações do Kubernetes e oferece as seguintes funcionalidades:

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

Configure as funcionalidades do Kustomize usando as seguintes azure.yaml secções:

  • dir: Caminho relativo do serviço para o diretório Kustomize que contém o ficheiro kustomization.yaml.
    • Suporta substituição de variáveis de ambiente.
  • edits: Array de expressões de edição que são aplicadas antes da implementação
    • Suporta substituição de variáveis de ambiente
  • env: Mapa dos pares chave/valor gerados antes da implementação
    • Os valores do mapa suportam substituição de variáveis de ambiente

Casos de uso

azd suporta os seguintes casos de uso Kustomize.

Implementar manifestos K8s

A configuração seguinte executa um kubectl apply -k <dir> comando que aponta para a pasta 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

Use overlays para implantar em diferentes variantes

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

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

Um caso de uso comum para modificar o kustomization.yaml é modificar os nomes/versões das imagens do contentor usados como parte da sua implementação.

O exemplo seguinte especifica uma edits configuração e define qualquer comando válido kustomize edit ... . azd interpola automaticamente quaisquer variáveis de ambiente referenciadas no 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 dentro dos mapas de configuração

Mapas de configuração ou segredos são críticos na configuração dos clusters K8s. Como o kustomize não suporta substituição direta de variáveis de ambiente , podemos usar o kustomize configMapGenerator com um .env ficheiro.

A kustomize secção de configuração suporta uma env secção onde um ou vários pares chave/valor podem ser definidos. Esta configuração gera automaticamente um ficheiro temporário .env dentro do seu diretório kustomization que pode ser usado por um configMapGenerator.

A configuração seguinte 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}

O configMapGenerator gera um mapa de configuração do K8s com o nome especificado e contém todos os pares chave/valor referenciados dentro do ficheiro .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