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
- Una cuenta de Azure con una suscripción activa. Si no tiene ninguna cuenta, cree una gratuita.
- Una cuenta de GitHub. Si no tiene ninguna, regístrese para obtener una gratuita.
- Al usar Acciones de GitHub, debe configurar la integración entre Azure y el repositorio de GitHub. Para configurar la integración, consulte Uso de Acciones de GitHub para conectarse a Azure.
- Un clúster de AKS existente con un ACR adjunto. Si no tiene ninguna, consulte Autenticación con ACR desde AKS.
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
Vaya al repositorio de Azure Vote y seleccione Bifurcación.
Actualice
azure-vote-all-in-one-redis.yaml
para usar el ACR para la imagenazure-vote-front
. Reemplace<registryName>
por el nombre del registro.... containers: - name: azure-vote-front image: <registryName>.azurecr.io/azuredocs/azure-vote-front:v1 ...
Confirme el elemento
azure-vote-all-in-one-redis.yaml
actualizado en su repositorio.
Crear secretos
Cree una entidad de servicio para acceder al grupo de recursos con el rol
Contributor
mediante el comandoaz 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>, ... }
Vaya a la configuración del repositorio de GitHub y seleccione Seguridad>Secretos y variables>Acciones.
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
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 directorioazure-vote
.La sección
steps
contiene cada acción distinta:- El código fuente de desprotección usa la acción de desprotección de Acciones de GitHub para clonar el repositorio.
- 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.
- 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.
- Establecer contexto de AKS usa la acción establecer contexto de Azure AKS para establecer el contexto del clúster de AKS.
- El programa de instalación de kubectl usa la acción kubectl de configuración de Azure AKS para instalar kubectl en el ejecutor.
- 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.
Confirme el archivo
.github/workflows/main.yml
en el repositorio.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'
Confirme el elemento
azure-vote/azure-vote/config_file.cfg
actualizado en su repositorio.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.
Azure Kubernetes Service