Déployer sur Kubernetes
Azure DevOps Services | Azure DevOps Server 2022
Vous pouvez utiliser Azure Pipelines pour déployer sur des clusters Azure Kubernetes Service et Kubernetes proposés par d’autres fournisseurs de cloud. Azure Pipelines dispose de deux tâches pour travailler avec Kubernetes :
- Tâche KubernetesManifest : effectuez un bake et déployez des manifestes sur des clusters Kubernetes avec Helm, Kompose ou Kustomize
- Tâche Kubectl : déployez, configurez et mettez à jour un cluster Kubernetes dans Azure Container Service en exécutant des commandes kubectl
Si vous utilisez Azure Kubernetes Service avec ces tâches, le type de connexion de service Azure Resource Manager est le meilleur moyen de vous connecter à un cluster privé ou à un cluster pour lequel les comptes locaux sont désactivés.
Pour une traçabilité de déploiement supplémentaire, utilisez une ressource Kubernetes dans des environnements avec une tâche Kubernetes.
Pour commencer à utiliser Azure Pipelines et Azure Kubernetes Service, consultez Générer et déployer sur Azure Kubernetes Service avec Azure Pipelines. Pour commencer à utiliser Azure Pipelines, Kubernetes et la stratégie de déploiement canary spécifiquement, consultez Utiliser une stratégie de déploiement canary pour les déploiements Kubernetes avec Azure Pipelines.
Tâche KubernetesManifest
La tâche KubernetesManifest vérifie la stabilité de l’objet avant de marquer une tâche en tant que réussite/échec. La tâche peut également effectuer une substitution d’artefact, ajouter des annotations liées à la traçabilité du pipeline, simplifier la création et le référencement d’imagePullSecrets, effectuer un bake de manifestes et faciliter le lancement de la stratégie de déploiement.
Notes
Bien que le pipeline YAML prend en charge les déclencheurs sur un référentiel Git unique, si vous avez besoin d’un déclencheur pour un fichier manifeste stocké dans un autre référentiel Git ou si des déclencheurs sont nécessaires pour Azure Container Registry ou Docker Hub, vous devez utiliser un pipeline classique au lieu d’un pipeline YAML.
Vous pouvez utiliser l’action bake dans la tâche de manifeste Kubernetes pour effectuer un bake des modèles dans des fichiers manifeste Kubernetes. L’action vous permet d’utiliser des outils tels que Helm, Kustomizeet Kompose. L’action bake de la tâche de manifeste Kubernetes offre une visibilité sur la transformation entre les modèles d’entrée et les fichiers manifestes finaux utilisés dans les déploiements. Vous pouvez utiliser des fichiers manifestes bakés en aval (dans les tâches) en tant qu’entrées pour l’action de déploiement de la tâche de manifeste Kubernetes.
Vous pouvez cibler des ressources Kubernetes qui font partie d’environnements avec des travaux de déploiement. Le déploiement d’environnements et de ressources vous permet d’accéder à une meilleure traçabilité des pipelines, et donc de diagnostiquer les problèmes de déploiement. Vous pouvez également déployer sur des clusters Kubernetes avec des travaux normaux sans les mêmes fonctionnalités d’intégrité.
Le code YAML suivant est un exemple de baking de fichiers manifeste à partir de charts Helm
steps:
- task: KubernetesManifest@0
name: bake
displayName: Bake K8s manifests from Helm chart
inputs:
action: bake
helmChart: charts/sample
overrides: 'image.repository:nginx'
- task: KubernetesManifest@0
displayName: Deploy K8s manifests
inputs:
kubernetesServiceConnection: someK8sSC
namespace: default
manifests: $(bake.manifestsBundle)
containers: |
nginx: 1.7.9
Tâche kubectl
En guise d’alternative à la tâche KubernetesManifest, vous pouvez utiliser la tâche Kubectl pour déployer, configurer et mettre à jour un cluster Kubernetes dans Azure Container Service en exécutant des commandes kubectl.
L’exemple suivant montre comment une connexion de service est utilisée pour faire référence au cluster Kubernetes.
- task: Kubernetes@1
displayName: kubectl apply
inputs:
connectionType: Kubernetes Service Connection
kubernetesServiceEndpoint: Contoso
tâche de script
Vous pouvez également utiliser kubectl
avec une tâche de script.
L’exemple suivant utilise un script pour exécuter kubectl
.
- script: |
kubectl apply -f manifest.yml
Stratégies de déploiement Kubernetes
La tâche de manifeste Kubernetes prend actuellement en charge la stratégie de déploiement canary. Utilisez la stratégie de déploiement canary pour déployer partiellement de nouvelles modifications afin que celles-ci coexistent avec les déploiements actuels avant un lancement complet.
Pour plus d’informations sur les déploiements canary avec des pipelines, consultez Utiliser une stratégie de déploiement canary pour les déploiements Kubernetes avec Azure Pipelines.
Déploiements Kubernetes multiclouds
Kubernetes s’exécute de la même façon sur tous les fournisseurs de cloud. Azure Pipelines peut être utilisé pour le déploiement sur Azure Kubernetes Service (AKS), le moteur Google Kubernetes (GKE), Amazon Elastic Kubernetes Service (EKS) ou des clusters provenant de n’importe quel autre fournisseur de cloud.
Pour configurer le déploiement multicloud, créez un environnement, puis ajoutez vos ressources Kubernetes associées aux espaces de noms des clusters Kubernetes.
L’approche de fournisseur générique basée sur un compte de service existant fonctionne avec des clusters de n’importe quel fournisseur cloud, y compris Azure. L’avantage de l’utilisation de l’option Azure Kubernetes Service est qu’elle crée de nouveaux ServiceAccount et objets RoleBinding (au lieu de réutiliser un ServiceAccount existant) afin que l’objet RoleBinding nouvellement créé puisse limiter les opérations de ServiceAccount à l’espace de noms choisi uniquement.
Lorsque vous utilisez l’approche du fournisseur générique, assurez-vous qu’un RoleBinding existe, ce qui accorde des autorisations dans le edit
ClusterRole
compte de service souhaité. Vous devez accorder des autorisations au compte de service approprié afin que celui-ci puisse être utilisé par Azure Pipelines pour créer des objets dans l’espace de noms choisi.
Déploiements parallèles vers plusieurs clouds
L’exemple suivant illustre comment effectuer des déploiements parallèles vers des clusters dans plusieurs clouds. Dans cet exemple, il existe des déploiements sur les clusters AKS, GKE, EKS et OpenShift. Ces quatre espaces de noms sont associés aux ressources Kubernetes sous l’environnement contoso
.
trigger:
- main
jobs:
- deployment:
displayName: Deploy to AKS
pool:
vmImage: ubuntu-latest
environment: contoso.aksnamespace
strategy:
runOnce:
deploy:
steps:
- checkout: self
- task: KubernetesManifest@0
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@0
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@0
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@0
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@0
displayName: Deploy to Kubernetes cluster
inputs:
action: deploy
kubernetesServiceConnection: serviceConnection #replace with your service connection
namespace: digitaloceannamespace
manifests: manifests/*