빠른 시작: Helm을 사용하여 AKS(Azure Kubernetes Service)에서 개발

Helm 은 Kubernetes 애플리케이션의 수명 주기를 설치하고 관리하는 데 도움이 되는 오픈 소스 패키징 도구입니다. APTYum과 같은 Linux 패키지 관리자와 마찬가지로 사전 구성된 Kubernetes 리소스의 패키지인 Kubernetes 차트 관리에 Helm을 사용합니다.

이 빠른 시작에서는 Helm을 사용하여 AKS에서 애플리케이션을 패키지하고 실행합니다. Helm을 사용하여 기존 애플리케이션을 설치하는 방법에 대한 자세한 내용은 AKS에서 Helm을 사용하여 기존 애플리케이션 설치를 참조 하세요.

필수 구성 요소

Azure Container Registry 만들기

Helm을 사용하여 AKS 클러스터에서 애플리케이션을 실행하려면 ACR(Azure Container Registry)에 컨테이너 이미지를 저장해야 합니다. 레지스트리 이름은 Azure 내에서 고유해야 하며 5-50자 영숫자를 포함해야 합니다. 소문자만 허용됩니다. 기본 SKU는 스토리지와 처리량의 균형을 제공하는 개발 목적으로 비용 최적화 진입점입니다.

  1. az group create 명령을 사용하여 Azure 리소스 그룹을 만듭니 다. 다음 예제에서는 eastus 위치에 myResourceGroup이라는 리소스 그룹을 만듭니다.

    az group create --name myResourceGroup --location eastus
    
  2. az acr create 명령을 호출 하여 고유한 이름으로 Azure Container Registry를 만듭니 다. 다음 예제에서는 기본 SKU를 사용하여 myhelmacr이라는 ACR을 만듭니다.

    az acr create --resource-group myResourceGroup --name myhelmacr --sku Basic
    

    출력은 다음과 같이 압축된 예제 출력과 유사해야 합니다. 이후 단계에서 사용할 ACR의 loginServer 값을 기록해 둡다.

    {
      "adminUserEnabled": false,
      "creationDate": "2023-12-26T22:36:23.998425+00:00",
      "id": "/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/myhelmacr",
      "location": "eastus",
      "loginServer": "myhelmacr.azurecr.io",
      "name": "myhelmacr",
      "networkRuleSet": null,
      "provisioningState": "Succeeded",
      "resourceGroup": "myResourceGroup",
      "sku": {
        "name": "Basic",
        "tier": "Basic"
      },
      "status": null,
      "storageAccount": null,
      "tags": {},
      "type": "Microsoft.ContainerRegistry/registries"
    }
    

AKS 클러스터 만들기

새 AKS 클러스터는 ACR에 액세스하여 컨테이너 이미지를 끌어와 실행해야 합니다.

  • az aks create 명령을 매개 변수와 함께 --attach-acr 사용하여 AKS 클러스터를 만들어 클러스터에 ACR에 대한 액세스 권한을 부여합니다. 다음 예제에서는 myAKSCluster라는 AKS 클러스터를 만들고 myhelmacr ACR에 대한 액세스 권한을 부여합니다. ACR의 이름으로 바꿔 myhelmacr 야 합니다.

    az aks create --resource-group myResourceGroup --name myAKSCluster --location eastus --attach-acr myhelmacr --generate-ssh-keys
    

AKS 클러스터에 연결

Kubernetes 클러스터를 로컬로 연결하려면 Kubernetes 명령줄 클라이언트인 kubectl을 사용합니다. Azure Cloud Shell을 사용하는 경우 kubectl이 이미 설치되어 있습니다.

  1. kubectl az aks install-cli 명령을 사용하여 로컬로 설치합니다.

    az aks install-cli
    
  2. az aks get-credentials 명령을 사용하여 Kubernetes 클러스터에 연결하도록 구성 kubectl 합니다. 다음 명령은 myResourceGroup에서 myAKSCluster라는 AKS 클러스터에 대한 자격 증명을 가져옵니다.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    

샘플 애플리케이션 다운로드

이 빠른 시작에서는 Azure Vote 애플리케이션사용합니다.

  1. 명령을 사용하여 GitHub에서 애플리케이션을 복제합니다 git clone .

    git clone https://github.com/Azure-Samples/azure-voting-app-redis.git
    
  2. azure-vote 명령을 사용하여 디렉터리로 cd 이동합니다.

    cd azure-voting-app-redis/azure-vote/
    

ACR에 샘플 애플리케이션 빌드 및 푸시

  • az acr build 명령을 사용하여 이미지를 빌드하고 ACR에 푸시합니다. 다음 예제에서는 azure-vote-front:v1이라는 이미지를 빌드하고 myhelmacr ACR에 푸시합니다. ACR의 이름으로 바꿔 myhelmacr 야 합니다.

    az acr build --image azure-vote-front:v1 --registry myhelmacr --file Dockerfile .
    

