Compartir a través de


Implementación en Kubernetes

Azure DevOps Services | Azure DevOps Server 2022

Use Azure Pipelines para implementar en Azure Kubernetes Service y en clústeres de Kubernetes ofrecidos por otros proveedores de la nube. Azure Pipelines tiene dos tareas para trabajar con Kubernetes:

  • Tarea KubernetesManifest: simule manifiestos mediante "bake" e impleméntelos en clústeres de Kubernetes con Helm, Kompose o Kustomize
  • Tarea Kubectl: implemente, configure y actualice un clúster de Kubernetes en Azure Container Service mediante la ejecución de comandos kubectl

Si usa Azure Kubernetes Service con cualquiera de las tareas, el tipo de conexión del servicio Azure Resource Manager es la mejor manera de conectarse a un clúster privado o a un clúster con cuentas locales deshabilitadas.

Para una rastreabilidad de implementación agregada, use un recurso de Kubernetes en entornos junto con una tarea de Kubernetes.

Para empezar a trabajar con Azure Pipelines y Azure Kubernetes Service, consulte Compilación e implementación en Azure Kubernetes Service con Azure Pipelines. Para empezar a trabajar con Azure Pipelines, Kubernetes y la estrategia de implementación controlada, consulte Uso de una estrategia de implementación controlada para implementaciones de Kubernetes con Azure Pipelines.

Tarea KubernetesManifest

La tarea KubernetesManifest comprueba si hay estabilidad de objetos antes de marcar una tarea como correcta o con errores. La tarea también puede realizar una sustitución de artefactos, agregar anotaciones relacionadas con la rastreabilidad de canalización, simplificar la creación y la referencia de imagePullSecrets, simular manifiestos mediante "bake" y ayudar en la implementación de estrategias de implementación.

Nota:

El soporte para canalizaciones basadas en YAML se activa con un único repositorio de Git. Si necesita un desencadenador para un archivo de manifiesto almacenado en otro repositorio de Git, o si se necesitan desencadenadores para Azure Container Registry o Docker Hub, use una canalización clásica en lugar de una canalización basada en YAML.

Puede usar la acción bake en la tarea de manifiesto de Kubernetes para simular mediante "bake" plantillas en archivos de manifiesto de Kubernetes. La acción le permite usar herramientas como Helm, kustomize y kompose. La acción bake de la tarea de manifiesto de Kubernetes muestra la transformación entre las plantillas de entrada y los archivos de manifiesto finales usados en las implementaciones. Puede consumir archivos de manifiesto a los que se ha aplicado la acción "bake" de bajada (en tareas) como entradas para la acción de implementación de la tarea de manifiesto de Kubernetes.

Los recursos de Kubernetes de destino que forman parte de entornos con trabajos de implementación. El uso de entornos e implementaciones de recursos mejora la rastreabilidad de la canalización, lo que le ayuda a diagnosticar problemas de implementación. También puede implementar en clústeres de Kubernetes con trabajos normales sin las mismas características de mantenimiento.

El siguiente código YAML muestra cómo generar archivos de manifiesto a partir de charts de Helm

steps:
- task: KubernetesManifest@1
  name: bake
  displayName: Bake K8s manifests from Helm chart
  inputs:
    action: bake
    helmChart: charts/sample
    overrides: 'image.repository:nginx'

- task: KubernetesManifest@1
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: someK8sSC
    namespace: default
    manifests: $(bake.manifestsBundle)
    containers: |
      nginx:  1.24.0

Tarea Kubectl

Como alternativa a la tarea KubernetesManifest kubernetesManifest, use la tarea Kubectl para implementar, configurar y actualizar un clúster de Kubernetes en Azure Container Service mediante la ejecución de comandos kubectl.

En este ejemplo se muestra cómo se refiere una conexión de servicio al clúster de Kubernetes.

- task: Kubernetes@1
  displayName: kubectl apply
  inputs:
    connectionType: Kubernetes Service Connection
    kubernetesServiceConnection: Contoso #alias: kubernetesServiceEndpoint

tarea Script

Use kubectl con una tarea de script.

En este ejemplo se usa un script para ejecutar kubectl.

- script: |
    kubectl apply -f manifest.yml

Estrategias de implementación de Kubernetes

