다음을 통해 공유


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

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

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

필수 구성 요소

Azure Container Registry 만들기

AKS 클러스터에서 Helm을 사용하여 애플리케이션을 실행하려면 컨테이너 이미지를 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에 액세스해야 합니다.

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

    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. az aks install-cli 명령을 사용하여 kubectl을 로컬로 설치합니다.

    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. git clone 명령을 사용하여 GitHub에서 애플리케이션을 복제합니다.

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

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

샘플 애플리케이션을 빌드하여 ACR로 푸시합니다.

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

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

참고 항목

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

Helm 차트 만들기

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

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

    참고 항목

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

    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.tagv1로 변경합니다.
    • service.typeLoadBalancer로 변경합니다.

    예시:

    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 install 명령을 사용하여 Helm 차트를 사용하여 애플리케이션을 설치합니다.

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

    kubectl get service azure-vote-front --watch
    

    서비스가 준비되면 EXTERNAL-IP 값이 <pending>에서 IP 주소로 변경됩니다. 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>을 사용하여 브라우저에서 애플리케이션의 부하 분산 장치로 이동하여 애플리케이션 예제를 확인합니다.

클러스터 삭제

  • 삭제를 확인하려면 --yes 매개 변수와 함께 az group delete 명령을 사용하고, 작업이 완료될 때까지 기다리지 않고 명령 프롬프트로 돌아가려면 --no-wait 매개 변수와 함께 이 명령을 사용하여 리소스 그룹, AKS 클러스터, Azure 컨테이너 레지스트리, ACR에 등록된 컨테이너 이미지 및 관련된 모든 리소스를 제거합니다.

    az group delete --name myResourceGroup --yes --no-wait
    

참고 항목

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

서비스 사용자로 AKS 클러스터를 만든 경우 클러스터를 삭제해도 서비스 사용자가 제거되지 않습니다. 서비스 사용자를 제거하려면 AKS 서비스 사용자 고려 사항 및 삭제를 참조하세요.

다음 단계

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