Creación e implementación en Azure Kubernetes Service
Azure Pipelines
Azure Kubernetes Service administra el entorno hospedado de Kubernetes, lo que facilita la implementación y administración de aplicaciones en contenedores. Este servicio también elimina la carga de las operaciones y el mantenimiento en curso mediante el aprovisionamiento, la actualización y el escalado de recursos a petición, sin desconectar las aplicaciones.
En esta guía paso a paso, aprenderá a crear una canalización que compila e implementa continuamente la aplicación. Cada vez que cambia el código en un repositorio que contiene un Dockerfile, las imágenes se insertan en el Azure Container Registry y los manifiestos se implementan en el clúster Azure Kubernetes Service.
Requisitos previos
Para asegurarse de que el Azure DevOps cuenta con la autorización necesaria para acceder a su suscripción de Azure, cree una conexión Azure Resource Manager servicio . La conexión de servicio es necesaria cuando se crea una canalización en el proyecto para implementarla en Azure Kubernetes Service. De lo contrario, las listas desplegables para Clustery Container Registry están vacías.
Tener una cuenta de GitHub en la que pueda crear un repositorio. Si no tiene ninguna, puede crearla gratis.
Una organización de Azure DevOps. Si no tiene ninguna, puede crearla gratis. (Las organizaciones de Azure DevOps son diferentes de las organizaciones de GitHub. Puede asignar a la organización de DevOps y la de GitHub el mismo nombre si desea que estén coordinadas).
Si el equipo ya tiene una, asegúrese de que usted es el administrador del proyecto de Azure DevOps que desea usar.
Tener capacidad para ejecutar canalizaciones en agentes hospedados por Microsoft. Puede comprar un trabajo paralelo o solicitar un nivel gratuito. Para solicitar un nivel gratuito, siga las instrucciones que se indican en este artículo. Tenga en cuenta que se pueden tardar 2 o 3 días laborables en conceder el nivel gratuito.
Una cuenta de Azure. Si no tiene ninguna, puede crearla gratis.
Sugerencia
Si no está de acuerdo con esto, la manera más fácil de empezar es usar la misma dirección de correo electrónico que el propietario de la organización Azure Pipelines y la suscripción de Azure.
Obtención del código
Bifurcar 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 Cloud Shell en la esquina superior derecha.
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 \
--kubernetes-version 1.16.10
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
Conectar y selección del repositorio
Inicie sesión en su organización de Azure DevOps y vaya a su proyecto.
Vaya a Pipelinesy, a continuación, seleccione Nueva canalización.
Siga los pasos del asistente y seleccione primero GitHub como ubicación del código fuente.
Puede que se le redirija a GitHub para iniciar sesión. Si es así, escriba sus credenciales de GitHub.
Cuando aparezca la lista de repositorios, seleccione el que corresponda.
Es posible que se le redirija a GitHub para instalar la aplicación Azure Pipelines. Si es así, seleccione Aprobar instalación.
Cuando aparezca la pestaña Configurar, seleccione Implementar en Azure Kubernetes Service.
Si se le solicita, seleccione la suscripción en la que creó el registro y el clúster.
Seleccione el
myappclúster.En Espacio denombres , seleccione Existentey, a continuación, seleccione predeterminado.
Seleccione el nombre del registro de contenedor.
Puede dejar el nombre de la imagen y el puerto de servicio establecidos en los valores predeterminados.
Establezca la casilla Enable Review App for Pull Requests (Habilitar la aplicación de revisión para solicitudes de extracción) para revisar la configuración relacionada con la aplicación que se incluirá en la canalización generada automáticamente por YAML en los pasos posteriores.
Seleccione Validar y configurar.
A Azure Pipelines crea la canalización, se hace lo siguiente:
Crea una conexión de servicio del Registro de Docker para permitir que la canalización pueda insertar imágenes en el registro de contenedor.
Crea 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 ServiceAccount creada no pueda realizar operaciones fuera del espacio de nombres elegido.
Genera un archivo azure-pipelines.yml, que define la canalización.
Genera 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 anteriormente.
Cuando aparezca la nueva canalización, consulte el archivo YAML para ver lo que hace. Para más información, consulte cómo compilamos la canalización a continuación. Cuando esté listo, seleccione Guardar y ejecute.
Aparece la confirmación que creará la nueva canalización. Puede ver los archivos generados mencionados anteriormente. Seleccione Guardar y ejecutar.
Si lo desea, cambie el mensaje De confirmación a algo parecido a Agregar 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.
Consulte la ejecución de la canalización y la aplicación implementada
A medida que se ejecuta la canalización, observe cómo se ejecuta la fase de compilación y, a continuación, la fase de implementación, pasa de azul (en ejecución) a verde (completada). 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, vea Agentes hospedados por Microsoft. Para buscar los intervalos IP necesarios para su organización 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:
Seleccione la pestaña Entornos.
Seleccione Ver entorno.
Seleccione la instancia si la aplicación para el espacio de nombres que implementó. Si se ha quedado atascado en los valores predeterminados mencionados anteriormente, será la aplicación myapp en el espacio de nombres predeterminado.
Seleccione la pestaña Servicios.
Seleccione y copie la dirección IP externa en el Portapapeles.
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 aparece en el explorador.
Cómo creamos la canalización
Cuando haya terminado de seleccionar opciones y, a continuación, continúe con la validación y configuración de la canalización (consulte más arriba) 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 docker para compilar e insertar la imagen en el 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 necesario para que los nodos del clúster de Kubernetes extraigan del recurso Azure Container Registry trabajo. A continuación, la tarea de manifiesto de Kubernetes usa los archivos de manifiesto para implementarlos en el clúster de Kubernetes.
- stage: Deploy
displayName: Deploy stage
dependsOn: Build
jobs:
- deployment: Deploy
displayName: Deploy job
pool:
vmImage: $(vmImageName)
environment: 'azooinmyluggagepipelinesjavascriptdocker.aksnamespace'
strategy:
runOnce:
deploy:
steps:
- task: DownloadPipelineArtifact@2
inputs:
artifactName: 'manifests'
downloadPath: '$(System.ArtifactsDirectory)/manifests'
- task: KubernetesManifest@0
displayName: Create imagePullSecret
inputs:
action: createSecret
secretName: $(imagePullSecret)
namespace: $(k8sNamespace)
dockerRegistryEndpoint: $(dockerRegistryServiceConnection)
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
namespace: $(k8sNamespace)
manifests: |
$(System.ArtifactsDirectory)/manifests/deployment.yml
$(System.ArtifactsDirectory)/manifests/service.yml
imagePullSecrets: |
$(imagePullSecret)
containers: |
$(containerRegistry)/$(imageRepository):$(tag)
Limpieza de recursos
Siempre que haya terminado con los recursos que creó anteriormente, puede usar el siguiente comando para eliminarlos:
az group delete --name myapp-rg
Cuando se le solicite, escriba y.
az group delete --name MC_myapp-rg_myapp_eastus
Cuando se le solicite, escriba y.
Saber más
Le invitamos a obtener más información sobre:
- Los servicios:
- Plantilla que se usa para crear la canalización: Implementación en una plantilla de clúster de Kubernetes existente
- Algunas de las tareas que se usan en la canalización y cómo puede personalizarlas:
- Algunos de los conceptos clave para este tipo de canalización:
- Entornos
- Trabajos de implementación
- Fases
- Conexiones de servicio del Registro de Docker (el método que usa la canalización para conectarse al servicio)