Compilación, prueba e implementación de contenedores en Azure Kubernetes Service (AKS) mediante Acciones de GitHub

Acciones de GitHub le ofrece la flexibilidad de compilar un flujo de trabajo del ciclo de vida de desarrollo de software automatizado. Puede usar varias acciones de Kubernetes para realizar implementaciones en contenedores desde el Azure Container Registry (ACR) al servicio de Azure Kubernetes (AKS) con Acciones de GitHub.

Requisitos previos

Acciones de GitHub para AKS

Con las Acciones de GitHub, puede automatizar los flujos de trabajo de desarrollo de software desde GitHub. Para obtener más información, vea Acciones de GitHub para Azure.

En la tabla siguiente se enumeran las acciones disponibles para AKS:

Nombre Descripción Más detalles
azure/aks-set-context Establezca el contexto del clúster de AKS de destino para que otras acciones utilicen o ejecuten cualquier comando de kubectl. azure/aks-set-context
azure/k8s-set-context Establezca el contexto del clúster de Kubernetes de destino que usarán otras acciones o ejecute cualquier comando de kubectl. azure/k8s-set-context
azure/k8s-bake Archivo de manifiesto mediante "bake" que se va a usar para las implementaciones con Helm, kustomize o kompose. azure/k8s-bake
azure/k8s-create-secret cree un secreto genérico o un secreto del registro de Docker en el clúster de Kubernetes. azure/k8s-create-secret
azure/k8s-deploy Implemente manifiestos en clústeres de Kubernetes. azure/k8s-deploy
azure/k8s-lint valide/busque errores en los archivos de manifiesto. azure/k8s-lint
azure/setup-helm instale una versión específica del archivo binario de Helm en el ejecutor. azure/setup-helm
azure/setup-kubectl Instale una versión específica de kubectl en el ejecutor. azure/setup-kubectl
azure/k8s-artifact-substitute Actualice la etiqueta o resumen de las imágenes de contenedor. azure/k8s-artifact-substitute
azure/aks-create-action Cree un clúster de AKS con Terraform. azure/aks-create-action
azure/aks-github-runner Configure agentes autohospedados para Acciones de GitHub. azure/aks-github-runner
azure/acr-build Compile contenedores mediante ACR. azure/acr-build

Uso de las Acciones de GitHub con AKS

Por ejemplo, puede usar Acciones de GitHub para implementar una aplicación en el clúster de AKS cada vez que se inserta un cambio en el repositorio de GitHub. Este ejemplo usa la aplicación Azure Vote.

Nota

En este ejemplo se usa una entidad de servicio para la autenticación con el clúster de ACR y AKS. Como alternativa, puede configurar Open ID Connect (OIDC) y actualizar la azure/login acción para usar OIDC. Para más información, consulte Configuración del inicio de sesión de Azure con la autenticación de OpenID Connect.

Bifurcación y actualización del repositorio

  1. Vaya al repositorio de Azure Vote y seleccione Bifurcación.

  2. Actualice azure-vote-all-in-one-redis.yaml para usar el ACR para la imagen azure-vote-front. Reemplace <registryName> por el nombre del registro.

    ...
          containers:
          - name: azure-vote-front
            image: <registryName>.azurecr.io/azuredocs/azure-vote-front:v1
    ...
    
  3. Confirme el elemento azure-vote-all-in-one-redis.yaml actualizado en su repositorio.

Crear secretos

  1. Cree una entidad de servicio para acceder al grupo de recursos con el rol Contributor mediante el comando az ad sp create-for-rbac. Reemplace <SUBSCRIPTION_ID> por el identificador de suscripción de la cuenta de Azure y <RESOURCE_GROUP> por el nombre del grupo de recursos que contiene el ACR.

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

    El resultado debería ser similar al ejemplo siguiente:

    {
      "clientId": <clientId>,
      "clientSecret": <clientSecret>,
      "subscriptionId": <subscriptionId>,
      "tenantId": <tenantId>,
      ...
    }
    
  2. Vaya a la configuración del repositorio de GitHub y seleccione Seguridad>Secretos y variables>Acciones.

  3. Para cada secreto, seleccione Nuevo secreto de repositorio y escriba el nombre y el valor del secreto.

    Nombre secreto Valor del secreto
    AZURE_CREDENTIALS Salida JSON completa del comando az ad sp create-for-rbac.
    service_principal El valor de <clientId>.
    service_principal_password El valor de <clientSecret>.
    subscription El valor de <subscriptionId>.
    tenant El valor de <tenantId>.
    Registro El nombre del registro.
    repository azuredocs
    resource_group El nombre de su grupo de recursos.
    cluster_name Nombre del clúster.

Para obtener más información sobre la creación de secretos, consulte Secretos cifrados.

Creación de un archivo de acciones

  1. En el repositorio, cree un .github/workflows/main.yml y pegue el contenido siguiente:

    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 
    

    La sección on contiene el evento que desencadena la acción. En el archivo de ejemplo, la acción se desencadena cuando se inserta un cambio en el directorio azure-vote.

    La sección steps contiene cada acción distinta:

    1. El código fuente de desprotección usa la acción de desprotección de Acciones de GitHub para clonar el repositorio.
    2. La compilación de ACR usa la acción de compilación de Azure Container Registry para compilar la imagen y cargarla en el registro.
    3. El inicio de sesión de Azure usa la acción de inicio de sesión de Azure para iniciar sesión en su cuenta de Azure.
    4. Establecer contexto de AKS usa la acción establecer contexto de Azure AKS para establecer el contexto del clúster de AKS.
    5. El programa de instalación de kubectl usa la acción kubectl de configuración de Azure AKS para instalar kubectl en el ejecutor.
    6. La implementación en AKS usa la Acción de implementación de Azure Kubernetes para implementar la aplicación en el clúster de Kuberentes.
  2. Confirme el archivo .github/workflows/main.yml en el repositorio.

  3. Para confirmar que la acción funciona, actualice azure-vote/azure-vote/config_file.cfg con el contenido siguiente:

    # UI Configurations
    TITLE = 'Azure Voting App'
    VOTE1VALUE = 'Fish'
    VOTE2VALUE = 'Dogs'
    SHOWHOST = 'false'
    
  4. Confirme el elemento azure-vote/azure-vote/config_file.cfg actualizado en su repositorio.

  5. En el repositorio, seleccione Acciones y confirme que se está ejecutando un flujo de trabajo. Después, confirme que el flujo de trabajo tiene una marca de verificación verde y que la aplicación actualizada se implementa en el clúster.

Pasos siguientes

Revise los siguientes flujos de trabajo de inicio para AKS. Para más información, consulte Uso de flujos de trabajo de inicio.