Helm 및 Kustomize 지원

Azure 개발자 CLI는 AKS(Azure Kubernetes Service)에 대한 프로비저닝 및 배포 프로세스를 개선하기 위해 Helm 및 Kustomize를 지원합니다. Helm 및 Kustomize는 Kubernetes 애플리케이션을 구성하고 관리하는 데 도움이 되는 도구입니다. 앞의 섹션에서는 템플릿에서 이러한 도구 azd 에 대한 지원을 사용하도록 설정하고 사용자 지정하는 방법을 알아봅니다.

Helm 지원 활성화

Helm 지원을 사용하도록 설정하려면 Helm CLI가 설치되어 있는지 확인합니다. azd config 명령을 실행하여 azd 헬름 기능 활성화 플래그를 사용하도록 설정합니다.

azd config set alpha.aks.helm on

Helm 구성 및 배포

azd Helm 지원을 사용하면 각 azd 서비스에 설치할 Helm 차트 목록을 정의할 수 있습니다. helm 및 k8s 구성 섹션을 azure.yaml 파일에서 사용하여 설치할 Helm 리포지토리나 릴리스의 목록을 정의합니다.

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

이 azd deploy 명령은 helm 섹션을 사용하여 다음 작업을 처리합니다.

  • 참조된 Helm 리포지토리를 추가하고/또는 업데이트합니다.
  • 참조된 Helm 차트를 설치합니다.
  • Helm 릴리스가 배포된 상태로 전환될 때까지 기다립니다.
  • 배포된 리소스 내에 정의된 관련 서비스 및 인그레스(ingress)를 나열합니다.

Helm 배포 출력의 스크린샷.

Kustomize 지원 사용

Kustomize 지원을 사용하도록 설정하려면 Kustomize CLI가 설치되어 있는지 확인합니다. azd 명령을 사용하여 Kustomize 기능 플래그를 활성화합니다: azd config.

azd config set alpha.aks.kustomize on

Kustomize 구성 및 배포

Kustomize 기능을 사용하면 Kubernetes 배포의 일부로 Kustomize를 사용할 수 있으며 다음 기능을 제공합니다.

  • base 및 variant 구성을 지원합니다
  • edits 배포 전에 실행할 수 있는
  • configMapGenerator와 azd 환경에서 함께

다음 azure.yaml 섹션을 사용하여 Kustomize 기능을 구성합니다.

  • dir: 서비스에서 kustomization.yaml 파일이 포함된 Kustomize 디렉터리에 대한 상대 경로입니다.
    • 환경 변수 대체를 지원합니다.
  • edits: 배포 전에 적용되는 편집 식 배열
    • 환경 변수 대체 지원
  • env: 배포 전에 생성된 키/값 쌍의 맵
    • 지도 값은 환경 변수 대체를 지원합니다.

사용 사례

azd 는 다음 Kustomize 사용 사례를 지원합니다.

K8s 매니페스트 배포

다음 구성은 다음을 kubectl apply -k <dir> 포함하는 매니페스트 폴더를 가리키는 명령을 수행합니다.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

오버레이를 사용하여 다양한 변형으로 배포

이 사용 사례는 일반적으로 다른 단계 또는 환경(예: devtestprod및)에 배포하기 위한 사용자 지정 구성을 포함하는 데 사용됩니다. 다음 예제에서 사용자는 kustomize 디렉터리 내에서 환경 변수를 지정 ${AZURE_ENV_NAME} 하여 azd 환경을 기본 오버레이 규칙으로 자동으로 사용할 수 있습니다.

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

배포 전에 수정 kustomization.yaml

일반적인 kustomization.yaml 수정 사용 사례는 배포 시 사용되는 컨테이너 이미지 이름 또는 버전을 수정하는 것입니다.

다음 예제에서는 구성을 edits 지정하고 유효한 kustomize edit ... 명령을 설정합니다. azd는 edit 명령 내에서 참조되는 모든 환경 변수를 자동으로 대입합니다.

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

구성 맵 내에서 환경 변수 사용 azd

구성 맵 또는 비밀은 K8s 클러스터를 구성하는 데 중요합니다. kustomize는 직접 환경 변수 대체를 지원하지 않으므로 파일과 함께 kustomize configMapGenerator 를 .env 사용할 수 있습니다.

구성 섹션은 kustomize 섹션을 지원하며, env에서는 하나 이상의 키/값 쌍을 정의할 수 있습니다. 이 구성은 kustomization 디렉터리 내에서 `.env` 파일을 임시로 자동 생성하여 `configMapGenerator`에서 사용할 수 있도록 합니다.

다음 구성은 지정된 키/값 쌍을 사용하여 .env 만듭니다.

# 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는 지정된 이름으로 K8s 구성 맵을 생성하고 .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