다음을 통해 공유


AKS(Azure Kubernetes Service)에서 Helm을 사용하여 기존 애플리케이션 설치

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

이 문서에서는 AKS(Azure Kubernetes Service)의 Kubernetes 클러스터에서 Helm을 구성하고 사용하는 방법을 보여 줍니다.

시작하기 전에

  • 이 문서에서는 기존 AKS 클러스터가 있다고 가정합니다. AKS 클러스터가 필요한 경우 Azure CLI, Azure PowerShell 또는 Azure Portal을 사용하여 클러스터를 만듭니다.
  • AKS 클러스터에는 통합 ACR이 있어야 합니다. 통합 ACR을 사용하여 AKS 클러스터를 만드는 방법에 대한 자세한 내용은 Azure Kubernetes Service에서 Azure Container Registry로 인증을 참조 하세요.
  • 또한 개발 시스템에서 실행되는 클라이언트인 Helm CLI가 설치되어 있어야 합니다. Helm을 사용하여 애플리케이션을 시작, 중지 및 관리할 수 있습니다. Azure Cloud Shell을 사용하는 경우 Helm CLI가 이미 설치되어 있습니다. 로컬 플랫폼에 대한 설치 지침은 Helm 설치를 참조하세요.

Important

Helm은 Linux 노드에서 실행하기 위해 사용됩니다. 클러스터에 Windows Server 노드가 있는 경우 Helm Pod가 Linux 노드에서만 실행되도록 예약해야 합니다. 또한 설치한 Helm 차트도 올바른 노드에서 실행되도록 예약해야 합니다. 이 문서의 명령은 노드 선택기를 사용하여 Pod가 올바른 노드로 예약되도록 하지만 일부 Helm 차트가 노드 선택기를 노출할 수 있는 것은 아닙니다. 또한 taint와 같은 클러스터의 다른 옵션을 사용하는 것을 고려할 수 있습니다.

Helm 버전 확인

  • 명령을 helm version 사용하여 Helm 3이 설치되어 있는지 확인합니다.

    helm version
    

    다음 예제 출력은 Helm 버전 3.0.0이 설치된 것을 보여줍니다.

    version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"}
    

Helm v3를 사용하여 애플리케이션 설치

Helm 리포지토리 추가

Helm 차트 찾기

  1. helm 검색 명령을 사용하여 미리 생성된 Helm 차트를 검색 합니다.

    helm search repo ingress-nginx
    

    다음 압축된 예제 출력에서는 사용할 Helm 차트의 일부를 보여줍니다.

    NAME                            CHART VERSION   APP VERSION     DESCRIPTION                                       
    ingress-nginx/ingress-nginx     4.7.0           1.8.0           Ingress controller for Kubernetes using NGINX a...
    
  2. helm 리포지토리 업데이트 명령을 사용하여 차트 목록을 업데이트 합니다.

    helm repo update
    

    다음 예제 출력은 성공적인 리포지토리 업데이트를 보여줍니다.

    Hang tight while we grab the latest from your chart repositories...
    ...Successfully got an update from the "ingress-nginx" chart repository
    Update Complete. ⎈ Happy Helming!⎈
    

Helm 차트 이미지를 ACR로 가져오기

이 문서에서는 세 개의 컨테이너 이미지를 사용하는 NGINX 수신 컨트롤러 Helm 차트를 사용합니다.

  • NGINX 수신 컨트롤러 이미지를 ACR로 가져오는 데 사용합니다 az acr import .

    REGISTRY_NAME=<REGISTRY_NAME>
    CONTROLLER_REGISTRY=registry.k8s.io
    CONTROLLER_IMAGE=ingress-nginx/controller
    CONTROLLER_TAG=v1.8.0
    PATCH_REGISTRY=registry.k8s.io
    PATCH_IMAGE=ingress-nginx/kube-webhook-certgen
    PATCH_TAG=v20230407
    DEFAULTBACKEND_REGISTRY=registry.k8s.io
    DEFAULTBACKEND_IMAGE=defaultbackend-amd64
    DEFAULTBACKEND_TAG=1.5
    
    az acr import --name $REGISTRY_NAME --source $CONTROLLER_REGISTRY/$CONTROLLER_IMAGE:$CONTROLLER_TAG --image $CONTROLLER_IMAGE:$CONTROLLER_TAG
    az acr import --name $REGISTRY_NAME --source $PATCH_REGISTRY/$PATCH_IMAGE:$PATCH_TAG --image $PATCH_IMAGE:$PATCH_TAG
    az acr import --name $REGISTRY_NAME --source $DEFAULTBACKEND_REGISTRY/$DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG --image $DEFAULTBACKEND_IMAGE:$DEFAULTBACKEND_TAG
    

    참고 항목

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

