Skip to main content

部署到 Azure Kubernetes Service

作为持续部署 (CD) 工作流程的一部分,您可以将项目部署到 Azure Kubernetes Service (AKS)。

简介

本指南说明如何使用 GitHub Actions 构建项目并将其部署到 Azure Kubernetes 服务

Note

如果 GitHub Actions 工作流需要访问支持 OpenID Connect (OIDC) 的云提供商提供的资源,则可以将工作流配置为直接向云提供商进行身份验证。 这样就可以停止将这些凭据存储为长期存在的机密,并提供其他安全优势。 有关详细信息,请参阅“关于使用 OpenID Connect 进行安全强化”。 和“在 Azure 中配置 OpenID Connect”。

先决条件

在创建 GitHub Actions 工作流程之前,首先需要完成以下设置步骤:

  1. 创建目标 AKS 群集和 Azure 容器注册表 (ACR)。 有关详细信息,请参阅 Azure 文档中的“快速入门:使用 Azure 门户部署 AKS 群集 - Azure Kubernetes 服务”和“快速入门 - 在门户中创建注册表 - Azure 容器注册表”。

  2. 创建名为 AZURE_CREDENTIALS 的机密来存储 Azure 凭据。 有关如何查找此信息和构造机密的详细信息,请参阅 Azure/login 操作文档

创建工作流程

完成先决条件后,可以继续创建工作流程。

以下示例工作流程演示在将代码推送到存储库时,如何构建项目并将其部署到 Azure Kubernetes Service。

在工作流 env 键下,更改以下值:

  • AZURE_CONTAINER_REGISTRY 更改为容器注册表的名称
  • PROJECT_NAME 更改为项目的名称
  • RESOURCE_GROUP 更改为包含 AKS 群集的资源组
  • CLUSTER_NAME 更改为 AKS 群集名称

此工作流使用 helm 呈现引擎来执行 azure/k8s-bake 操作。 如果将使用 helm 呈现引擎,请将 CHART_PATH 的值更改为 helm 文件的路径。 将 CHART_OVERRIDE_PATH 更改为覆盖文件路径的数组。 如果使用其他呈现引擎,请更新发送到 azure/k8s-bake 操作的输入参数。

YAML
# 此工作流使用未经 GitHub 认证的操作。
# 它们由第三方提供,并受
# 单独的服务条款、隐私政策和支持
# 文档。

# GitHub 建议将操作固定到提交 SHA。
# 若要获取较新版本,需要更新 SHA。
# 还可以引用标记或分支,但该操作可能会更改而不发出警告。

name: Build and deploy to Azure Kubernetes Service

env:
  AZURE_CONTAINER_REGISTRY: MY_REGISTRY_NAME # set this to the name of your container registry
  PROJECT_NAME: MY_PROJECT_NAME              # set this to your project's name
  RESOURCE_GROUP: MY_RESOURCE_GROUP          # set this to the resource group containing your AKS cluster
  CLUSTER_NAME: MY_CLUSTER_NAME              # set this to the name of your AKS cluster
  REGISTRY_URL: MY_REGISTRY_URL              # set this to the URL of your registry
  # If you bake using helm:
  CHART_PATH: MY_HELM_FILE                   # set this to the path to your helm file
  CHART_OVERRIDE_PATH: MY_OVERRIDE_FILES     # set this to an array of override file paths

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4

    - name: Azure Login
      uses: azure/login@14a755a4e2fd6dff25794233def4f2cf3f866955
      with:
        creds: ${{ secrets.AZURE_CREDENTIALS }}

    - name: Build image on ACR
      uses: azure/CLI@61bb69d64d613b52663984bf12d6bac8fd7b3cc8
      with:
        azcliversion: 2.29.1
        inlineScript: |
          az configure --defaults acr=${{ env.AZURE_CONTAINER_REGISTRY }}
          az acr build -t -t ${{ env.REGISTRY_URL }}/${{ env.PROJECT_NAME }}:${{ github.sha }}

    - name: Gets K8s context
      uses: azure/aks-set-context@94ccc775c1997a3fcfbfbce3c459fec87e0ab188
      with:
          creds: ${{ secrets.AZURE_CREDENTIALS }}
          resource-group: ${{ env.RESOURCE_GROUP }}
          cluster-name: ${{ env.CLUSTER_NAME }}
      id: login

    - name: Configure deployment
      uses: azure/k8s-bake@61041e8c2f75c1f01186c8f05fb8b24e1fc507d8
      with:
        renderEngine: 'helm'
        helmChart: ${{ env.CHART_PATH }}
        overrideFiles: ${{ env.CHART_OVERRIDE_PATH }}
        overrides: |
          replicas:2
        helm-version: 'latest'
      id: bake

    - name: Deploys application
      uses: Azure/k8s-deploy@dd4bbd13a5abd2fc9ca8bdcb8aee152bb718fa78
      with:
        manifests: ${{ steps.bake.outputs.manifestsBundle }}
        images: |
          ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.PROJECT_NAME }}:${{ github.sha }}
        imagepullsecrets: |
          ${{ env.PROJECT_NAME }}

其他资源

以下资源也可能有用: