Ejercicio: Creación de una acción de GitHub para implementar en AKS
- 10 minutos
En este ejercicio, completará las siguientes tareas:
- Mejore la acción de GitHub existente para incluir un trabajo de implementación.
- Compruebe que los cambios se implementan en el clúster de Azure Kubernetes Service (AKS).
- Anula el despliegue.
Actualización del manifiesto de Kubernetes para el servicio de producto
Para implementar nuevas versiones del servicio de producto eShop, edite el archivo product.yml para que apunte a Azure Container Registry (ACR) que usó en la unidad anterior.
En el repositorio bifurcado, seleccione el code tab, a continuación, seleccione el archivo product.yml.
Para editar el archivo, seleccione el icono de edición (lápiz).
Edite la línea:
containers: - image: [replace with your ACR name].azurecr.io/productservice:latestReemplace por
[replace with your ACR name]el nombre de su ACR, como acseshop186748394.En la parte superior derecha, seleccione Confirmar cambios... y, después, en el cuadro de diálogo, seleccione Confirmar cambios.
Crea la acción de implementación
El código YAML agrega un paso de GitHub que tiene un paso, que implementa nuevas imágenes. Estos son los pasos de un ejecutor ubuntu-latest:
- Extrae el repositorio en el que se encuentra este archivo.
- Inicio de sesión de Azure inicia sesión en Azure con las credenciales de la entidad de servicio.
- La configuración de kubelogin para el inicio de sesión no interactivo configura el archivo kubeconfig para la autenticación de Azure.
- Obtener contexto de K8s establece las credenciales de Azure Kubernetes Service (AKS) en el archivo .kube/config del ejecutor.
- Implementa la aplicación implementa la aplicación en AKS mediante la imagen integrada en el paso anterior y el archivo de manifiesto de Kubernetes que editó anteriormente.
Complete los pasos siguientes para crear una acción de GitHub que implemente el servicio de cupones:
En el repositorio bifurcado, en code tab, seleccione la pestaña .github/workflows.
Seleccione azure-kubernetes-service.yml.
Para editar el archivo, seleccione el icono de edición (lápiz).
En la parte inferior del archivo, pegue el siguiente código YAML en el editor:
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: falseEn la parte superior derecha, seleccione Confirmar cambios... y, después, en el cuadro de diálogo, seleccione Confirmar cambios.
Desencadenar una implementación
Actualizar el archivo azure-kubernetes-service.yml y confirmar los cambios desencadena automáticamente otra implementación. Ahora vea cómo realizar un cambio de código desencadena otra implementación.
Tiene un nuevo producto que el equipo de marketing desea agregar al catálogo.
En su repositorio bifurcado, en code tab, seleccione la carpeta Products.
Seleccione la carpeta Data.
Seleccione el archivo ProductDataContext.c.
Para editar el archivo, seleccione el icono de edición (lápiz).
En la parte inferior del archivo, agregue un nuevo producto a la matriz products :
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" },En la parte superior derecha, seleccione Confirmar cambios... y, después, en el cuadro de diálogo, seleccione Confirmar cambios.
Supervisar la implementación
Para supervisar el progreso de la implementación, seleccione la Actions pestaña .
Seleccione la ejecución más reciente enumerada para el flujo de trabajo Build and deploy an app to AKS. El nombre del proceso de ejecución es el mensaje de confirmación que utilizó en el paso anterior.
Seleccione el trabajo deploy para ver los detalles de esta ejecución de flujo de trabajo.
En el terminal, ejecute el siguiente comando para supervisar los pods del servicio de cupones en el clúster de AKS. La marca
--selectorfiltra la lista solo para pods para el servicio de cupones y la marca--watchindica akubectlque inspeccione los cambios.kubectl get pods --selector=app=productservice --watchDurante la implementación, aparece una variación de la salida siguiente:
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 19mEn la salida anterior, observe que se crea un nuevo pod productservice . Cuando el nuevo pod esté listo, el antiguo se termina. Este proceso hace que la transición a la nueva versión sea lo más fluida posible.
Comprobación de la aplicación
Complete los pasos siguientes para comprobar que la aplicación sigue funcionando:
Para ver eShop implementado, ejecute este comando en el terminal:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"El comando devuelve la dirección IP externa de la aplicación web. Mantenga presionada la tecla CTRL y seleccione el vínculo para abrir la aplicación en una nueva pestaña.
Vaya a la página de productos para ver la nueva tienda de campaña que aparece en la parte inferior de la página.
Reversión de la implementación
Una mitigación común para problemas de producción es revertir a una implementación correcta conocida. Kubernetes mantiene un historial de implementación que puede usar para revertir a una versión anterior de la aplicación.
En el terminal, ejecute este comando para quitar la nueva tienda que acaba de agregar al sitio web:
kubectl rollout undo deployment/productservice
Debería ver este mensaje de consola:
deployment.apps/productservice rolled back
Actualice la página de productos en el navegador y la nueva tienda de campaña ya no debería aparecer.
Nota:
En un escenario real, se implementan los artefactos de la compilación en varios entornos. Por ejemplo, puede tener entornos de desarrollo, pruebas y ensayo. Puede desencadenar flujos de trabajo de implementación mediante eventos como combinar PR. Puede agregar puertas de calidad o aprobaciones, como una aprobación de PR de una parte interesada, para prevenir implementaciones inesperadas en producción.
