KubernetesManifest@1 - Tâche Déployer sur Kubernetes v1
Utilisez les fichiers manifeste Kubernetes pour déployer sur des clusters ou même bakez les fichiers manifeste à utiliser pour les déploiements à l’aide de graphiques Helm.
Syntax
# Deploy to Kubernetes v1
# Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts.
- task: KubernetesManifest@1
inputs:
#action: 'deploy' # 'bake' | 'createSecret' | 'delete' | 'deploy' | 'patch' | 'promote' | 'scale' | 'reject'. Action. Default: deploy.
#connectionType: 'kubernetesServiceConnection' # 'azureResourceManager' | 'kubernetesServiceConnection'. Required when action != bake. Service connection type. Default: kubernetesServiceConnection.
#kubernetesServiceConnection: # string. Alias: kubernetesServiceEndpoint. Required when action != bake && connectionType = kubernetesServiceConnection. Kubernetes service connection.
#azureSubscriptionConnection: # string. Alias: azureSubscriptionEndpoint. Required when action != bake && connectionType = azureResourceManager. Azure subscription.
#azureResourceGroup: # string. Required when action != bake && connectionType = azureResourceManager. Resource group.
#kubernetesCluster: # string. Required when action != bake && connectionType = azureResourceManager. Kubernetes cluster.
#useClusterAdmin: false # boolean. Optional. Use when connectionType = azureResourceManager. Use cluster admin credentials. Default: false.
#namespace: # string. Namespace.
#strategy: 'none' # 'canary' | 'none'. Optional. Use when action = deploy || action = promote || action = reject. Strategy. Default: none.
#trafficSplitMethod: 'pod' # 'pod' | 'smi'. Optional. Use when strategy = canary. Traffic split method. Default: pod.
#percentage: '0' # string. Required when strategy = Canary && action = deploy. Percentage. Default: 0.
#baselineAndCanaryReplicas: '1' # string. Required when strategy = Canary && action = deploy && trafficSplitMethod = SMI. Baseline and canary replicas. Default: 1.
#manifests: # string. Required when action = deploy || action = promote || action = reject. Manifests.
#containers: # string. Optional. Use when action = deploy || action = promote || action = bake. Containers.
#imagePullSecrets: # string. Optional. Use when action = deploy || action = promote. ImagePullSecrets.
#renderType: 'helm' # 'helm' | 'kompose' | 'kustomize'. Optional. Use when action = bake. Render Engine. Default: helm.
#dockerComposeFile: # string. Required when action = bake && renderType = kompose. Path to docker compose file.
#helmChart: # string. Required when action = bake && renderType = helm. Helm Chart.
#releaseName: # string. Optional. Use when action = bake && renderType = helm. Helm Release Name.
#overrideFiles: # string. Optional. Use when action = bake && renderType = helm. Override Files.
#overrides: # string. Optional. Use when action = bake && renderType = helm. Overrides.
#kustomizationPath: # string. Optional. Use when action = bake && renderType = kustomize. Kustomization Path.
#resourceToPatch: 'file' # 'file' | 'name'. Required when action = patch. Resource to patch. Default: file.
#resourceFileToPatch: # string. Required when action = patch && resourceToPatch = file. File path.
#kind: # 'deployment' | 'replicaset' | 'statefulset'. Required when action = scale || resourceToPatch = name. Kind.
#name: # string. Required when action = scale || resourceToPatch = name. Name.
#replicas: # string. Required when action = scale. Replica count.
#mergeStrategy: 'strategic' # 'json' | 'merge' | 'strategic'. Required when action = patch. Merge Strategy. Default: strategic.
#arguments: # string. Optional. Use when action = delete. Arguments.
#patch: # string. Required when action = patch. Patch.
#secretType: 'dockerRegistry' # 'dockerRegistry' | 'generic'. Required when action = createSecret. Type of secret. Default: dockerRegistry.
#secretName: # string. Optional. Use when action = createSecret. Secret name.
#secretArguments: # string. Optional. Use when action = createSecret && secretType = generic. Arguments.
#dockerRegistryEndpoint: # string. Optional. Use when action = createSecret && secretType = dockerRegistry. Docker registry service connection.
#rolloutStatusTimeout: '0' # string. Optional. Use when action = deploy || action = patch || action = scale || action = promote. Timeout for rollout status. Default: 0.
Entrées
action
- Action
string
. Valeurs autorisées : bake
, createSecret
(créer un secret), delete
, deploy
, patch
, promote
, , scale
, reject
. Valeur par défaut : deploy
.
Indique l'action à effectuer.
connectionType
- Type de connexion de service
string
. Nécessaire lorsque action != bake
. Valeurs autorisées : azureResourceManager
(Azure Resource Manager), kubernetesServiceConnection
(Connexion Kubernetes Service). Valeur par défaut : kubernetesServiceConnection
.
Sélectionnez un type de connexion de service Kubernetes.
kubernetesServiceConnection
(Connexion Kubernetes Service) : vous permet de fournir un fichier KubeConfig, de spécifier un compte de service ou d’importer un instance AKS avec l’option Abonnement Azure. L’importation d’un instance AKS avec l’option Abonnement Azure nécessite un accès au cluster Kubernetes au moment de la configuration de la connexion de service.azureResourceManager
(Azure Resource Manager) : vous permet de sélectionner un instance AKS. N’accède pas au cluster Kubernetes au moment de la configuration de la connexion de service.
Pour plus d’informations, consultez Remarques.
kubernetesServiceConnection
- Connexion au service Kubernetes
Alias d’entrée : kubernetesServiceEndpoint
. string
. Nécessaire lorsque action != bake && connectionType = kubernetesServiceConnection
.
Spécifie une connexion de service Kubernetes.
azureSubscriptionConnection
- Abonnement Azure
Alias d’entrée : azureSubscriptionEndpoint
. string
. Nécessaire lorsque action != bake && connectionType = azureResourceManager
.
Sélectionnez l’abonnement Azure Resource Manager qui contient Azure Container Registry. Remarque : Pour configurer une nouvelle connexion de service, sélectionnez l’abonnement Azure dans la liste, puis cliquez sur « Autoriser ». Si votre abonnement n’est pas répertorié, ou si vous souhaitez utiliser un principal de service existant, vous pouvez configurer une connexion de service Azure à l’aide du bouton « Ajouter » ou « Gérer ».
azureResourceGroup
- Groupe de ressources
string
. Nécessaire lorsque action != bake && connectionType = azureResourceManager
.
Sélectionnez un groupe de ressources Azure.
kubernetesCluster
- Cluster Kubernetes
string
. Nécessaire lorsque action != bake && connectionType = azureResourceManager
.
Sélectionnez un cluster managé Azure.
useClusterAdmin
- Utiliser les informations d’identification de l’administrateur de cluster
boolean
. facultatif. Utilisez quand connectionType = azureResourceManager
. Valeur par défaut : false
.
Utilisez les informations d’identification de l’administrateur de cluster au lieu des informations d’identification utilisateur du cluster par défaut.
namespace
- Noms
string
.
Spécifie l’espace de noms pour les commandes à l’aide de l’indicateur –namespace
. Si l’espace de noms n’est pas fourni, les commandes s’exécutent dans l’espace de noms par défaut.
strategy
- Stratégie
string
. facultatif. Utilisez quand action = deploy || action = promote || action = reject
. Valeurs autorisées : canary
, none
. Valeur par défaut : none
.
Spécifie la stratégie de déploiement utilisée dans l’action deploy
avant une action ou reject
une promote
action. Actuellement, canary
est la seule stratégie de déploiement acceptable.
trafficSplitMethod
- Méthode de fractionnement du trafic
string
. facultatif. Utilisez quand strategy = canary
. Valeurs autorisées : pod
, smi
. Valeur par défaut : pod
.
Pour la valeur smi
, le fractionnement du pourcentage de trafic est effectué au niveau de la demande à l’aide d’un maillage de service. Un maillage de service doit être configuré par un administrateur de cluster. Cette tâche gère l’orchestration des objets TrafficSplit SMI.
Pour la valeur pod
, le fractionnement du pourcentage n’est pas possible au niveau de la demande en l’absence d’un maillage de service. Au lieu de cela, l’entrée de pourcentage est utilisée pour calculer les réplicas pour la ligne de base et canary. Le calcul est un pourcentage de réplicas spécifiés dans les manifestes d’entrée pour la variante stable.
percentage
- Pourcentage
string
. Nécessaire lorsque strategy = Canary && action = deploy
. Valeur par défaut : 0
.
Pourcentage utilisé pour calculer le nombre de réplicas de type ligne de base-variant et canary-variant des charges de travail contenues dans les fichiers manifestes.
Pour l’entrée de pourcentage spécifiée, calculez :
(pourcentage × nombre de réplicas) / 100
Si le résultat n’est pas un entier, le plancher mathématique du résultat est utilisé lors de la création de variantes de base et canary.
Par exemple, supposons que le déploiement hello-world
se trouve dans le fichier manifeste d’entrée et que les lignes suivantes se trouvent dans l’entrée de tâche :
replicas: 4
strategy: canary
percentage: 25
Dans ce cas, les déploiements et hello-world-canary
sont créés hello-world-baseline
avec un réplica chacun. La variante ligne de base est créée avec la même image et la même balise que la version stable, qui est la variante à quatre réplicas avant le déploiement. La variante canary est créée avec l’image et la balise correspondant aux modifications nouvellement déployées.
baselineAndCanaryReplicas
- Réplicas de base et de validité
string
. Nécessaire lorsque strategy = Canary && action = deploy && trafficSplitMethod = SMI
. Valeur par défaut : 1
.
Lorsque vous définissez trafficSplitMethod
smi
sur , le pourcentage de fractionnement du trafic est contrôlé dans le plan de maillage de service. Vous pouvez contrôler le nombre réel de réplicas pour les variantes canary et de base de référence indépendamment du fractionnement du trafic.
Par exemple, supposons que le manifeste de déploiement d’entrée spécifie 30 réplicas pour la variante stable. Supposons également que vous spécifiez l’entrée suivante pour la tâche :
strategy: canary
trafficSplitMethod: smi
percentage: 20
baselineAndCanaryReplicas: 1
Dans ce cas, la variante stable reçoit 80 % du trafic, tandis que les variantes ligne de base et de canary reçoivent chacune la moitié des 20 % spécifiés. Les variantes de base et de validité ne reçoivent pas trois réplicas chacune. Elles reçoivent à la place le nombre spécifié de réplicas, ce qui signifie qu’elles reçoivent chacun un réplica.
manifests
- Se manifeste
string
. Nécessaire lorsque action = deploy || action = promote || action = reject
.
Spécifie le chemin des fichiers manifeste à utiliser pour le déploiement. Chaque ligne représente un chemin d’accès unique. Un modèle de correspondance de fichier est une valeur acceptable pour chaque ligne.
containers
- Conteneurs
string
. facultatif. Utilisez quand action = deploy || action = promote || action = bake
.
Spécifie l’URL de ressource complète de l’image à utiliser pour les substitutions sur les fichiers manifeste. L’URL contosodemo.azurecr.io/helloworld:test
est un exemple.
imagePullSecrets
- ImagePullSecrets
string
. facultatif. Utilisez quand action = deploy || action = promote
.
Spécifie une entrée multiligne où chaque ligne contient le nom d’un secret de Registre Docker qui a déjà été configuré au sein du cluster. Chaque nom de secret est ajouté sous imagePullSecrets
pour les charges de travail qui se trouvent dans les fichiers manifeste d’entrée.
renderType
- Moteur de rendu
string
. facultatif. Utilisez quand action = bake
. Valeurs autorisées : helm
, kompose
, kustomize
. Valeur par défaut : helm
.
Spécifie le type de rendu utilisé pour produire les fichiers manifestes.
dockerComposeFile
- Chemin d’accès au fichier docker compose
string
. Nécessaire lorsque action = bake && renderType = kompose
.
Spécifie un chemin d’accès au fichier docker-compose.
helmChart
- Graphique Helm
string
. Nécessaire lorsque action = bake && renderType = helm
.
Spécifie le chemin d’accès du graphique Helm à baker.
releaseName
- Nom de la version Helm
string
. facultatif. Utilisez quand action = bake && renderType = helm
.
Spécifie le nom de la version Helm à utiliser.
overrideFiles
- Remplacer les fichiers
string
. facultatif. Utilisez quand action = bake && renderType = helm
.
Spécifie une entrée multiligne qui accepte le chemin d’accès aux fichiers de remplacement. Les fichiers sont utilisés lorsque les fichiers manifeste des graphiques Helm sont bakés.
overrides
- Substitue
string
. facultatif. Utilisez quand action = bake && renderType = helm
.
Spécifie les valeurs de remplacement à définir.
kustomizationPath
- Chemin d’accès à la kustomisation
string
. facultatif. Utilisez quand action = bake && renderType = kustomize
.
Spécifie l’argument qui doit être le chemin du répertoire contenant le fichier ou une URL de dépôt Git avec un suffixe de chemin d’accès spécifiant same
par rapport à la racine du dépôt.
resourceToPatch
- Ressource à corriger
string
. Nécessaire lorsque action = patch
. Valeurs autorisées : file
, name
. Valeur par défaut : file
.
Indique l’une des méthodes correctives suivantes :
- Un fichier manifeste identifie les objets à corriger.
- Un objet individuel est identifié par son genre et son nom en tant que cible de correctif.
Les valeurs acceptables sont fichier et nom.
resourceFileToPatch
- Chemin d’accès au fichier
string
. Nécessaire lorsque action = patch && resourceToPatch = file
.
Spécifie le chemin d’accès au fichier utilisé pour un correctif.
kind
- Genre
string
. Nécessaire lorsque action = scale || resourceToPatch = name
. Valeurs autorisées : deployment
, replicaset
, statefulset
.
Spécifie le type d’objet K8s, par deployment
exemple , replicaSet
et bien plus encore.
name
- Nom
string
. Nécessaire lorsque action = scale || resourceToPatch = name
.
Spécifie le nom de l’objet K8s.
replicas
- Nombre de réplicas
string
. Nécessaire lorsque action = scale
.
Spécifie le nombre de réplicas à mettre à l’échelle.
replicas
- Nombre de réplicas
string
. Nécessaire lorsque action = scale
.
Spécifie le nom de l’objet K8s.
mergeStrategy
- Stratégie de fusion
string
. Nécessaire lorsque action = patch
. Valeurs autorisées : json
, merge
, strategic
. Valeur par défaut : strategic
.
Spécifie le type de correctif fourni.
arguments
- Arguments
string
. facultatif. Utilisez quand action = delete
.
Spécifie les arguments de la kubectl delete
commande . Voici un exemple : arguments: deployment hello-world foo-bar
patch
- Patch
string
. Nécessaire lorsque action = patch
.
Spécifie le contenu du correctif.
secretType
- Type de secret
string
. Nécessaire lorsque action = createSecret
. Valeurs autorisées : dockerRegistry
, generic
. Valeur par défaut : dockerRegistry
.
Crée ou met à jour un générique ou docker imagepullsecret
. Spécifiez dockerRegistry
pour créer ou mettre à jour le imagepullsecret
du registre sélectionné. Un imagePullSecret
est un moyen de transmettre un secret qui contient un mot de passe de registre de conteneurs au Kubelet, afin qu’il puisse extraire une image privée pour le compte de votre pod.
secretName
- Nom du secret
string
. facultatif. Utilisez quand action = createSecret
.
Spécifie le nom du secret. Vous pouvez utiliser ce nom secret dans le fichier de configuration Kubernetes YAML.
secretArguments
- Arguments
string
. facultatif. Utilisez quand action = createSecret && secretType = generic
.
Spécifie les clés et les valeurs littérales à insérer dans le secret. Par exemple, --from-literal=key1=value1
--from-literal=key2="top secret"
.
dockerRegistryEndpoint
- Connexion au service de registre Docker
string
. facultatif. Utilisez quand action = createSecret && secretType = dockerRegistry
.
Spécifie les informations d’identification de la connexion de service spécifiée qui sont utilisées pour créer un secret de Registre Docker dans le cluster. Les fichiers manifeste sous le imagePullSecrets
champ peuvent ensuite faire référence au nom de ce secret.
rolloutStatusTimeout
- Délai d’expiration pour les status de déploiement
string
. facultatif. Utilisez quand action = deploy || action = patch || action = scale || action = promote
. Valeur par défaut : 0
.
Spécifie la durée d’attente (en secondes) avant de terminer watch on rollout
status.
Options de contrôle de la tâche
Toutes les tâches ont des options de contrôle en plus de leurs entrées de tâches. Pour plus d’informations, consultez Options de contrôle et propriétés de tâche courantes.
Variables de sortie
Cette tâche définit les variables de sortie suivantes, que vous pouvez utiliser dans les étapes, les travaux et les étapes en aval.
manifestsBundle
Emplacement des bundles de manifeste créés par l’action bake
Remarques
Considérations relatives à la connexion Kubernetes Service lors de l’accès à AKS
Vous pouvez créer une connexion de service Kubernetes avec l’une des options suivantes.
- KubeConfig
- Compte Service Account
- Abonnement Azure
Lorsque vous sélectionnez l’option Abonnement Azure , Kubernetes doit être accessible à Azure DevOps au moment de la configuration de la connexion de service. Il peut y avoir différentes raisons pour lesquelles une connexion de service ne peut pas être créée, par exemple vous avez créé un cluster privé ou si les comptes locaux du cluster sont désactivés. Dans ce cas, Azure DevOps ne peut pas se connecter à votre cluster au moment de la configuration de la connexion de service et vous verrez un écran Chargement des espaces de noms bloqué.
À compter de Kubernetes 1.24, les jetons à longue durée de vie ne sont plus créés par défaut. Kubernetes recommande de ne pas utiliser de jetons de longue durée. Par conséquent, les tâches utilisant une connexion de service Kubernetes créée avec l’option Abonnement Azure n’ont pas accès au jeton permanent requis pour l’authentification et ne peuvent pas accéder à votre cluster Kubernetes. Cela entraîne également la boîte de dialogue Chargement des espaces de noms figé.
Utiliser la connexion de service Azure Resource Manager pour accéder à AKS
Pour les clients AKS, le type de connexion de service Azure Resource Manager fournit la meilleure méthode pour se connecter à un cluster privé ou à un cluster dont les comptes locaux sont désactivés. Cette méthode ne dépend pas de la connectivité du cluster au moment où vous créez une connexion de service. L’accès à AKS est différé au runtime de pipeline, ce qui présente les avantages suivants :
- L’accès à un cluster AKS (privé) peut être effectué à partir d’un agent auto-hébergé ou identique avec une visibilité directe vers le cluster.
- Un jeton est créé pour chaque tâche qui utilise une connexion de service Azure Resource Manager. Cela garantit que vous vous connectez à Kubernetes avec un jeton de courte durée, qui est la recommandation Kubernetes.
- AKS est accessible même lorsque les comptes locaux sont désactivés.
FAQ sur la connexion de service
Je reçois le message d’erreur suivant : Impossible de trouver un secret associé au compte de service. Ce qui se passe
Vous utilisez la connexion au service Kubernetes avec l’option Abonnement Azure. Nous mettons à jour cette méthode pour créer des jetons de longue durée. Cette option devrait être disponible à la mi-mai. Toutefois, il est recommandé de commencer à utiliser le type de connexion de service Azure et de ne pas utiliser de jetons de longue durée conformément aux instructions Kubernetes.
J’utilise AKS et ne souhaite rien changer. Puis-je continuer à utiliser des tâches avec la connexion au service Kubernetes ?
Nous mettons à jour cette méthode pour créer des jetons de longue durée. Cette option devrait être disponible à la mi-mai. Toutefois, n’oubliez pas que cette approche va à l’encontre des conseils de Kubernetes.
J’utilise les tâches Kubernetes et la connexion au service Kubernetes, mais pas AKS. Dois-je être inquiet ?
Vos tâches continueront à fonctionner comme avant.
Le type de connexion de service Kubernetes sera-t-il supprimé ?
Nos tâches Kubernetes fonctionnent avec n’importe quel cluster Kubernetes, quel que soit l’endroit où elles s’exécutent. La connexion au service Kubernetes continue d’exister.
Je suis un client AKS et tout va bien, dois-je agir ?
Il n’est pas nécessaire de changer quoi que ce soit. Si vous utilisez la connexion au service Kubernetes et que vous avez sélectionné l’abonnement Azure lors de la création, vous devez connaître les conseils Kubernetes sur l’utilisation de jetons de longue durée.
Je crée un environnement Kubernetes et n’ai pas la possibilité d’utiliser des connexions de service
Si vous ne pouvez pas accéder à votre AKS au moment de la création de l’environnement, vous pouvez utiliser un environnement vide et définir l’entrée connectionType
sur une connexion de service Azure Resource Manager.
AKS est configuré avec le RBAC Azure Active Directory et mon pipeline ne fonctionne pas. Ces mises à jour permettront-elles de résoudre ce problème ?
L’accès à Kubernetes lorsque le RBAC AAD est activé n’est pas lié à la création de jetons. Pour éviter une invite interactive, nous allons prendre en charge kubelogin dans une prochaine mise à jour.
Utilisez une tâche de manifeste Kubernetes dans un pipeline de build ou de mise en production pour créer et déployer des manifestes sur des clusters Kubernetes.
Cette tâche prend en charge les éléments suivants :
Substitution d’artefact : l’action de déploiement prend comme entrée une liste d’images conteneur que vous pouvez spécifier avec leurs balises et leurs synthèses. La même entrée est remplacée dans les fichiers manifestes non créés avant l’application au cluster. Cette substitution garantit que les nœuds de cluster extraient la version appropriée de l’image.
stabilité du manifeste: l’état de déploiement des objets Kubernetes déployés est vérifié. Les vérifications de stabilité sont incorporées pour déterminer si l’état de la tâche est une réussite ou un échec.
Annotations de traçabilité : les annotations sont ajoutées aux objets Kubernetes déployés pour superposer les informations de traçabilité. Les annotations suivantes sont prises en charge :
- azure-pipelines/org
- azure-pipelines/project
- azure-pipelines/pipeline
- azure-pipelines/pipelineId
- azure-pipelines/execution
- azure-pipelines/executionuri
- azure-pipelines/jobName
Gestion des secrets : l’action
createSecret
permet de créer des secrets de registre Docker à l’aide de connexions au service du Registre Docker. Il permet également de créer des secrets génériques à l’aide de variables de texte brut ou de variables secrètes. Avant le déploiement sur le cluster, vous pouvez utiliser l’entréesecrets
ainsi que l’actiondeploy
pour augmenter les fichiers manifeste d’entrée avec la valeur appropriéeimagePullSecrets
.Créer un manifeste : l’action
bake
de la tâche permet de créer des modèles dans des fichiers manifeste Kubernetes. L’action utilise des outils tels que Helm, Compose et Kustomize. Avec la baking, ces fichiers manifeste Kubernetes sont utilisables pour les déploiements sur le cluster.Stratégie de déploiement : le choix de la
canary
stratégie avec l’actiondeploy
conduit à la création de noms de charge de travail avec suffixe-baseline
et-canary
. La tâche prend en charge deux méthodes de fractionnement du trafic :Interface de maillage de service : l’abstraction de l’interface Service Mesh (SMI) permet la configuration avec des fournisseurs de maillage de services tels que
Linkerd
etIstio
. La tâche Manifeste Kubernetes mappe les objets SMITrafficSplit
aux services stables, de base et canary pendant le cycle de vie de la stratégie de déploiement.Les déploiements Canary basés sur un maillage de service et qui utilisent cette tâche sont plus précis. Cette précision est due à la façon dont les fournisseurs de maillage de services activent le fractionnement granulaire du trafic basé sur des pourcentages. Le maillage de services utilise le registre de services et les conteneurs side-car qui sont injectés dans des pods. Cette injection se produit en même temps que les conteneurs d’application pour obtenir le fractionnement granulaire du trafic.
Kubernetes sans maillage de service : en l’absence d’un maillage de service, vous risquez de ne pas obtenir le pourcentage exact de fractionnement souhaité au niveau de la requête. Toutefois, vous pouvez effectuer des déploiements de canaris en utilisant des variantes de base et de canari en regard de la variante stable.
Le service envoie des requêtes aux pods des trois variantes de charge de travail, car les contraintes d’étiquette de sélecteur sont satisfaites. Le manifeste Kubernetes respecte ces requêtes lors de la création de variantes de base et de validité. Ce comportement de routage obtient l’effet prévu du routage uniquement d’une partie du nombre total de requêtes vers le canary.
Comparez les charges de travail de base et de validité à l’aide d’une tâche d’intervention manuelle dans les pipelines de mise en production ou d’une tâche de retard dans les pipelines YAML. Effectuez la comparaison avant d’utiliser l’action de promotion ou de rejet de la tâche.
Déployer l’action
Le code YAML suivant est un exemple de déploiement sur un espace de noms Kubernetes à l’aide de fichiers manifestes :
steps:
- task: KubernetesManifest@0
displayName: Deploy
inputs:
kubernetesServiceConnection: someK8sSC1
namespace: default
manifests: |
manifests/deployment.yml
manifests/service.yml
containers: |
foo/demo:$(tagVariable1)
bar/demo:$(tagVariable2)
imagePullSecrets: |
some-secret
some-other-secret
Dans l’exemple ci-dessus, la tâche tente de trouver des correspondances pour les images foo/demo
et bar/demo
dans les champs d’image des fichiers manifeste. Pour chaque correspondance trouvée, la valeur de tagVariable1
ou de tagVariable2
est ajoutée en tant que balise au nom de l’image. Vous pouvez également spécifier des synthèses dans l’entrée de conteneurs pour la substitution d’artefact.
Notes
Bien que vous puissiez créer deploy
des actions , promote
et reject
avec une entrée YAML liée à la stratégie de déploiement, la prise en charge d’une tâche d’intervention manuelle n’est actuellement pas disponible pour les pipelines de build.
Pour les pipelines de mise en production, nous vous conseillons d’utiliser des actions et des entrées liées à la stratégie de déploiement dans la séquence suivante :
- Action de déploiement spécifiée avec
strategy: canary
etpercentage: $(someValue)
. - Tâche d’intervention manuelle permettant de suspendre le pipeline et de comparer la variante ligne de base avec la variante canary.
- Action de promotion qui s’exécute si une tâche d’intervention manuelle est reprise et une action de rejet qui s’exécute si une tâche d’intervention manuelle est rejetée.
Créer une action de secret
Le code YAML suivant montre un exemple de création de secrets de registre Docker à l’aide d’une connexion au service Docker Registry :
steps:
- task: KubernetesManifest@0
displayName: Create secret
inputs:
action: createSecret
secretType: dockerRegistry
secretName: foobar
dockerRegistryEndpoint: demoACR
kubernetesServiceConnection: someK8sSC
namespace: default
Ce code YAML montre un exemple de création de secrets génériques :
steps:
- task: KubernetesManifest@0
displayName: Create secret
inputs:
action: createSecret
secretType: generic
secretName: some-secret
secretArguments: --from-literal=key1=value1
kubernetesServiceConnection: someK8sSC
namespace: default
Action baker
Le code YAML suivant est un exemple de baking de fichiers manifeste à partir de graphiques Helm. Notez l’utilisation d’une entrée de nom dans la première tâche. Ce nom est ensuite référencé à partir de l’étape de déploiement pour spécifier le chemin d’accès aux manifestes qui ont été produits par l’étape bake.
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
Notes
Pour utiliser Helm directement pour gérer les mises en production et les restaurations, consultez la tâche Empaqueter et déployer des graphiques Helm.
Exemple Kustomize
Le code YAML suivant est un exemple de fichiers manifeste de baking générés avec Kustomize qui contiennent un kustomization.yaml
fichier.
steps:
- task: KubernetesManifest@0
name: bake
displayName: Bake K8s manifests from kustomization path
inputs:
action: bake
renderType: kustomize
kustomizationPath: folderContainingKustomizationFile
- task: KubernetesManifest@0
displayName: Deploy K8s manifests
inputs:
kubernetesServiceConnection: k8sSC1
manifests: $(bake.manifestsBundle)
Exemple Kompose
Le code YAML suivant est un exemple de baking de fichiers manifeste générés avec Kompose, un outil de conversion pour Docker Compose.
steps:
- task: KubernetesManifest@0
name: bake
displayName: Bake K8s manifests from Docker Compose
inputs:
action: bake
renderType: kompose
dockerComposeFile: docker-compose.yaml
- task: KubernetesManifest@0
displayName: Deploy K8s manifests
inputs:
kubernetesServiceConnection: k8sSC1
manifests: $(bake.manifestsBundle)
Action de mise à l’échelle
Le code YAML suivant montre un exemple de mise à l’échelle d’objets :
steps:
- task: KubernetesManifest@0
displayName: Scale
inputs:
action: scale
kind: deployment
name: bootcamp-demo
replicas: 5
kubernetesServiceConnection: someK8sSC
namespace: default
Action de correctif
Le code YAML suivant montre un exemple de correction d’objets :
steps:
- task: KubernetesManifest@0
displayName: Patch
inputs:
action: patch
kind: pod
name: demo-5fbc4d6cd9-pgxn4
mergeStrategy: strategic
patch: '{"spec":{"containers":[{"name":"demo","image":"foobar/demo:2239"}]}}'
kubernetesServiceConnection: someK8sSC
namespace: default
Supprimer l'action
Ce code YAML montre un exemple de suppression d’objet :
steps:
- task: KubernetesManifest@0
displayName: Delete
inputs:
action: delete
arguments: deployment expressapp
kubernetesServiceConnection: someK8sSC
namespace: default
Dépannage
Mon cluster Kubernetes se trouve derrière un pare-feu et j’utilise des agents hébergés. Comment puis-je effectuer un déploiement sur ce cluster ?
Vous pouvez accorder l’accès à travers votre pare-feu aux agents hébergés en autorisant leurs adresses IP. Pour plus d’informations, consultez Plages d’adresses IP d’agent.
Comment fonctionnent les requêtes d’itinéraires de service stables et variants avec des déploiements de contrôles de validité ?
La relation de sélecteur d’étiquette entre les pods et les services dans Kubernetes permet de configurer des déploiements afin qu’un seul service route les requêtes vers les variants stable et de contrôles de validité. La tâche de manifeste Kubernetes l’utilise pour les déploiements de contrôles de validité.
Si la tâche inclut les entrées de action: deploy
et strategy: canary
, pour chaque charge de travail (Deployment, ReplicaSet, Pod, ...) définie dans les fichiers manifeste d’entrée, un et -canary
une -baseline
variante du déploiement sont créés. Dans cet exemple, il existe un déploiement sampleapp
dans le fichier manifeste d’entrée et qu’une fois l’exécution 22 du pipeline terminée, la variante stable de ce déploiement nommée sampleapp
est déployée dans le cluster. Dans l’exécution suivante (dans ce cas, exécutez le numéro 23), la tâche de manifeste Kubernetes avec action: deploy
et strategy: canary
entraînerait la création de déploiements sampleapp-baseline et sampleapp-canary dont le nombre de réplicas est déterminé par le produit de l’entrée de percentage
tâche avec la valeur du nombre souhaité de réplicas pour la dernière variante stable de en fonction des sampleapp
fichiers manifeste d’entrée.
Si l’on exclut le nombre de réplicas, la version de base a la même configuration que la variante stable, tandis que la version canary a les nouvelles modifications introduites par l’exécution actuelle (dans ce cas, le numéro d’exécution 23). Si une intervention manuelle est configurée dans le pipeline après l’étape mentionnée ci-dessus, cela permettrait de le suspendre afin que l’administrateur du pipeline puisse évaluer les mesures clés pour les versions de ligne de base et canary puis prendre la décision de déterminer si les modifications de canary sont fiables et suffisantes pour un déploiement complet.
Lesaction: promote
entrées et strategy: canary
ou action: reject
et strategy: canary
des tâches du manifeste Kubernetes peuvent être utilisées pour promouvoir ou rejeter les modifications de validité respectivement. Notez que dans les deux cas, à la fin de cette étape, seul le variant stable des charges de travail déclarées dans les fichiers manifestes d’entrée reste déployé dans le cluster, tandis que les versions de ligne de base et canary éphémères sont nettoyées.
Configuration requise
Condition requise | Description |
---|---|
Types de pipelines | YAML, build classique, version classique |
S’exécute sur | Agent, DeploymentGroup |
Demandes | None |
Capabilities | Cette tâche ne répond à aucune demande pour les tâches suivantes dans le travail. |
Restrictions de commande | Quelconque |
Variables paramétrables | Quelconque |
Version de l’agent | Toutes les versions d’agent prises en charge. |
Catégorie de la tâche | Déployer |