Criar, testar e implementar contentores para Azure Kubernetes Service (AKS) com GitHub Actions

GitHub Actions dá-lhe a flexibilidade de criar um fluxo de trabalho de ciclo de vida de desenvolvimento de software automatizado. Pode utilizar várias ações do Kubernetes para implementar em contentores de Azure Container Registry (ACR) para Azure Kubernetes Service (AKS) com GitHub Actions.

Pré-requisitos

GitHub Actions para o AKS

Com o GiHub Actions, pode automatizar os fluxos de trabalho de desenvolvimento de software a partir do GitHub. Para obter mais informações, veja GitHub Actions para o Azure.

A tabela seguinte lista as ações disponíveis para o AKS:

Nome Descrição Mais detalhes
azure/aks-set-context Defina o contexto do cluster do AKS de destino para que outras ações utilizem ou executem quaisquer comandos kubectl. azure/aks-set-context
azure/k8s-set-context Defina o contexto de cluster do Kubernetes de destino para que outras ações utilizem ou executem comandos kubectl. azure/k8s-set-context
azure/k8s-bake Asse o ficheiro de manifesto para utilizar para implementações com o Helm, kustomize ou kompose. azure/k8s-bake
azure/k8s-create-secret Crie um segredo genérico ou um segredo do docker-registry no cluster do Kubernetes. azure/k8s-create-secret
azure/k8s-deploy Implementar manifestos em clusters do Kubernetes. azure/k8s-deploy
azure/k8s-lint Valide/lint os seus ficheiros de manifesto. azure/k8s-lint
azure/setup-helm Instale uma versão específica do binário helm no corredor. azure/setup-helm
azure/setup-kubectl Instale uma versão específica do kubectl no corredor. azure/setup-kubectl
azure/k8s-artifact-substitute Atualize a etiqueta ou o resumo das imagens de contentor. azure/k8s-artifact-substitute
azure/aks-create-action Crie um cluster do AKS com o Terraform. azure/aks-create-action
azure/aks-github-runner Configure agentes autoalojados para GitHub Actions. azure/aks-github-runner
azure/acr-build Crie contentores com o ACR. azure/acr-build

Utilizar GitHub Actions com o AKS

Por exemplo, pode utilizar GitHub Actions para implementar uma aplicação no cluster do AKS sempre que uma alteração for enviada para o repositório do GitHub. Este exemplo utiliza a aplicação Azure Vote .

Nota

Este exemplo utiliza um principal de serviço para autenticação com o cluster do ACR e do AKS. Em alternativa, pode configurar o Open ID Connect (OIDC) e atualizar a ação azure/login para utilizar o OIDC. Para obter mais informações, veja Configurar o Início de Sessão do Azure com a autenticação do OpenID Connect.

Fork e atualizar o repositório

  1. Navegue para o repositório Azure Vote e selecione Fork.

  2. Atualize o para utilizar o azure-vote-all-in-one-redis.yaml ACR para a azure-vote-front imagem. Substitua <registryName> pelo nome do seu registo.

    ...
          containers:
          - name: azure-vote-front
            image: <registryName>.azurecr.io/azuredocs/azure-vote-front:v1
    ...
    
  3. Consolide o atualizado azure-vote-all-in-one-redis.yaml para o seu repositório.

Criar segredos

  1. Crie um principal de serviço para aceder ao grupo de recursos com a função Contributor com o az ad sp create-for-rbac comando . Substitua <SUBSCRIPTION_ID> pelo ID de subscrição da sua conta do Azure e <RESOURCE_GROUP> pelo nome do grupo de recursos que contém o ACR.

    az ad sp create-for-rbac \
        --name "ghActionAzureVote" \
        --scope /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP> \
        --role Contributor \
        --json-auth
    

    O resultado deve ter um aspeto semelhante ao seguinte resultado de exemplo:

    {
      "clientId": <clientId>,
      "clientSecret": <clientSecret>,
      "subscriptionId": <subscriptionId>,
      "tenantId": <tenantId>,
      ...
    }
    
  2. Navegue para as definições do repositório do GitHub e selecione Segredos de Segurança>e variáveis Ações>.

  3. Para cada segredo, selecione Novo Segredo do Repositório e introduza o nome e o valor do segredo.

    Nome do segredo Valor secreto
    AZURE_CREDENTIALS A saída JSON completa do az ad sp create-for-rbac comando.
    service_principal O valor de <clientId>.
    service_principal_password O valor de <clientSecret>.
    subscrição O valor de <subscriptionId>.
    inquilino O valor de <tenantId>.
    registry O nome do seu registo.
    repository azuredocs
    resource_group O nome do grupo de recursos.
    cluster_name O nome do cluster.

