設定已啟用 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。
使用公用 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
取得 kubeconfig 檔案,並測試您與叢集的連線。 根據預設,kubeconfig 檔案會儲存至
~/.kube/config
。az aks get-credentials --resource-group $AKS_CLUSTER_GROUP_NAME --name $AKS_NAME --admin kubectl get ns
建立資源群組,並在其中納入您的 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
將您建立的叢集連線到 Azure Arc。
CLUSTER_NAME="${GROUP_NAME}-cluster" # Name of the connected cluster resource az connectedk8s connect --resource-group $GROUP_NAME --name $CLUSTER_NAME
使用下列命令驗證連線。 結果應該會將
provisioningState
屬性顯示為Succeeded
。 如果沒有,請在一分鐘後再次執行命令。az connectedk8s show --resource-group $GROUP_NAME --name $CLUSTER_NAME
建立 Log Analytics 工作區
雖然 Log Analytic 工作區不需要在 Azure Arc 中執行 App Service,但開發人員可以透過其來取得在已啟用 Azure Arc 的 Kubernetes 叢集中執行的應用程式所產生的應用程式記錄檔。
為了簡單起見,請立即建立工作區。
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
執行下列命令,以取得現有 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 延伸模組
在下列環境變數中設定需要的 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
將 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 叢集上。 接受 true
或false
。buildService.storageClassName
組建服務用來儲存組建成品的儲存類別名稱。 default
之類的值會指定名為default
的類別,而不是標示為預設的任何類別。 預設值是 AKS 和 AKS HCI 的有效儲存類別,但可能不適用於其他散發/平台。buildService.storageAccessMode
要與具名儲存類別搭配使用的存取模式 (英文)。 接受 ReadWriteOnce
或ReadWriteMany
。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-analytics
或none
,選擇 [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 工作區共用金鑰。 此參數應設定為受保護的設定。儲存 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)
等候延伸模組完整安裝,再繼續進行。 您可以執行下列命令,讓終端工作階段等到此程序完成為止:
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 環境。
請在下列環境變數中設定需要的自訂位置名稱,以及 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)
建立自訂位置:
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 使用者登入,則此為必要。
使用下列命令來驗證自訂位置是否已成功建立。 輸出應該會將
provisioningState
屬性顯示為Succeeded
。 如果沒有,請在一分鐘後再次執行該命令。az customlocation show --resource-group $GROUP_NAME --name $CUSTOM_LOCATION_NAME
儲存自訂位置識別碼以便在下一步驟中使用。
CUSTOM_LOCATION_ID=$(az customlocation show \ --resource-group $GROUP_NAME \ --name $CUSTOM_LOCATION_NAME \ --query id \ --output tsv)
建立 App Service Kubernetes 環境
開始在自訂位置上建立應用程式之前,您需要 App Service Kubernetes 環境。
建立 App Service Kubernetes 環境:
az appservice kube create \ --resource-group $GROUP_NAME \ --name $KUBE_ENVIRONMENT_NAME \ --custom-location $CUSTOM_LOCATION_ID
使用下列命令來驗證 App Service Kubernetes 環境是否已成功建立。 輸出應該會將
provisioningState
屬性顯示為Succeeded
。 如果沒有,請在一分鐘後再次執行該命令。az appservice kube show --resource-group $GROUP_NAME --name $KUBE_ENVIRONMENT_NAME