자습서: Azure Arc 지원 Kubernetes에서 Azure 컨테이너 앱 활성화(미리 보기)


Azure Arc 지원 Kubernetes 클러스터를 사용하면 온-프레미스 또는 클라우드 Kubernetes 클러스터에서 Container Apps 사용 사용자 지정 위치를 만들어 다른 지역과 마찬가지로 Azure Container Apps 애플리케이션을 배포할 수 있습니다.

이 자습서에서는 Arc 지원 Kubernetes 클러스터에서 Azure Container Apps를 사용하도록 설정하는 방법을 보여 줍니다. 이 자습서에서는 다음 작업을 수행합니다.

  • 연결된 클러스터를 만듭니다.
  • Log Analytics 작업 영역을 만듭니다.
  • Container Apps 확장을 설치합니다.
  • 사용자 지정 위치를 만듭니다.
  • Azure Container Apps 연결 환경을 만듭니다.

참고 항목

미리 보기 중에 Arc의 Azure Container Apps는 프로덕션 구성에서 지원되지 않습니다. 이 문서에서는 평가 목적으로만 구성 예제를 제공합니다.

이 자습서에서는 AKS(Azure Kubernetes Service)를 사용하여 처음부터 환경을 설정하기 위한 구체적인 지침을 제공합니다. 그러나 프로덕션 워크로드의 경우 Azure에서 이미 관리되는 Azure Arc를 AKS 클러스터에서 사용하도록 설정하지 않는 것이 좋습니다.

필수 조건

설정

다음과 같은 Azure CLI 확장을 설치합니다.

az extension add --name connectedk8s --upgrade --yes
az extension add --name k8s-extension --upgrade --yes
az extension add --name customlocation --upgrade --yes
az extension add --name containerapp  --upgrade --yes

필요한 네임스페이스를 등록합니다.

az provider register --namespace Microsoft.ExtendedLocation --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
az provider register --namespace Microsoft.App --wait
az provider register --namespace Microsoft.OperationalInsights --wait

Kubernetes 클러스터 배포에 따라 환경 변수를 설정합니다.

GROUP_NAME="my-arc-cluster-group"
AKS_CLUSTER_GROUP_NAME="my-aks-cluster-group"
AKS_NAME="my-aks-cluster"
LOCATION="eastus"

연결된 클러스터 만들기

다음 단계는 서비스를 이해하는 데 도움이 되지만 프로덕션 배포의 경우 조치가 아닌 설명으로 간주되어야 합니다. Azure Arc 지원 Kubernetes 클러스터 생성에 대한 일반적인 지침은 빠른 시작: 기존 Kubernetes 클러스터를 Azure Arc에 연결을 참조하세요.

  1. Azure Kubernetes Service에서 클러스터를 만듭니다.

    az group create --name $AKS_CLUSTER_GROUP_NAME --location $LOCATION
    az aks create \
       --resource-group $AKS_CLUSTER_GROUP_NAME \
       --name $AKS_NAME \
       --enable-aad \
       --generate-ssh-keys
    
  2. kubeconfig 파일을 가져온 다음 클러스터에 대한 연결을 테스트합니다. 기본적으로 kubeconfig 파일은 ~/.kube/config에 저장됩니다.

    az aks get-credentials --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin
    
    kubectl get ns
    
  3. Azure Arc 리소스를 포함할 리소스 그룹을 만듭니다.

    az group create --name $GROUP_NAME --location $LOCATION
    
  4. 생성한 클러스터를 Azure Arc에 연결합니다.

    CLUSTER_NAME="${GROUP_NAME}-cluster" # Name of the connected cluster resource
    
    az connectedk8s connect --resource-group $GROUP_NAME --name $CLUSTER_NAME
    
  5. 다음 명령을 사용하여 연결의 유효성을 검사합니다. provisioningState 속성이 Succeeded로 표시되어야 합니다. 그렇지 않은 경우 1분 후에 명령을 다시 실행합니다.

    az connectedk8s show --resource-group $GROUP_NAME --name $CLUSTER_NAME
    

Log Analytics 작업 영역 만들기