Para obter mais informações sobre como criar segredos, veja Segredos Encriptados.

Criar ficheiro de ações

  1. No seu repositório, crie e .github/workflows/main.yml cole os seguintes conteúdos:

    name: build_deploy_aks
    on:
      push:
        paths:
          - "azure-vote/**"
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - name: Checkout source code 
            uses: actions/checkout@v3
          - name: ACR build
            id: build-push-acr
            uses: azure/acr-build@v1
            with:
              service_principal: ${{ secrets.service_principal }}
              service_principal_password: ${{ secrets.service_principal_password }}
              tenant: ${{ secrets.tenant }}
              registry: ${{ secrets.registry }}
              repository: ${{ secrets.repository }}
              image:  azure-vote-front
              folder: azure-vote
              branch: master
              tag: ${{ github.sha }}
          - name: Azure login
            id: login
            uses: azure/login@v1.4.3
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
          - name: Set AKS context
            id: set-context
            uses: azure/aks-set-context@v3
            with:
              resource-group: '${{ secrets.resource_group }}' 
              cluster-name: '${{ secrets.cluster_name }}'
          - name: Setup kubectl
            id: install-kubectl
            uses: azure/setup-kubectl@v3
          - name: Deploy to AKS
            id: deploy-aks
            uses: Azure/k8s-deploy@v4
            with:
              namespace: 'default'
              manifests: |
                 azure-vote-all-in-one-redis.yaml
              images: '${{ secrets.registry }}.azurecr.io/${{ secrets.repository }}/azure-vote-front:${{ github.sha }}'
              pull-images: false 
    

    A on secção contém o evento que aciona a ação. No ficheiro de exemplo, a ação é acionada quando uma alteração é enviada para o azure-vote diretório.

    A steps secção contém cada ação distinta:

    1. O código fonte de saída utiliza a Ação de Saída do GitHub Actions para clonar o repositório.
    2. A compilação do ACR utiliza o Azure Container Registry Build Action para criar a imagem e carregá-la para o seu registo.
    3. O início de sessão do Azure utiliza a Ação de Início de Sessão do Azure para iniciar sessão na sua conta do Azure.
    4. Definir o contexto do AKS utiliza a Ação de Contexto Do Conjunto do Azure AKS para definir o contexto para o cluster do AKS.
    5. O kubectl de configuração utiliza a Ação kubectl de Configuração do Azure AKS para instalar o kubectl no seu corredor.
    6. Implementar no AKS utiliza a Ação de Implementação do Azure Kubernetes para implementar a aplicação no cluster do Kubernetes.
  2. Consolide o .github/workflows/main.yml ficheiro no seu repositório.

  3. Para confirmar que a ação está a funcionar, atualize o azure-vote/azure-vote/config_file.cfg com os seguintes conteúdos:

    # UI Configurations
    TITLE = 'Azure Voting App'
    VOTE1VALUE = 'Fish'
    VOTE2VALUE = 'Dogs'
    SHOWHOST = 'false'
    
  4. Consolide o atualizado azure-vote/azure-vote/config_file.cfg para o seu repositório.

  5. No seu repositório, selecione Ações e confirme que está a ser executado um fluxo de trabalho. Em seguida, confirme que o fluxo de trabalho tem uma marca de verificação verde e que a aplicação atualizada é implementada no cluster.

Passos seguintes

Reveja os seguintes fluxos de trabalho de arranque para o AKS. Para obter mais informações, veja Utilizar fluxos de trabalho de arranque.