Partekatu honen bidez:


Compilación e implementación en Azure Kubernetes Service con Azure Pipelines

Azure DevOps Services

Use Azure Pipelines para la implementación automática en Azure Kubernetes Service (AKS). Azure Pipelines permite compilar, probar e implementar con integración continua (CI) y entrega continua (CD) mediante Azure DevOps.

En este artículo, verá cómo crear una canalización que compila e implementa la aplicación continuamente. Cada vez que modifique el código de un repositorio que contenga un archivo Dockerfile, las imágenes se insertarán en Azure Container Registry y los manifiestos se implementarán en el clúster de AKS.

Requisitos previos

Obtención del código

Bifurque el repositorio siguiente que contiene una aplicación de ejemplo y un Dockerfile:

https://github.com/MicrosoftDocs/pipelines-javascript-docker

Creación de recursos de Azure

Inicie sesión en Azure Portal y, a continuación, seleccione el botón de Cloud Shell en la esquina superior derecha. Use la CLI de Azure o PowerShell para crear un clúster de AKS.

Creación de un Registro de contenedor

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name mycontainerregistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys

Inicio de sesión en Azure Pipelines

Inicie sesión en Azure Pipelines. Una vez que haya iniciado sesión, el explorador accederá a https://dev.azure.com/my-organization-name y aparecerá el panel de Azure DevOps.

En la organización seleccionada, cree un proyecto. Si no tiene ningún proyecto en la organización, aparecerá la pantalla Cree un proyecto para empezar. De lo contrario, seleccione el botón Crear proyecto en la esquina superior derecha del panel.

Creación de la canalización

Conexión y selección del repositorio

  1. Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.

  2. Vaya a Canalizaciones y seleccione Nueva canalización.

  3. Siga los pasos del asistente y seleccione primero GitHub como ubicación del código fuente.

  4. Puede que se le redirija a GitHub para iniciar sesión. Si es así, escriba sus credenciales de GitHub.

  5. Cuando vea la lista de repositorios, seleccione el repositorio.

  6. Es posible que se le redirija a GitHub para instalar la aplicación Azure Pipelines. Si es así, seleccione Aprobar e instalar.

  7. Seleccione Implementar en Azure Kubernetes Service.

  8. Si se le solicita, seleccione la suscripción en la que creó el registro y el clúster.

  9. Seleccione el clúster myapp.

  10. En Espacio de nombres, seleccione Existente y, a continuación, seleccione predeterminado.

  11. Seleccione el nombre del registro de contenedor.

  12. Puede dejar el nombre de la imagen establecido en los valores predeterminados.

  13. Luego, establezca el puerto de servicio en 8080.

  14. Establezca la casilla Enable Review App for Pull Requests (Habilitar la aplicación de revisión para solicitudes de extracción) para la configuración relacionada con la aplicación de revisión que se incluirá en la canalización generada automáticamente por YAML en los pasos posteriores.

  15. Seleccione Validar y configurar.

    A medida que Azure Pipelines cree la canalización, el proceso hará lo siguiente:

    • Crear una conexión de servicio del registro de Docker para permitir que la canalización pueda insertar imágenes en el registro de contenedor.

    • Cree un entorno y un recurso de Kubernetes dentro del entorno. En el caso de un clúster habilitado para RBAC, el recurso de Kubernetes creado crea implícitamente objetos ServiceAccount y RoleBinding en el clúster para que la cuenta ServiceAccount creada no pueda realizar operaciones fuera del espacio de nombres elegido.

    • Genere un archivo azure-pipelines.yml, que define la canalización.

    • Genere los archivos de manifiesto de Kubernetes. Estos archivos se generan mediante la hidratación de las plantillas deployment.yml y service.yml en función de las selecciones realizadas. Cuando esté listo, seleccione Guardar y ejecutar.

  16. Seleccione Guardar y ejecutar.

  17. Puede cambiar el mensaje de confirmación a algo parecido a Agregar la canalización a nuestro repositorio. Cuando esté listo, seleccione Guardar y ejecutar para confirmar la nueva canalización en el repositorio y, a continuación, comience la primera ejecución de la nueva canalización.

