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에서 관리되므로 AKS 클러스터에서 Azure Arc를 사용하도록 설정하지 않을 수 있습니다. 아래 단계는 서비스를 이해하는 데 도움이 되지만 프로덕션 배포의 경우 조치가 아닌 설명으로 간주되어야 합니다. 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. 다음 명령을 사용하여 연결의 유효성을 검사합니다. 속성을 다음과 같이 Succeeded표시 provisioningState 해야 합니다. 그렇지 않은 경우 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 환경에서 만든 앱의 do기본 이름에 속하기 때문에 고유한 이름을 <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 클러스터에 설치해야 하는지 여부입니다. 수락 또는 false.true
    buildService.storageClassName 빌드 아티팩트 저장을 위한 빌드 서비스에 대한 스토리지 클래스의 이름입니다. 같은 default 값은 기본값으로 표시된 클래스가 아니라 명명default된 클래스를 지정합니다. 기본값은 AKS 및 AKS HCI에 대한 유효한 스토리지 클래스이지만 다른 배포판/플랫폼에는 적용되지 않을 수 있습니다.
    buildService.storageAccessMode 위의 명명된 스토리지 클래스와 함께 사용할 액세스 모드입니다. 수락 또는 ReadWriteMany.ReadWriteOnce
    customConfigMap App Service Kubernetes 환경에서 설정할 구성 맵의 이름입니다. 현재는 위 값 appsNamespace 으로 바꿔 <namespace> 야 합니다<namespace>/kube-environment-config.
    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 로 설정된 log-analytics경우에만 logProcessor.appLogs.destination 필요합니다. base64로 인코딩된 Log Analytics 작업 영역 ID입니다. 이 매개 변수는 보호된 설정으로 구성해야 합니다.
    logProcessor.appLogs.logAnalyticsConfig.sharedKey 로 설정된 log-analytics경우에만 logProcessor.appLogs.destination 필요합니다. base64로 인코딩된 Log Analytics 작업 영역 공유 키입니다. 이 매개 변수는 보호된 설정으로 구성해야 합니다.
  3. id 나중에 App Service 확장의 속성을 저장합니다.

    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"
    

Kubernetes 클러스터에서 만든 Pod를 확인하는 데 사용할 kubectl 수 있습니다.

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
    

다음 단계