练习 - 创建用于部署到 AKS 的 GitHub 操作
- 10 分钟
在本练习中,你将完成以下任务:
- 增强现有的 GitHub 操作为包含部署任务。
- 验证更改是否部署到 Azure Kubernetes 服务 (AKS) 群集。
- 回滚部署。
更新 Kubernetes 清单以适用于产品服务
若要部署新版本的 eShop 产品服务,请编辑 product.yml 文件,指向上一单元中使用的 Azure 容器注册表(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 服务 (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 审批),以防止意外部署到生产中。