練習 - 建立 GitHub 動作以部署到 AKS
在此練習中,您將完成下列工作:
- 增強現有的 GitHub 動作,以包含部署作業。
- 確認是否將變更部署至 Azure Kubernetes Service (AKS) 叢集。
- 復原部署。
更新產品服務的 Kubernetes 資訊清單
若要部署新版本的 eShop 產品服務,請編輯 product.yml 檔案,以指向您在上一個單元中使用的 Azure Container Registry (ACR)。
在派生的存放庫中,選取 [code tab],然後選取 product.yml 檔案。
若要編輯檔案,請選取編輯圖示 (鉛筆)。
編輯這一行:
containers: - image: [replace with your ACR name].azurecr.io/productservice:latest
將
[replace with your ACR name]
取代為您的 ACR 名稱,例如 acseshop186748394。在右上方,選取 [認可變更...],然後在對話方塊中選取 [認可變更]。
建立部署動作
YAML 程式碼會新增 GitHub 步驟:
此步驟具有部署新映像的一個步驟。 以下是 ubuntu-latest
執行器中的步驟:
- 簽出此檔案所在的存放庫。
- [Azure 登入] 會使用服務主體認證登入 Azure。
- [為非互動式登入設定 kubelogin] 會設定 Azure 驗證的 kubeconfig 檔案。
- [取得 K8s 內容] 集合內容會設定執行器 .kube/config 檔案中的 Azure Kubernetes Service (AKS) 認證。
- [部署應用程式] 會使用上一個步驟中建置的映像,以及您稍早編輯的 Kubernetes 資訊清單檔,將應用程式部署至 AKS。
完成下列步驟以建立部署優惠券服務的 GitHub 動作:
在派生的存放庫中,在 [code tab] 上選取 [.github/workflows] 分頁。
選取 azure-kubernetes-service.yml。
若要編輯檔案,請選取編輯圖示 (鉛筆)。
在檔案底部,將下列 YAML 程式碼貼到編輯器中:
deploy: permissions: actions: read contents: read id-token: write runs-on: ubuntu-latest needs: [buildImage] steps: # Checks out the repository this file is in - uses: actions/checkout@v3 # Logs in with your Azure credentials - name: Azure login uses: azure/login@v1.4.6 with: creds: '${{ secrets.AZURE_CREDENTIALS }}' # Use kubelogin to configure your kubeconfig for Azure auth - name: Set up kubelogin for non-interactive login uses: azure/use-kubelogin@v1 with: kubelogin-version: 'v0.0.25' # Retrieves your Azure Kubernetes Service cluster's kubeconfig file - name: Get K8s context uses: azure/aks-set-context@v3 with: resource-group: ${{ env.RESOURCE_GROUP }} cluster-name: ${{ env.CLUSTER_NAME }} admin: 'false' use-kubelogin: 'true' # Deploys application based on given manifest file - name: Deploys application uses: Azure/k8s-deploy@v4 with: action: deploy manifests: ${{ env.DEPLOYMENT_MANIFEST_PATH }} images: | ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.CONTAINER_NAME }}:${{ github.sha }} pull-images: false
在右上方,選取 [認可變更...],然後在對話方塊中選取 [認可變更]。
觸發部署
正在更新 azure-kubernetes-service.yml 檔案,認可變更會自動觸發另一個部署。 現在,請參閱程式碼變更如何觸發另一個部署。
您有行銷小組想要新增至目錄的新產品。
在派生的存放庫中,在 [code tab] 上選取 [Products] 資料夾。
選取 [Data] 資料夾。
選取 ProductDataContext.c 檔案。
若要編輯檔案,請選取編輯圖示 (鉛筆)。
在檔案底部,將新產品新增至 [產品] 陣列:
new Product { Name = "Camping Tent 2", Description = "This updated tent is improved and cheaper, perfect for your next trip.", Price = 79.99m, ImageUrl = "product9.png" },
在右上方,選取 [認可變更...],然後在對話方塊中選取 [認可變更]。
監視部署
若要監視部署的進度,請選取 [Actions] 索引標籤。
選取針對 Build and deploy an app to AKS 工作流程列出的最新工作流程回合。 執行的名稱是您在上一個步驟中使用的認可訊息。
選取 [deploy] 工作,以查看此工作流程執行的詳細資料。
在終端中,執行下列命令以監視 AKS 叢集中的優惠券服務 Pod。
--selector
旗標只會篩選清單,只列出優惠券服務的 Pod,而--watch
旗標會指示kubectl
監看變更。kubectl get pods --selector=app=productservice --watch
在部署期間,會出現下列輸出的變化:
NAME READY STATUS RESTARTS AGE productservice-7979d4c47-xlcrr 1/1 Running 0 17m productservice-ff98b6d8d-7wmsh 0/1 Pending 0 0s productservice-ff98b6d8d-7wmsh 0/1 Pending 0 0s productservice-ff98b6d8d-7wmsh 0/1 ContainerCreating 0 0s productservice-ff98b6d8d-7wmsh 1/1 Running 0 4s productservice-7979d4c47-xlcrr 1/1 Terminating 0 19m
在上述輸出中,可以看到新的 [productservice] Pod 已建立。 新的 pod 就緒時,舊的 pod 便會終止。 此程序會讓轉換至新版本的作業盡可能順暢。
驗證應用程式
完成下列步驟,以確認應用程式仍可運作:
在終端中執行此命令,以檢視已部署的 eShop:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"
上述命令會傳回 Web 應用程式的外部 IP 位址。 按住 CTRL,然後選取連結以在新分頁中開啟應用程式。
前往產品頁面,以檢視頁面底部所列的新帳篷。
復原部署
對於生產問題,常見的緩和措施是還原到已知良好的部署。 Kubernetes 會維護部署歷程記錄,您可用來復原至舊版應用程式。
在終端中,執行此命令以移除您剛才新增至網站的新帳篷:
kubectl rollout undo deployment/productservice
您應該會看到此主控台訊息:
deployment.apps/productservice rolled back
重新整理瀏覽器中的產品頁面,應該不會再列出新帳篷。
注意
在實際情節中,您會將組建的成品部署到多個環境。 例如,您可能有開發、測試與預備環境。 您可以透過合併 PR 之類的事件,來觸發部署工作流程。 您可以新增品質或核准閘道 (例如專案關係人的 PR 核准),以避免非預期的生產環境部署。