分享方式:


設定已啟用 Azure Arc 的 Kubernetes 叢集,以執行 App Service、Functions 和 Logic Apps (預覽)

如果您有已啟用 Azure Arc 的 Kubernetes 叢集,可以用來建立啟用 App Service 的自訂位置,並在其中部署 Web 應用程式、函式應用程式和邏輯應用程式。

已啟用 Azure Arc 的 Kubernetes 可讓您在 Azure 的 App Service、Functions 和 Logic Apps 中顯示內部部署或雲端 Kubernetes 叢集。 您可以建立應用程式並部署至該叢集,就像另一個 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

建立連線的叢集

注意

本教學課程使用 Azure Kubernetes Service (AKS),提供從頭開始設定環境的具體指示。 不過,對於生產工作負載,您可能不想在 AKS 叢集上啟用 Azure Arc,因為已在 Azure 中進行管理。 這些步驟將協助您開始了解這項服務,但在生產部署部分,應該相關步驟將為說明而非規定。 如需建立已啟用 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。 如果沒有,請在一分鐘後再次執行命令。

    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 工作區的編碼工作區識別碼和共用金鑰。 您在接下來的步驟中需要這些資料。

    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 環境名稱。 選擇 <kube-environment-name> 的唯一名稱,因為該名稱是在 App Service Kubernetes 環境中建立的應用程式所使用的網域名稱的一部分。

    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. 將 App Service 延伸模組安裝到已啟用 Log Analytics 的 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 叢集上。 接受 truefalse
    buildService.storageClassName 組建服務用來儲存組建成品的儲存類別名稱default 之類的值會指定名為 default 的類別,而不是標示為預設的任何類別。 預設值是 AKS 和 AKS HCI 的有效儲存類別,但可能不適用於其他散發/平台。
    buildService.storageAccessMode 要與具名儲存類別搭配使用的存取模式 (英文)。 接受 ReadWriteOnceReadWriteMany
    customConfigMap App Service Kubernetes 環境所設定的設定對應名稱。 其目前必須是 <namespace>/kube-environment-config,並以 appsNamespace 的值取代 <namespace>
    envoy.annotations.service.beta.kubernetes.io/azure-load-balancer-resource-group Azure Kubernetes Service 叢集所在的資源群組名稱。 只有在基礎叢集是 Azure Kubernetes Service 時,才有效且必要。
    logProcessor.appLogs.destination 選擇性。 接受 log-analyticsnone,選擇 [none] 會停用平台記錄。
    logProcessor.appLogs.logAnalyticsConfig.customerId 只有當 logProcessor.appLogs.destination 設定為 log-analytics 時才需要。 base64 編碼的 Log Analytics 工作區識別碼。 此參數應設定為受保護的設定。
    logProcessor.appLogs.logAnalyticsConfig.sharedKey 只有當 logProcessor.appLogs.destination 設定為 log-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

若要進一步了解這些 Pod 及其在系統中的作用,請參閱 App Service 延伸模組建立的 Pod

建立自訂位置

Azure 中的自訂位置可用來指派 App Service Kubernetes 環境。

  1. 請在下列環境變數中設定需要的自訂位置名稱,以及 Azure Arc 連線叢集的識別碼。

    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。 如果沒有,請在一分鐘後再次執行該命令。

    az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
    
  4. 儲存自訂位置識別碼以便在下一步驟中使用。

    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。 如果沒有,請在一分鐘後再次執行該命令。

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

下一步