다음을 통해 공유


Azure Arc 지원 Kubernetes 클러스터를 설정하여 App Service, Functions 및 Logic Apps 실행(미리 보기)

Azure Arc 지원 Kubernetes 클러스터가 있다면 이를 사용하여 App Service 지원 사용자 지정 위치를 만들고 여기에 웹앱, 함수 앱, 논리 앱을 배포할 수 있습니다.

Azure Arc 지원 Kubernetes를 사용하면 온-프레미스 또는 클라우드 Kubernetes 클러스터를 Azure의 App Service, 함수, 논리 앱에 표시할 수 있습니다. 다른 Azure 지역처럼 앱을 만들고 배포할 수 있습니다.

필수 조건

Azure 계정이 없다면 무료 계정에 지금 바로 가입하세요.

공개 미리 보기의 요구 사항 및 제한 사항을 검토합니다. 특히 중요한 것은 클러스터 요구 사항입니다.

Azure CLI 확장 추가

Azure Cloud Shell에서 Bash 환경을 시작합니다.

이러한 CLI 명령은 아직 핵심 CLI 집합의 일부가 아니므로 다음 명령을 통해 추가합니다.

az extension add --upgrade --yes --name connectedk8s
az extension add --upgrade --yes --name k8s-extension
az extension add --upgrade --yes --name customlocation
az provider register --namespace Microsoft.ExtendedLocation --wait
az provider register --namespace Microsoft.Web --wait
az provider register --namespace Microsoft.KubernetesConfiguration --wait
az extension remove --name appservice-kube
az extension add --upgrade --yes --name appservice-kube

연결된 클러스터 만들기

참고 항목

이 자습서에서는 AKS(Azure Kubernetes Service)를 사용하여 처음부터 환경을 설정하기 위한 구체적인 지침을 제공합니다. 그러나 프로덕션 워크로드의 경우 Azure에서 이미 관리되는 Azure Arc를 AKS 클러스터에서 사용하도록 설정하지 않는 것이 좋습니다. 단계는 서비스를 이해하는 데 도움이 되지만 프로덕션 배포의 경우 조치가 아닌 설명으로 간주되어야 합니다. Azure Arc 지원 Kubernetes 클러스터 생성에 대한 일반적인 지침은 빠른 시작: 기존 Kubernetes 클러스터를 Azure Arc에 연결을 참조하세요.

  1. 공용 IP 주소를 사용하여 Azure Kubernetes Service에서 클러스터를 만듭니다. <group-name>을 원하는 리소스 그룹 이름으로 바꿉니다.

    AKS_CLUSTER_GROUP_NAME="<group-name>" # Name of resource group for the AKS cluster
    AKS_NAME="${aksClusterGroupName}-aks" # Name of the AKS cluster
    RESOURCE_LOCATION="eastus" # "eastus" or "westeurope"
    
    az group create -g $AKS_CLUSTER_GROUP_NAME -l $RESOURCE_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 리소스를 포함할 리소스 그룹을 만듭니다. <group-name>을 원하는 리소스 그룹 이름으로 바꿉니다.

    GROUP_NAME="<group-name>" # Name of resource group for the connected cluster
    
    az group create -g $GROUP_NAME -l $RESOURCE_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 Analytic 작업 영역은 Azure Arc의 App Service를 실행하지 않아도 되지만, 개발자는 이 작업 영역을 통해 Azure Arc 지원 Kubernetes 클러스터에서 실행하는 앱에 대한 애플리케이션 로그를 얻을 수 있습니다.

  1. 간단한 설명을 위해 지금 작업 영역을 만듭니다.

    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
    

