Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 edit
ClusterRole
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/*