Supporto di Helm e Kustomize

L'interfaccia della riga di comando per sviluppatori di Azure offre supporto per Helm e Kustomize per migliorare il processo di provisioning e distribuzione su Azure Kubernetes Service (AKS). Helm e Kustomize sono strumenti che consentono di configurare e gestire le applicazioni Kubernetes. Nelle sezioni successive si apprenderà come abilitare e personalizzare il supporto per questi strumenti nei azd modelli.

Abilitare il supporto Helm

Per abilitare il supporto Helm, accertarsi di avere installato la CLI Helm. Abilitare il azd flag di funzionalità helm eseguendo il azd config comando :

azd config set alpha.aks.helm on

Configurazione e distribuzione Helm

azd Il supporto Helm consente di definire un elenco di grafici Helm da installare per ogni azd servizio. Usare le sezioni di configurazione helm e k8s nel file azure.yaml per definire un elenco di repository Helm o release da installare.

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

Il azd deploy comando gestisce le attività seguenti usando la helm sezione :

  • Aggiunge eventuali repository Helm a cui si fa riferimento e/o li aggiorna
  • Installa i grafici Helm a cui si fa riferimento
  • Attende che il rilascio di Helm passi a uno stato distribuito
  • Elenca i servizi e i dati in ingresso pertinenti definiti all'interno delle risorse distribuite

Screenshot dell'output della distribuzione Helm.

Abilitare il supporto di Kustomize

Per abilitare il supporto di Kustomize, assicurarsi di avere installato l'interfaccia della riga di comando kustomize. Abilitare la funzionalità Kustomize mediante il flag di comando azdazd config.

azd config set alpha.aks.kustomize on

Kustomize: configurazione e distribuzione

La funzionalità Kustomize consente di usare Kustomize come parte delle distribuzioni kubernetes e offre le funzionalità seguenti:

  • Supporta base e variant configurazioni
  • edits che può essere eseguito prima delle distribuzioni
  • configMapGenerator in ambienti azd

Configurare le funzionalità kustomize usando le sezioni seguenti azure.yaml :

  • dir: percorso relativo dal servizio alla directory di Kustomize che contiene un file kustomization.yaml.
    • Supporta la sostituzione delle variabili di ambiente.
  • edits: matrice di espressioni di modifica applicate prima della distribuzione
    • Supporta la sostituzione delle variabili di ambiente
  • env: mappa delle coppie chiave/valore generate prima della distribuzione
    • I valori di mapping supportano la sostituzione delle variabili di ambiente

Casi d'uso

azd supporta i seguenti casi d'uso Kustomize.

Distribuire manifesti K8s

La configurazione seguente esegue un kubectl apply -k <dir> comando che punta alla cartella manifesti che contiene un oggetto 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

Usare le sovrimpressioni per la distribuzione in con varianti diverse

Questo caso d'uso viene in genere usato per avere configurazioni personalizzate per la distribuzione in diverse fasi o ambienti, ad esempio dev, test e prod. Nell'esempio seguente l'utente può specificare la ${AZURE_ENV_NAME} variabile di ambiente all'interno della directory kustomize per usare automaticamente gli ambienti azd come convenzione di sovrapposizione predefinita:

# 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}

Modificare kustomization.yaml prima della distribuzione

Un caso d'uso comune per la modifica di kustomization.yaml è la modifica dei nomi o delle versioni dell'immagine del contenitore usati come parte della distribuzione.

Nell'esempio seguente viene specificata una edits configurazione e viene impostato qualsiasi comando valido kustomize edit ... . azd interpola automaticamente tutte le variabili di ambiente a cui si fa riferimento all'interno del 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}

Usare azd le variabili di ambiente all'interno delle mappe di configurazione

Le mappe di configurazione o i segreti sono fondamentali per la configurazione dei cluster K8s. Poiché kustomize non supporta alcuna sostituzione diretta di variabili di ambiente , è possibile usare kustomize configMapGenerator con un .env file.

La kustomize sezione di configurazione supporta una env sezione in cui è possibile definire una o più coppie chiave/valore. Questa configurazione genera automaticamente un file temporaneo .env all'interno della directory kustomization che può essere usato da un configMapGenerator.

La configurazione seguente crea un oggetto .env con le coppie chiave/valore specificate.

# 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 una mappa di configurazione K8s con il nome specificato e contiene tutte le coppie chiave/valore a cui si fa riferimento all'interno del .env file.

# kustomization.yaml

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

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

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