Helm 차트 실행

  1. helm 설치 명령을 사용하여 Helm 차트를 설치 하고 설치할 차트의 릴리스 이름과 이름을 지정합니다.

    다음 예제에서는 수신-기본이라는 수신 리소스에 대한 Kubernetes 네임스페이스를 만들고 해당 네임스페이스 내에서 작동합니다. 필요에 따라 사용자 환경에 대한 네임스페이스를 지정합니다.

    ACR_URL=<REGISTRY_URL>
    
    # Create a namespace for your ingress resources
    kubectl create namespace ingress-basic
    
    # Use Helm to deploy an NGINX ingress controller
    helm install ingress-nginx ingress-nginx/ingress-nginx \
        --version 4.0.13 \
        --namespace ingress-basic \
        --set controller.replicaCount=2 \
        --set controller.nodeSelector."kubernetes\.io/os"=linux \
        --set controller.image.registry=$ACR_URL \
        --set controller.image.image=$CONTROLLER_IMAGE \
        --set controller.image.tag=$CONTROLLER_TAG \
        --set controller.image.digest="" \
        --set controller.admissionWebhooks.patch.nodeSelector."kubernetes\.io/os"=linux \
        --set controller.service.annotations."service\.beta\.kubernetes\.io/azure-load-balancer-health-probe-request-path"=/healthz \
        --set controller.admissionWebhooks.patch.image.registry=$ACR_URL \
        --set controller.admissionWebhooks.patch.image.image=$PATCH_IMAGE \
        --set controller.admissionWebhooks.patch.image.tag=$PATCH_TAG \
        --set defaultBackend.nodeSelector."kubernetes\.io/os"=linux \
        --set defaultBackend.image.registry=$ACR_URL \
        --set defaultBackend.image.image=$DEFAULTBACKEND_IMAGE \
        --set defaultBackend.image.tag=$DEFAULTBACKEND_TAG \
        --set defaultBackend.image.digest=""
    

    다음 압축된 예제 출력은 Helm 차트에서 만든 Kubernetes 리소스의 배포 상태 보여 줍니다.

    NAME: nginx-ingress
    LAST DEPLOYED: Wed Jul 28 11:35:29 2021
    NAMESPACE: ingress-basic
    STATUS: deployed
    REVISION: 1
    TEST SUITE: None
    NOTES:
    The ingress-nginx controller has been installed.
    It may take a few minutes for the LoadBalancer IP to be available.
    You can watch the status by running 'kubectl --namespace ingress-basic get services -o wide -w nginx-ingress-ingress-nginx-controller'
    ...
    
  2. 명령을 사용하여 서비스의 EXTERNAL-IP를 가져옵니다kubectl get services.

    kubectl --namespace ingress-basic get services -o wide -w ingress-nginx-ingress-nginx-controller
    

    다음 예제 출력은 ingress-nginx-ingress-nginx-controller 서비스에 대한 EXTERNAL-IP를 보여줍니다.

    NAME                                     TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)                      AGE   SELECTOR
    nginx-ingress-ingress-nginx-controller   LoadBalancer   10.0.254.93   <EXTERNAL_IP>   80:30004/TCP,443:30348/TCP   61s   app.kubernetes.io/component=controller,app.kubernetes.io/instance=nginx-ingress,app.kubernetes.io/name=ingress-nginx
    

릴리스 나열

  • 명령을 사용하여 helm list 클러스터에 설치된 릴리스 목록을 가져옵니다.

    helm list --namespace ingress-basic
    

    다음 예제 출력은 이전 단계에서 배포된 수신-nginx 릴리스를 보여줍니다.

    NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART                   APP VERSION
    ingress-nginx   ingress-basic   1               2021-07-28 11:35:29.9623734 -0500 CDT   deployed        ingress-nginx-3.34.0    0.47.0
    

리소스 정리

Helm 차트를 배포하면 Pod, 배포 및 서비스와 같은 Kubernetes 리소스가 만들어집니다.

  • helm 제거 명령을 사용하여 리소스를 정리 하고 릴리스 이름을 지정합니다.

    helm uninstall --namespace ingress-basic ingress-nginx
    

    다음 예제 출력은 ingress-nginx라는 릴리스가 제거되었음을 보여줍니다.

    release "nginx-ingress" uninstalled
    
  • 명령을 사용하여 리소스와 함께 전체 샘플 네임스페이 kubectl delete 스를 삭제하고 네임스페이스 이름을 지정합니다.

    kubectl delete namespace ingress-basic
    

다음 단계

Helm을 사용하여 Kubernetes 애플리케이션 배포를 관리하는 방법에 대한 자세한 내용은 Helm 설명서를 참조하세요.