Consulta de la implementación de la aplicación

A medida que se ejecuta la canalización, vea cómo la fase de compilación y, después, la fase de implementación, pasan de azul (en ejecución) a verde (completadas). Puede seleccionar las fases y los trabajos para ver la canalización en acción.

Nota:

Si usa un agente hospedado por Microsoft, debe agregar el intervalo IP del agente hospedado por Microsoft al firewall. Obtenga la lista semanal de intervalos IP del archivo JSON semanal, que se publica todos los miércoles. Los nuevos intervalos IP se hacen efectivos el lunes siguiente. Para obtener más información, consulte Agentes hospedados por Microsoft. Para buscar los intervalos IP necesarios para su organización de Azure DevOps, aprenda a identificar los posibles intervalos IP para los agentes hospedados por Microsoft.

Una vez finalizada la ejecución de la canalización, explore lo que ha ocurrido y, a continuación, vaya a ver la aplicación implementada. En el resumen de la canalización:

  1. Seleccione la pestaña Entornos.

  2. Seleccione Ver entorno.

  3. Seleccione la instancia de la aplicación para el espacio de nombres que implementó. Si usó los valores predeterminados, es la aplicación myapp en el espacio de nombres predeterminado.

  4. Seleccione la pestaña Servicios.

  5. Seleccione y copie la dirección IP externa al portapapeles.

  6. Abra una nueva pestaña o ventana del explorador y escriba la <dirección IP>: 8080.

Si va a compilar nuestra aplicación de ejemplo, Hola mundo aparecerá en el explorador.

Cómo se compila la canalización

Cuando haya terminado de seleccionar opciones y, a continuación, haya validado y configurado la canalización, Azure Pipelines ha creado una canalización automáticamente, mediante la plantilla Implementar en Azure Kubernetes Service.

La fase de compilación usa la tarea de Docker para compilar e insertar la imagen en Azure Container Registry.

- stage: Build
  displayName: Build stage
  jobs:  
  - job: Build
    displayName: Build job
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)
          
    - task: PublishPipelineArtifact@1
      inputs:
        artifactName: 'manifests'
        path: 'manifests'

El trabajo de implementación usa la tarea manifiesto de Kubernetes para crear el imagePullSecret necesario para que los nodos del clúster de Kubernetes extraigan del recurso de Azure Container Registry. A continuación, la tarea de manifiesto de Kubernetes usa los archivos de manifiesto para implementarlos en el clúster de Kubernetes. Los archivos de manifiesto service.yml y deployment.yml, se generaron al usar la plantilla Implementación en Azure Kubernetes Service.

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  jobs:
  - deployment: Deploy
    displayName: Deploy job
    pool:
      vmImage: $(vmImageName)
    environment: 'myenv.aksnamespace' #customize with your environment
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@2
            inputs:
              artifactName: 'manifests'
              downloadPath: '$(System.ArtifactsDirectory)/manifests'

          - task: KubernetesManifest@1
            displayName: Create imagePullSecret
            inputs:
              action: 'createSecret'
              connectionType: 'kubernetesServiceConnection'
              kubernetesServiceConnection: 'myapp-default' #customize for your Kubernetes service connection
              secretType: 'dockerRegistry'
              secretName: '$(imagePullSecret)'
              dockerRegistryEndpoint: '$(dockerRegistryServiceConnection)'

          - task: KubernetesManifest@1
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: 'deploy'
              connectionType: 'kubernetesServiceConnection'
              kubernetesServiceConnection: 'myapp-default' #customize for your Kubernetes service connection
              manifests: |
                $(Pipeline.Workspace)/manifests/deployment.yml
                $(Pipeline.Workspace)/manifests/service.yml
              containers: '$(containerRegistry)/$(imageRepository):$(tag)'
              imagePullSecrets: '$(imagePullSecret)'

Limpieza de recursos

Cuando haya terminado con los recursos que ha creado, puede usar el siguiente comando para eliminarlos:

az group delete --name myapp-rg

Escriba y cuando se le pida.