AWS 工作負載範例是使用 Bash、CloudFormation 和 AWS CLI 來部署。 取用者 Python 應用程式會部署為容器。 下列各節說明 Azure 工作流程的不同方式。 Bash 指令碼中有用來部署 Azure Kubernetes Service (AKS) 叢集和支援基礎結構的變更。 此外,Kubernetes 部署資訊清單會修改為將 KEDA 設定為使用 Azure 儲存體佇列調整工具來取代 Amazon Simple Queue Service (SQS) 調整工具。
Azure 工作流程會使用以 Karpenter 為基礎的 AKS 節點自動佈建 (NAP) 功能。 這項功能可免除使用 Helm 明確部署 Karpenter 的需求,大幅簡化 AKS 上 Karpenter 的部署和使用方式。 不過,如果您需要直接部署 Karpenter,可以使用 GitHub 上的 AKS Karpenter 提供者來執行此動作。
設定 Kubernetes 部署資訊清單
AWS 會使用 Kubernetes 部署 YAML 資訊清單,將工作負載部署至 EKS。 AWS 部署 YAML 具有適用於 KEDA 調整工具的 SQS 和 DynamoDB 參考,因此我們需要加以變更,以指定用來連線到 Azure 基礎結構的 Azure 調整工具 KEDA 對等值。 若要這樣做,請設定 Azure 儲存體佇列 KEDA 調整工具。
下列程式碼片段顯示 AWS 和 Azure 實作的範例 YAML 資訊清單。
AWS 實作
spec:
serviceAccountName: $SERVICE_ACCOUNT
containers:
- name: <sqs app name>
image: <name of Python app container>
imagePullPolicy: Always
env:
- name: SQS_QUEUE_URL
value: https://<Url To SQS>/<region>/<QueueName>.fifo
- name: DYNAMODB_TABLE
value: <table name>
- name: AWS_REGION
value: <region>
Azure 實作
spec:
serviceAccountName: $SERVICE_ACCOUNT
containers:
- name: keda-queue-reader
image: ${AZURE_CONTAINER_REGISTRY_NAME}.azurecr.io/aws2azure/aqs-consumer
imagePullPolicy: Always
env:
- name: AZURE_QUEUE_NAME
value: $AZURE_QUEUE_NAME
- name: AZURE_STORAGE_ACCOUNT_NAME
value: $AZURE_STORAGE_ACCOUNT_NAME
- name: AZURE_TABLE_NAME
value: $AZURE_TABLE_NAME
設定環境變數
在執行任何部署步驟之前,您需要使用下列環境變數來設定一些組態資訊:
K8sversion:部署在 AKS 叢集上的 Kubernetes 版本。KARPENTER_VERSION:部署在 AKS 叢集上的 Karpenter 版本。SERVICE_ACCOUNT:與受控識別相關聯服務帳戶的名稱。AQS_TARGET_DEPLOYMENT:取用者應用程式容器部署的名稱。AQS_TARGET_NAMESPACE:部署取用者應用程式的命名空間。AZURE_QUEUE_NAME:Azure 儲存體佇列的名稱。AZURE_TABLE_NAME:儲存已處理訊息的 Azure 儲存體資料表名稱。LOCAL_NAME:部署指令碼中所建構資源名稱的簡單根目錄。LOCATION:部署所在的 Azure 區域。TAGS:任何使用者定義的標籤及其相關聯的值。STORAGE_ACCOUNT_SKU:Azure 儲存體帳戶 SKU。ACR_SKU:Azure Container Registry SKU。AKS_NODE_COUNT:節點數目。
您可以在 GitHub 存放庫的 deployment 目錄中檢閱 environmentVariables.sh Bash 指令碼。 這些環境變數已設定預設值,因此除非您想要變更預設值,否則不需要更新檔案。 Azure 資源的名稱會在 deploy.sh 指令碼中動態建立,並儲存在 deploy.state 檔案中。 您可以使用 deploy.state 檔案來建立 Azure 資源名稱的環境變數。
下一步
參與者
本文由 Microsoft 維護。 下列參與者最初撰寫:
- Ken Kilty | 首席 TPM
- Russell de Pina | 首席 TPM
- Jenny Hayes | 資深內容開發人員
- Carol Smith | 資深內容開發人員
- Erin Schaffer |內容開發人員 2