設定已啟用 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. 使用已啟用 Log Analytics 的 Azure Arc 連線叢集,將 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 叢集上。 接受 truefalse
    buildService.storageClassName 建置服務用來儲存組建成品的記憶體類別名稱。 之類的 default 值會指定名為 default的類別,而不是 任何標示為預設值的類別。 Default 是 AKS 和 AKS HCI 的有效儲存類別,但可能不適用於其他解構/平臺。
    buildService.storageAccessMode 與上述具名記憶體類別搭配使用的存取模式 。 接受 ReadWriteOnceReadWriteMany
    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-analyticsnone,選擇 [無] 會停用平台記錄。
    logProcessor.appLogs.logAnalyticsConfig.customerId 只有設定為log-analytics時才logProcessor.appLogs.destination需要 。 base64 編碼的Log Analytics工作區標識碼。 此參數應設定為受保護的設定。
    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"
    

您可以使用 kubectl 來查看已在 Kubernetes 叢集中建立的 Pod:

kubectl get pods -n $NAMESPACE

您可以從 App Service 擴充功能所建立的 Pod,深入了解這些 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
    

下一步