設定已啟用 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
的類別,而不是標示為預設的任何類別。 默認值是 Azure 本機上的 AKS 和 AKS 的有效記憶體類別,但可能不適用於其他散發/平臺。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