참고 항목

Helm 차트를 ACR로 가져올 수도 있습니다. 자세한 내용은 Helm 차트를 Azure 컨테이너 레지스트리로 푸시 및 끌어오기를 참조하세요.

Helm 차트 만들기

  1. helm create 명령을 사용하여 Helm 차트를 생성합니다.

    helm create azure-vote-front
    
  2. 다음 예제와 같이 azure-vote-front/Chart.yaml을 업데이트하여 차트 리포지토리에서 https://charts.bitnami.com/bitnami redis 차트에 대한 종속성을 추가하고 업데이트 appVersion 합니다v1.

    참고 항목

    이 가이드에 표시된 컨테이너 이미지 버전은 이 예제에서 작동하도록 테스트되었지만 사용 가능한 최신 버전이 아닐 수 있습니다.

    apiVersion: v2
    name: azure-vote-front
    description: A Helm chart for Kubernetes
    
    dependencies:
      - name: redis
        version: 17.3.17
        repository: https://charts.bitnami.com/bitnami
    
    ...
    # This is the version number of the application being deployed. This version number should be
    # incremented each time you make changes to the application.
    appVersion: v1
    
  3. 명령을 사용하여 helm dependency update Helm 차트 종속성을 업데이트합니다.

    helm dependency update azure-vote-front
    
  4. 다음 변경 내용으로 azure-vote-front/values.yaml을 업데이트합니다.

    • 이미지 세부 정보, 컨테이너 포트 및 배포 이름을 설정하는 redis 섹션을 추가합니다.
    • 프런트 엔드 부분을 redis 배포에 연결하기 위한 backendName추가합니다.
    • image.repository를 .로 <loginServer>/azure-vote-front변경합니다.
    • image.tag를 .로 v1변경합니다.
    • service.type을 LoadBalancer변경합니다.

    예시:

    replicaCount: 1
    backendName: azure-vote-backend-master
    redis:
      image:
        registry: mcr.microsoft.com
        repository: oss/bitnami/redis
        tag: 6.0.8
      fullnameOverride: azure-vote-backend
      auth:
        enabled: false
    
    image:
      repository: myhelmacr.azurecr.io/azure-vote-front
      pullPolicy: IfNotPresent
      tag: "v1"
    ...
    service:
      type: LoadBalancer
      port: 80
    ...
    
  5. env azure-vote-front/templates/deployment.yaml에 섹션을 추가하여 redis 배포의 이름을 전달합니다.

    ...
          containers:
            - name: {{ .Chart.Name }}
              securityContext:
                {{- toYaml .Values.securityContext | nindent 12 }}
              image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
              imagePullPolicy: {{ .Values.image.pullPolicy }}
              env:
              - name: REDIS
                value: {{ .Values.backendName }}
    ...
    

Helm 차트 실행

  1. 명령을 사용하여 Helm 차트를 사용하여 애플리케이션을 설치합니다 helm install .

    helm install azure-vote-front azure-vote-front/
    
  2. 서비스가 공인 IP 주소를 반환하는 데 몇 분이 걸릴 수 있습니다. 인수와 kubectl get service 함께 명령을 사용하여 진행률을 모니터링합니다 --watch .

    kubectl get service azure-vote-front --watch
    

    서비스가 준비되면 값이 EXTERNAL-IP IP 주소로 <pending> 변경됩니다. 조사식 프로세스를 중지 kubectl 하려면 누릅니 CTRL+C 다.

      NAME               TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)        AGE
      azure-vote-front   LoadBalancer   10.0.18.228   <pending>       80:32021/TCP   6s
      ...
      azure-vote-front   LoadBalancer   10.0.18.228   52.188.140.81   80:32021/TCP   2m6s
    
  3. 샘플 애플리케이션을 보려면 브라우저 <EXTERNAL-IP> 에서 애플리케이션의 부하 분산 장치로 이동합니다.

클러스터 삭제

참고 항목

시스템 할당 관리 ID(이 빠른 시작의 기본 ID 옵션)를 사용하여 AKS 클러스터를 만든 경우 ID는 플랫폼에서 관리되며 제거가 필요하지 않습니다.

서비스 주체를 사용하여 AKS 클러스터를 만든 경우 클러스터를 삭제할 때 서비스 주체가 제거되지 않습니다. 서비스 주체를 제거하려면 AKS 서비스 주체 고려 사항 및 삭제를 참조 하세요.

다음 단계

Helm 사용에 대한 자세한 내용은 Helm 설명서를 참조 하세요.