Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure DevOps Services | Azure DevOps Server 2022
Utilisez Azure Pipelines pour effectuer un déploiement 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 une tâche, le type de connexion de service Azure Resource Manager est le meilleur moyen de se connecter à un cluster privé ou à un cluster avec des comptes locaux désactivés.
Pour une traçabilité de déploiement ajoutée, utilisez une ressource Kubernetes dans des environnements , ainsi qu’une tâche Kubernetes.
Pour bien démarrer avec Azure Pipelines et Azure Kubernetes Service, consultez Générer et déployer sur Azure Kubernetes Service avec Azure Pipelines. Pour bien démarrer avec Azure Pipelines, Kubernetes et la stratégie de déploiement canary, 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 comme ayant réussi ou échoué. 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
Les pipelines basés sur YAML prennent en charge les déclenchements 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, utilisez 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 montre 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.
Ciblez les ressources Kubernetes qui font partie d’environnements avec des travaux de déploiement. L’utilisation d’environnements et de déploiements de ressources améliore la traçabilité des pipelines, ce qui vous aide à 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 montre comment générer des fichiers manifestes à partir de charts 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
Tâche kubectl
En guise d’alternative à la tâche KubernetesManifest KubernetesManifest, utilisez la tâche Kubectl pour déployer, configurer et mettre à jour un cluster Kubernetes dans Azure Container Service en exécutant des commandes kubectl.
Cet exemple montre comment une connexion de service fait référence au cluster Kubernetes.
- task: Kubernetes@1
displayName: kubectl apply
inputs:
connectionType: Kubernetes Service Connection
kubernetesServiceConnection: Contoso #alias: kubernetesServiceEndpoint
tâche de script
Utiliser kubectl
avec une tâche de script.
Cet exemple 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 en charge la stratégie de déploiement à bascule. Utilisez la stratégie de déploiement canary pour déployer partiellement de nouvelles modifications afin que les nouvelles modifications coexistent avec les déploiements actuels avant un déploiement 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 fonctionne de la même façon sur tous les fournisseurs de cloud. Utilisez Azure Pipelines pour effectuer un déploiement sur Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE), Amazon Elastic Kubernetes Service (EKS) ou des clusters d’autres fournisseurs de cloud.
Pour configurer le déploiement multicloud, créez un environnement et ajoutez des ressources Kubernetes associées à des espaces de noms de 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 de cloud, y compris Azure. L’utilisation de l’option Azure Kubernetes Service crée de nouveaux objets ServiceAccount et RoleBinding . Cela garantit que l’objet RoleBinding limite les opérations de ServiceAccount à l’espace de noms choisi.
Lorsque vous utilisez l’approche du fournisseur générique, vérifiez qu’un RoleBinding existe qui accorde des autorisations dans le edit
ClusterRole
compte de service souhaité. Accordez des autorisations au compte de service approprié afin qu’Azure Pipelines puisse l’utiliser 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@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/*