Log Analytics 작업 영역은 Azure Arc 지원 Kubernetes 클러스터에서 실행되는 Container Apps 애플리케이션 로그에 대한 액세스를 제공합니다. Log Analytics 작업 영역은 선택 사항이지만 권장됩니다.

  1. Log Analytics 작업 영역을 만듭니다.

    WORKSPACE_NAME="$GROUP_NAME-workspace" # Name of the Log Analytics workspace
    
    az monitor log-analytics workspace create \
        --resource-group $GROUP_NAME \
        --workspace-name $WORKSPACE_NAME
    
  2. 다음 명령을 실행하여 기존 Log Analytics 작업 영역에 대한 인코딩된 작업 영역 ID와 공유 키를 가져옵니다. 두 항목은 다음 단계에서 필요합니다.

    LOG_ANALYTICS_WORKSPACE_ID=$(az monitor log-analytics workspace show \
        --resource-group $GROUP_NAME \
        --workspace-name $WORKSPACE_NAME \
        --query customerId \
        --output tsv)
    LOG_ANALYTICS_WORKSPACE_ID_ENC=$(printf %s $LOG_ANALYTICS_WORKSPACE_ID | base64 -w0) # Needed for the next step
    LOG_ANALYTICS_KEY=$(az monitor log-analytics workspace get-shared-keys \
        --resource-group $GROUP_NAME \
        --workspace-name $WORKSPACE_NAME \
        --query primarySharedKey \
        --output tsv)
    LOG_ANALYTICS_KEY_ENC=$(printf %s $LOG_ANALYTICS_KEY | base64 -w0) # Needed for the next step
    

Container Apps 확장을 설치합니다

Important

AKS-HCI에 배포하는 경우 확장을 설치하기 전에 HAProxy 또는 사용자 지정 부하 분산 장치를 설치해야 합니다.

  1. Container Apps 확장의 원하는 이름, 리소스를 프로비전해야 하는 클러스터 네임스페이스 및 Azure Container Apps 환경의 이름에 대해 다음 환경 변수를 설정합니다. <connected-environment-name>의 고유한 이름을 선택합니다. 연결된 환경 이름은 Azure Container Apps 연결된 환경에서 만들 앱의 도메인 이름의 일부가 됩니다.

    EXTENSION_NAME="appenv-ext"
    NAMESPACE="appplat-ns"
    CONNECTED_ENVIRONMENT_NAME="<connected-environment-name>"
    
  2. Log Analytics를 사용하도록 설정한 상태에서 Container Apps 확장을 Azure Arc 연결 클러스터에 설치합니다. Log Analytics는 나중에 확장에 추가할 수 없습니다.

    az k8s-extension create \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --extension-type 'Microsoft.App.Environment' \
        --release-train stable \
        --auto-upgrade-minor-version true \
        --scope cluster \
        --release-namespace $NAMESPACE \
        --configuration-settings "Microsoft.CustomLocation.ServiceAccount=default" \
        --configuration-settings "appsNamespace=${NAMESPACE}" \
        --configuration-settings "clusterName=${CONNECTED_ENVIRONMENT_NAME}" \
        --configuration-settings "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${AKS_CLUSTER_GROUP_NAME}" \
        --configuration-settings "logProcessor.appLogs.destination=log-analytics" \
        --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.customerId=${LOG_ANALYTICS_WORKSPACE_ID_ENC}" \
        --configuration-protected-settings "logProcessor.appLogs.logAnalyticsConfig.sharedKey=${LOG_ANALYTICS_KEY_ENC}"
    

    참고 항목

    Log Analytics를 통합하지 않고 확장을 설치하려면 명령에서 마지막 세 개의 --configuration-settings 매개 변수를 제거하세요.

    다음 표에서는 명령을 실행할 때의 다양한 --configuration-settings 매개 변수를 설명합니다.

    매개 변수 설명
    Microsoft.CustomLocation.ServiceAccount 사용자 지정 위치에 대해 만든 서비스 계정입니다. default 값으로 설정하는 것이 좋습니다.
    appsNamespace 앱 정의 및 수정 버전을 만드는 데 사용되는 네임스페이스입니다. 확장 릴리스 네임스페이스와 반드시 일치해야 합니다.
    clusterName 이 확장에 대해 생성되는 Container Apps 확장 Kubernetes 환경의 이름입니다.
    logProcessor.appLogs.destination 선택 사항. 애플리케이션 로그의 대상입니다. log-analytics 또는 none을 수락하고 none을 선택하면 플랫폼 로그가 사용되지 않도록 설정됩니다.
    logProcessor.appLogs.logAnalyticsConfig.customerId logProcessor.appLogs.destinationlog-analytics로 설정된 경우에만 필요합니다. base64로 인코딩된 Log Analytics 작업 영역 ID입니다. 이 매개 변수는 보호 설정으로 구성해야 합니다.
    logProcessor.appLogs.logAnalyticsConfig.sharedKey logProcessor.appLogs.destinationlog-analytics로 설정된 경우에만 필요합니다. base64로 인코딩된 Log Analytics 작업 영역 공유 키입니다. 이 매개 변수는 보호 설정으로 구성해야 합니다.
    envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group Azure Kubernetes Service 클러스터가 있는 리소스 그룹의 이름입니다. 기본 클러스터가 Azure Kubernetes Service인 경우에만 유효 하며 필수 요소입니다.
  3. 나중을 위해 Container Apps 확장의 id 속성을 저장합니다.

    EXTENSION_ID=$(az k8s-extension show \
        --cluster-type connectedClusters \
        --cluster-name $CLUSTER_NAME \
        --resource-group $GROUP_NAME \
        --name $EXTENSION_NAME \
        --query id \
        --output tsv)
    
  4. 확장이 완전히 설치될 때까지 기다렸다가 계속 진행합니다. 다음 명령을 실행하여 설치가 완료될 때까지 터미널 세션이 대기하게 할 수 있습니다.

    az resource wait --ids $EXTENSION_ID --custom "properties.provisioningState!='Pending'" --api-version "2020-07-01-preview"
    

