Partager via


Déployer sur Kubernetes

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 editClusterRole 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/*