App Service 확장 설치

  1. App Service 확장의 원하는 이름, 리소스를 프로비전해야 하는 클러스터 네임스페이스 및 App Service Kubernetes 환경의 이름에 대해 다음 환경 변수를 설정합니다. App Service Kubernetes 환경에서 만든 앱의 도메인 이름에 포함되므로 <kube-environment-name>에 고유한 이름을 선택합니다.

    EXTENSION_NAME="appservice-ext" # Name of the App Service extension
    NAMESPACE="appservice-ns" # Namespace in your cluster to install the extension and provision resources
    KUBE_ENVIRONMENT_NAME="<kube-environment-name>" # Name of the App Service Kubernetes environment resource
    
  2. Log Analytics를 사용하도록 설정한 상태에서 App Service 확장을 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.Web.Appservice' \
        --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=${KUBE_ENVIRONMENT_NAME}" \
        --configuration-settings "keda.enabled=true" \
        --configuration-settings "buildService.storageClassName=default" \
        --configuration-settings "buildService.storageAccessMode=ReadWriteOnce" \
        --configuration-settings "customConfigMap=${NAMESPACE}/kube-environment-config" \
        --configuration-settings "envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group=${aksClusterGroupName}" \
        --configuration-settings "logProcessor.appLogs.destination=log-analytics" \
        --config-protected-settings "logProcessor.appLogs.logAnalyticsConfig.customerId=${LOG_ANALYTICS_WORKSPACE_ID_ENC}" \
        --config-protected-settings "logProcessor.appLogs.logAnalyticsConfig.sharedKey=${LOG_ANALYTICS_KEY_ENC}"
    

    참고 항목

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

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

    매개 변수 설명
    Microsoft.CustomLocation.ServiceAccount 생성할 사용자 지정 위치에 대해 만들어야 하는 서비스 계정입니다. default 값으로 설정하는 것이 좋습니다.
    appsNamespace 앱 정의 및 Pod를 프로비전하는 네임스페이스입니다. 확장 릴리스 네임스페이스와 일치해야 합니다.
    clusterName 이 확장에 대해 생성되는 App Service Kubernetes 환경의 이름입니다.
    keda.enabled KEDA를 Kubernetes 클러스터에 설치해야 하는지 여부입니다. true 또는 false를 수락합니다.
    buildService.storageClassName 빌드 아티팩트를 저장하는 빌드 서비스를 위한 스토리지 클래스의 이름입니다. default 같은 값은 default라는 클래스를 지정하며 기본으로 표시되는 클래스는 지정하지 않습니다. 기본값은 AKS 및 AKS HCI에 대한 유효한 스토리지 클래스이지만 다른 배포판/플랫폼에는 적용되지 않을 수 있습니다.
    buildService.storageAccessMode 이름의 스토리지 클래스와 함께 사용할 액세스 모드입니다. ReadWriteOnce 또는 ReadWriteMany를 수락합니다.
    customConfigMap App Service Kubernetes 환경에서 설정할 구성 맵의 이름입니다. 현재는 <namespace>/kube-environment-config여야 하며 <namespace>appsNamespace의 값으로 바꿔야 합니다.
    envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group Azure Kubernetes Service 클러스터가 있는 리소스 그룹의 이름입니다. 기본 클러스터가 Azure Kubernetes Service인 경우에만 유효 하며 필수 요소입니다.
    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 작업 영역 공유 키입니다. 이 매개 변수는 보호 설정으로 구성해야 합니다.
  3. 나중을 위해 App Service 확장의 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.installState!='Pending'" --api-version "2020-07-01-preview"
    

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

kubectl get pods -n $NAMESPACE

App Service 확장에서 만든 Pod에서 이러한 Pod와 관련 역할을 자세히 확인할 수 있습니다.

사용자 지정 위치 만들기

Azure에서 사용자 지정 위치는 App Service Kubernetes 환경을 할당하는 데 사용합니다.

  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)
    

App Service Kubernetes 환경 만들기

사용자 지정 위치에서 앱 만들기를 시작하기 전에 App Service Kubernetes 환경을 마련해야 합니다.

  1. App Service Kubernetes 환경 만들기:

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

    az appservice kube show --resource-group $GROUP_NAME --name $KUBE_ENVIRONMENT_NAME
    

다음 단계