kubectl을 사용하면 Kubernetes 클러스터에서 만든 Pod를 볼 수 있습니다.

kubectl get pods -n $NAMESPACE

이러한 Pod 및 시스템에서의 역할에 대한 자세한 내용은 Azure Arc 개요를 참조하세요.

사용자 지정 위치 만들기

사용자 지정 위치는 Azure Container Apps 연결된 환경에 할당하는 Azure 위치입니다.

  1. 사용자 지정 위치의 원하는 이름과 Azure Arc에 연결된 클러스터의 ID에 다음 환경 변수를 설정합니다.

    CUSTOM_LOCATION_NAME="my-custom-location" # Name of the custom location
    CONNECTED_CLUSTER_ID=$(az connectedk8s show --resource-group $GROUP_NAME --name $CLUSTER_NAME --query id --output tsv)
    
  2. 사용자 지정 위치 만들기:

    az customlocation create \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --host-resource-id $CONNECTED_CLUSTER_ID \
        --namespace $NAMESPACE \
        --cluster-extension-ids $EXTENSION_ID
    

    참고 항목

    클러스터에서 사용자 지정 위치를 만드는 데 문제가 발생하는 경우 클러스터에서 사용자 지정 위치 기능을 사용하도록 설정해야 할 수 있습니다. 이는 서비스 주체를 사용하여 CLI에 로그인하거나 클러스터 리소스에 대한 권한이 제한된 Microsoft Entra 사용자로 로그인한 경우에 필요합니다.

  3. 다음 명령을 이용하면 사용자 지정 위치가 성공적으로 생성되었는지 확인할 수 있습니다. 출력에서 provisioningState 속성이 Succeeded로 표시되어야 합니다. 그렇지 않은 경우 1분 후에 명령을 다시 실행합니다.

    az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
    
  4. 다음 단계를 위해 사용자 지정 위치 ID를 저장합니다.

    CUSTOM_LOCATION_ID=$(az customlocation show \
        --resource-group $GROUP_NAME \
        --name $CUSTOM_LOCATION_NAME \
        --query id \
        --output tsv)
    

Azure Container Apps 연결 환경을 만듭니다

사용자 지정 위치에서 앱 만들기를 시작하려면 먼저 Azure Container Apps 연결된 환경이 필요합니다.

  1. Container Apps 연결 환경을 만듭니다.

    az containerapp connected-env create \
        --resource-group $GROUP_NAME \
        --name $CONNECTED_ENVIRONMENT_NAME \
        --custom-location $CUSTOM_LOCATION_ID \
        --location $LOCATION
    
  2. 다음 명령을 사용하여 Container Apps 연결 환경이 성공적으로 생성되었는지 확인합니다. 출력에서 provisioningState 속성이 Succeeded로 표시되어야 합니다. 그렇지 않은 경우 1분 후에 다시 실행합니다.

    az containerapp connected-env show --resource-group $GROUP_NAME --name $CONNECTED_ENVIRONMENT_NAME
    

다음 단계