La tarea de manifiesto de Kubernetes admite la estrategia de implementación controlada. Utiliza la estrategia de despliegue canario para implementar parcialmente nuevos cambios, permitiendo que estos coexistan con las implementaciones actuales antes de un lanzamiento completo.

Para obtener más información sobre las implementaciones canarias con canalizaciones, consulte Uso de una estrategia de implementación canaria para implementaciones de Kubernetes con Azure Pipelines.

Implementaciones de Kubernetes multinube

Kubernetes funciona del mismo modo en todos los proveedores de nube. Use Azure Pipelines para implementar en Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS) o clústeres de otros proveedores de nube.

Para configurar la implementación multinube, cree un entorno y agregue recursos de Kubernetes asociados a espacios de nombres de clústeres de Kubernetes.

El enfoque del proveedor genérico, basado en una cuenta de servicio existente, funciona con clústeres de cualquier proveedor de nube, incluido Azure. Con la opción Azure Kubernetes Service se crean nuevos objetos ServiceAccount y RoleBinding . Esto garantiza que el objeto RoleBinding limita las operaciones de ServiceAccount al espacio de nombres elegido.

Al usar el enfoque de proveedor genérico, asegúrese de que exista una RoleBinding que conceda permisos a la editClusterRole cuenta de servicio deseada. Conceda permisos a la cuenta de servicio correcta para que Azure Pipelines pueda usarlo para crear objetos en el espacio de nombres elegido.

Implementaciones paralelas en varias nubes

En el ejemplo siguiente, se muestra cómo realizar implementaciones paralelas en clústeres en varias nubes. En este ejemplo, hay implementaciones en los clústeres de AKS, GKE, EKS y OpenShift. Estos cuatro espacios de nombres están asociados a los recursos de Kubernetes en el entorno contoso.

trigger:
- main

jobs:
- deployment:
  displayName: Deploy to AKS
  pool:
    vmImage: ubuntu-latest
  environment: contoso.aksnamespace
  strategy:
    runOnce:
      deploy:
        steps:
        - checkout: self
        - task: KubernetesManifest@1
          displayName: Deploy to Kubernetes cluster
          inputs:
            action: deploy
            kubernetesServiceConnection: serviceConnection #replace with your service connection
            namespace: aksnamespace
            manifests: manifests/*
- deployment:
  displayName: Deploy to GKE
  pool:
    vmImage: ubuntu-latest
  environment: contoso.gkenamespace
  strategy:
    runOnce:
      deploy:
        steps:
        - checkout: self
        - task: KubernetesManifest@1
          displayName: Deploy to Kubernetes cluster
          inputs:
            action: deploy
            kubernetesServiceConnection: serviceConnection #replace with your service connection
            namespace: gkenamespace
            manifests: manifests/*
- deployment:
  displayName: Deploy to EKS
  pool:
    vmImage: ubuntu-latest
  environment: contoso.eksnamespace
  strategy:
    runOnce:
      deploy:
        steps:
        - checkout: self
        - task: KubernetesManifest@1
          displayName: Deploy to Kubernetes cluster
          inputs:
            action: deploy
            kubernetesServiceConnection: serviceConnection #replace with your service connection
            namespace: eksnamespace
            manifests: manifests/*
- deployment:
  displayName: Deploy to OpenShift
  pool:
    vmImage: ubuntu-latest
  environment: contoso.openshiftnamespace
  strategy:
    runOnce:
      deploy:
        steps:
        - checkout: self
        - task: KubernetesManifest@1
          displayName: Deploy to Kubernetes cluster
          inputs:
            action: deploy
            kubernetesServiceConnection: serviceConnection #replace with your service connection
            namespace: openshiftnamespace
            manifests: manifests/*
- deployment:
  displayName: Deploy to DigitalOcean
  pool:
    vmImage: ubuntu-latest
  environment: contoso.digitaloceannamespace
  strategy:
    runOnce:
      deploy:
        steps:
        - checkout: self
        - task: KubernetesManifest@1
          displayName: Deploy to Kubernetes cluster
          inputs:
            action: deploy
            kubernetesServiceConnection: serviceConnection #replace with your service connection
            namespace: digitaloceannamespace
            manifests: manifests/*