Configurez les paramètres de mise à l’échelle pour gérer les performances et le coût de votre pool DevOps managé. Pour plus d’informations sur la tarification et les performances, consultez Gérer les coûts et les performances.
État de l’agent
Les pools DevOps managés peuvent être configurés comme sans état ou avec état.
Pools sans état : fournissez un nouvel agent pour chaque travail.
Pools avec état : autoriser le partage d’agents entre plusieurs travaux.
Le paramètre par défaut d’un pool DevOps géré est sans état (agent frais à chaque fois), mais dans certains cas, les équipes peuvent souhaiter réutiliser les agents afin de réutiliser les packages ou fichiers créés lors de l’exécution précédente du pipeline. La charge de travail de génération est un scénario courant où les équipes souhaitent conserver l’état et réutiliser les agents. Vous pouvez obtenir des pools avec état via des pools DevOps managés tout en l’équilibrant avec les meilleures pratiques de sécurité. Par défaut, un agent peut être réutilisé pendant un maximum de 7 jours, mais vous pouvez le configurer pour être recyclé plus tôt.
Remarque
Les pools sans état ou l’utilisation du paramètre d’état de l’agent Fresh chaque fois sont recommandés par les experts de sécurité en tant que défense contre les attaques de chaîne logistique.
Pools sans état
Lorsqu’un agent sans état est configuré, un nouvel agent est acheté pour chaque travail et est ignoré une fois le travail terminé.
Les agents sont configurés à l’aide de la agentProfile propriété dans la ressource Pools DevOps managés. Dans l’exemple suivant, un agent sans état est spécifié.
Les agents sont configurés à l’aide du paramètre lors agent-profile ou de la mise à jour d’un pool.
Dans l’exemple suivant, un agent sans état est spécifié sans agent de secours.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
L’exemple suivant montre le contenu du fichier agent-profile.json .
{
"Stateless": {}
}
Lorsque l’état de l’agent est défini sur Fresh agent chaque fois, un nouvel agent est acheté pour chaque travail et est ignoré une fois le travail terminé.
Lorsque le même agent peut être utilisé par plusieurs builds ("kind": "stateful" dans des modèles de ressources ou { "stateful": {...} } dans Azure CLI) est activé, les agents du pool sont considérés comme avec état. Les pools avec état sont configurés à l’aide des paramètres suivants.
La durée maximale de vie des agents de secours (maxAgentLifetime) configure la durée maximale pendant laquelle un agent dans un pool avec état peut s’exécuter avant qu’il ne soit arrêté et ignoré. Le format de durée maximale de vie pour les agents de secours est dd.hh:mm:ss. La valeur par défaut de la durée maximale de vie pour les agents de secours est définie sur la durée maximale autorisée de sept jours (7.00:00:00).
La période de grâce (gracePeriodTimeSpan) configure la durée pendant laquelle un agent dans un pool avec état attend de nouveaux travaux avant de s’arrêter une fois que tous les travaux actuels et mis en file d’attente sont terminés. Le format de la période de grâce est dd.hh:mm:ss et la valeur par défaut n’est pas une période de grâce.
Bien que les agents dans les pools sans état soient arrêtés et ignorés après chaque travail, les agents dans les pools avec état continuent à s’exécuter si l’une des conditions suivantes est remplie.
S’il existe une autre tâche mise en file d’attente lorsque le premier travail est terminé, les pools DevOps managés envoient ce travail à l’agent qui a exécuté le premier travail au lieu de l’arrêter.
S’il existe une période de grâce configurée pour le pool, les agents attendent les nouveaux travaux pendant la durée spécifiée par la période de grâce avant d’arrêter.
Si les agents de secours sont activés et que l’image de l’agent répond aux critères de la période d’approvisionnement active, l’agent continue à s’exécuter et à attendre des travaux.
Les agents en cours d’exécution dans des pools avec état sont arrêtés et ignorés s’ils s’exécutent en continu pendant la durée spécifiée par durée maximale pour les agents de secours, même si les conditions précédentes sont remplies. Par exemple, si la durée maximale de vie des agents de secours est configurée pendant trois jours et que le mode Agent de secours est défini sur Manuel, All Week Scheme (Machines disponibles 24/7), les agents sont redémarrés après trois jours de temps d’activité continus.
Important
Les agents dans les pools avec état peuvent toujours être arrêtés et ignorés une fois qu’un travail est terminé s’il n’existe aucune période de grâce, aucune période d’approvisionnement active pour les agents de secours et aucun travail mis en file d’attente correspondant à l’agent. Une fois qu’un agent est ignoré, tout état est perdu.
La période de grâce permet d’exécuter les pools avec état les plus rentables pour les pipelines avec une charge cohérente et n’exige pas l’utilisation du mode agent de secours pour maintenir les agents en ligne et prêts à accepter des travaux.
Mode agent de secours
Lorsque vous créez un pool, le mode Agent de secours est désactivé par défaut et aucun agent de secours n’est immédiatement affecté à vos pipelines, ce qui peut avoir besoin d’attendre quelques instants, jusqu’à 15 minutes, pour qu’un agent soit approvisionné à la demande. Pour de meilleures performances, activez le mode agent de secours et configurez une planification d’agent de secours qui fournit de la capacité pour votre charge de travail.
Lorsqu’une planification d’agent de secours est configurée, les pools DevOps managés comparent régulièrement le nombre d’agents provisionnés au nombre d’agents de secours spécifié par le schéma d’approvisionnement actuel et démarre les nouveaux agents selon les besoins pour maintenir le nombre d’agents de secours. Vous pouvez afficher l’état actuel et le nombre d’agents dans votre pool à l’aide du volet Agents.
Important
Le nombre d’approvisionnement dans un schéma ne peut pas être supérieur aux agents maximum configurés dans les paramètres du pool.
Le mode agent de secours est configuré à l’aide des paramètres suivants :
Désactivé : le mode agent de secours est désactivé et les agents sont approvisionnés à la demande lorsque les travaux sont mis en file d’attente.
Manuel : configurer une planification manuelle de secours.
Automatique : utilisez une planification de secours automatique basée sur l’historique d’utilisation de l’agent et configurable pour les coûts et les performances.
Les agents de secours sont configurés à l’aide de la resourcePredictionsProfile section de la agentProfile propriété. Définissez "kind": "Manual" la configuration d’un modèle de début à partir de zéro, d’un schéma de semaine ou de toute la semaine, et spécifiez les détails du schéma dans la resourcePredictions section. Définissez "kind": "Automatic" pour configurer des agents de secours automatiques. Omettez la ResourcePredictionsProfile section pour désactiver les agents de secours. Pour plus d’informations sur la configuration de chaque type de mise à l’échelle, consultez les sections suivantes.
Les agents sont configurés à l’aide du paramètre lors agent-profile ou de la mise à jour d’un pool.
Les agents de secours sont configurés à l’aide de la resourcePredictionsProfile section du agent-profile paramètre. Définissez "Manual": {} la configuration d’un modèle de début à partir de zéro, d’un schéma de semaine ou de toute la semaine, et spécifiez les détails du schéma dans la resourcePredictions section. Définissez "Automatic": {} pour configurer des agents de secours automatiques. Pour plus d’informations sur la configuration de chaque type de mise à l’échelle, consultez les sections suivantes.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
L’exemple suivant montre le contenu du fichier agent-profile.json .
Le mode manuel est mieux adapté aux équipes qui ont connaissance de leurs modèles d’utilisation des pipelines CI/CD. Si vous sélectionnez l’option manuelle, vous devez définir votre schéma de préprovisionnement en fonction de votre compréhension du moment où les agents du pool sont les plus susceptibles d’être utilisés et le nombre d’agents susceptibles d’être utilisés, et spécifier un nombre d’agents qui répondent à la demande projetée.
Vous pouvez créer votre propre planification d’approvisionnement ou choisir parmi l’une des planifications prédéfinies, et vous pouvez configurer le fuseau horaire à utiliser pour spécifier les planifications. La valeur par défaut du fuseau horaire de préapprovisionnement est (UTC) Temps universel coordonné.
La configuration manuelle de l’agent de secours peut être configurée de l’une des trois manières suivantes.
Démarrer à partir de zéro - Configurer un ensemble de périodes d’approvisionnement pour les agents de secours
Chacun des démarrages rapides de préprovisionnement comporte les paramètres courants suivants en plus des paramètres spécifiques pour ce démarrage rapide.
Le fuseau horaire de préprovisionnement vous permet de configurer le fuseau horaire pour les heures de votre schéma de préprovisionnement. La valeur par défaut du fuseau horaire de préapprovisionnement est (UTC) Temps universel coordonné.
Le pourcentage d’agent de secours configure le pourcentage d’agents de secours souhaités pour chaque image. Vous pouvez entrer * pour vous assurer que toutes les images sont approvisionnées de manière égale, ou vous pouvez spécifier un entier compris entre 0 et 100 pour représenter un pourcentage. Si vous spécifiez un pourcentage, le total de toutes les images doit être égal à 100. Si vous avez une seule image, spécifiez * ou 100. Le pourcentage d’agent de secours est configuré dans la section lors de l’utilisation images de modèles ARM. Pour plus d’informations, consultez Configurer des images.
L’approvisionnement manuel de l’agent de secours est spécifié dans la resourcePredictionsProfile section de agentProfile, et les détails sont configurés dans la resourcePredictions section.
Spécifiez le fuseau horaire souhaité pour votre schéma à l’aide de la timeZone propriété. Par défaut, il s’agit de UTC. Pour récupérer la liste des noms de fuseau horaire de cette propriété, consultez La méthode TimeZoneInfo.GetSystemTimeZones.
La planification des agents de secours est définie par la daysData liste. La daysData liste peut avoir un ou sept éléments.
Une daysData liste avec sept éléments correspond aux jours de la semaine, en commençant par dimanche. Chacun de ces sept éléments peut avoir zéro ou plusieurs "time": count entrées, en spécifiant une heure au format 24 heures et un nombre d’agents de secours. Le nombre spécifié d’agents de secours est conservé jusqu’à l’entrée suivante "time": count , qui peut être le même jour ou le jour suivant.
Une daysData liste avec un seul élément définit un schéma All Week, où l’entrée unique "time": count correspond au nombre d’agents de secours pour la semaine entière.
L’exemple suivant est un schéma d’agent de secours manuel, à l’aide Eastern Standard Timed’un seul agent approvisionné lundi à vendredi, de 9h00 (nombre 1d’agents de secours) à 17h00 (nombre 0d’agents de secours).
Un seul daysData élément contient un dictionnaire de temps et de nombres d’agents de secours. Chaque "time" : count entrée spécifie le nombre d’agents de secours à planifier à partir de l’heure spécifiée, au format 24 heures. Les entrées consécutives "time" : count spécifient une séquence de nombres d’agents planifiés pour ce jour.
"daysData": [
{}, # Schedule of standby agent count adjustments for Sunday
{ # Schedule of standby agent count adjustments for Monday
"09:00:00": 1, # Adjust standby agent count to 1
"17:00:00": 0 # Adjust standby agent count to 0
},
{ # Schedule of standby agent count adjustments for Tuesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Wednesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Thursday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Friday
"09:00:00": 1,
"17:00:00": 0
},
{} # Schedule of standby agent count adjustments for Saturday
]
Les nombres d’agents de secours ne sont pas réinitialisés automatiquement à zéro à la fin d’un jour ou à la fin de la semaine, et la spécification d’un élément vide daysData ne désactive pas les agents de secours pour ce jour. Un élément vide daysData signifie qu’il n’y a aucune modification de la planification du nombre d’agents de secours pour ce jour-là. Pour définir l’agent de secours sur zéro à partir d’une période spécifique, vous devez fournir explicitement une "time" : count entrée avec un count de 0.
Exemples
Pour ne pas ajuster le nombre d’agents de secours spécifié à la fin du jour précédent (ou la semaine si vous configurez la première période de la semaine), spécifiez un daysData élément avec zéro entrée.
{
}
Pour planifier un seul agent de secours à démarrer et 09:00:00 s’arrêter à 17:00:00 (à l’aide du fuseau horaire spécifié par la resourcePredictions propriété), spécifiez la configuration suivante.
{
"09:00:00": 1,
"17:00:00": 0
}
Pour planifier un seul agent de secours à partir de minuit à 09:00:00minuit, suivi de 10 agents de secours jusqu’à 17:00:00, spécifiez la configuration suivante.
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Pour planifier la disponibilité d’un agent de secours à 09:00:00 partir du jour spécifié et l’arrêt au 17:00:00 jour suivant, utilisez deux éléments consécutifs daysData .
{
"09:00:00": `1`
},
{
"17:00:00": 0
}
Les agents sont configurés à l’aide du paramètre lors agent-profile ou de la mise à jour d’un pool.
az mdp pool create \
--agent-profile agent-profile.json
# other parameters omitted for space
L’exemple suivant montre le contenu du fichier agent-profile.json .
L’approvisionnement manuel de l’agent de secours est spécifié dans la resourcePredictionsProfile section du agent-profile paramètre et les détails sont configurés dans la resourcePredictions section.
Spécifiez le fuseau horaire souhaité pour votre schéma à l’aide de la timeZone propriété. Par défaut, il s’agit de UTC. Pour récupérer la liste des noms de fuseau horaire de cette propriété, consultez La méthode TimeZoneInfo.GetSystemTimeZones.
La planification des agents de secours est définie par la daysData liste. La daysData liste peut avoir un ou sept éléments.
Une daysData liste avec sept éléments correspond aux jours de la semaine, en commençant par dimanche. Chacun de ces sept éléments peut avoir zéro ou plusieurs "time": count entrées, en spécifiant une heure au format 24 heures et un nombre d’agents de secours. Le nombre spécifié d’agents de secours est conservé jusqu’à l’entrée suivante "time": count , qui peut être le même jour ou le jour suivant.
Une daysData liste avec un seul élément définit un schéma All Week, où l’entrée unique "time": count correspond au nombre d’agents de secours pour la semaine entière.
L’exemple suivant est un schéma d’agent de secours manuel, à l’aide Eastern Standard Timed’un seul agent approvisionné lundi à vendredi, de 9h00 (nombre 1d’agents de secours) à 17h00 (nombre 0d’agents de secours).
Un seul daysData élément contient un dictionnaire de temps et de nombres d’agents de secours. Chaque "time" : count entrée spécifie le nombre d’agents de secours à planifier à partir de l’heure spécifiée, au format 24 heures. Les entrées consécutives "time" : count spécifient une séquence de nombres d’agents planifiés pour ce jour.
"daysData": [
{}, # Schedule of standby agent count adjustments for Sunday
{ # Schedule of standby agent count adjustments for Monday
"09:00:00": 1, # Adjust standby agent count to 1
"17:00:00": 0 # Adjust standby agent count to 0
},
{ # Schedule of standby agent count adjustments for Tuesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Wednesday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Thursday
"09:00:00": 1,
"17:00:00": 0
},
{ # Schedule of standby agent count adjustments for Friday
"09:00:00": 1,
"17:00:00": 0
},
{} # Schedule of standby agent count adjustments for Saturday
]
Les nombres d’agents de secours ne sont pas réinitialisés automatiquement à zéro à la fin d’un jour ou à la fin de la semaine, et la spécification d’un élément vide daysData ne désactive pas les agents de secours pour ce jour. Un élément vide daysData signifie qu’il n’y a aucune modification de la planification du nombre d’agents de secours pour ce jour-là. Pour définir l’agent de secours sur zéro à partir d’une période spécifique, vous devez fournir explicitement une "time" : count entrée avec un count de 0.
Exemples
Pour ne pas ajuster le nombre d’agents de secours spécifié à la fin du jour précédent (ou la semaine si vous configurez la première période de la semaine), spécifiez un daysData élément avec zéro entrée.
{
}
Pour planifier un seul agent de secours à démarrer et 09:00:00 s’arrêter à 17:00:00 (à l’aide du fuseau horaire spécifié par la resourcePredictions propriété), spécifiez la configuration suivante.
{
"09:00:00": 1,
"17:00:00": 0
}
Pour planifier un seul agent de secours à partir de minuit à 09:00:00minuit, suivi de 10 agents de secours jusqu’à 17:00:00, spécifiez la configuration suivante.
{
"00:00:00": 1,
"09:00:00": 10,
"17:00:00": 0
}
Pour planifier la disponibilité d’un agent de secours à 09:00:00 partir du jour spécifié et l’arrêt au 17:00:00 jour suivant, utilisez deux éléments consécutifs daysData .
{
"09:00:00": `1`
},
{
"17:00:00": 0
}
Commencer à partir de zéro
Si vous choisissez de commencer à partir de zéro, vous pouvez ajouter une liste de périodes d’approvisionnement pour servir de schéma d’approvisionnement. Chaque période d’approvisionnement se compose d’un jour de début, d’un jour de fin, d’un fuseau horaire, d’une heure de début, d’une heure de fin et d’un nombre. Les périodes d’approvisionnement ne peuvent pas se chevaucher.
Propriété
Description
Plusieurs jours
Lorsque vous avez coché, vous pouvez configurer à la fois un jour de début et un jour de fin pour votre schéma d’approvisionnement.
Jusqu’à la prochaine période
Lorsqu’elle est cochée, la période d’approvisionnement s’exécute à partir de l’heure de début jusqu’au début de la période d’approvisionnement suivante.
Jour de début
Jour où commence la période d’approvisionnement.
Jour de fin
Le jour où la période d’approvisionnement se termine. Obligatoire si l’option Multi-Day est cochée.
Heure de Début
Heure de début de la période d’approvisionnement.
Heure de fin
Heure de fin de la période d’approvisionnement. Obligatoire, sauf si la période suivante est cochée.
Count
Nombre d’agents de secours à provisionner. Ce nombre doit être supérieur à zéro et ne doit pas être supérieur à la valeur maximale des agents configurés dans les paramètres du pool.
Après avoir créé une période d’approvisionnement, vous pouvez supprimer ou modifier la période de la liste des schémas de préprovisionnement.
L’exemple suivant configure un schéma manuel avec 1 agent approvisionné le lundi matin de 12h00 à 17h00 EST.
Si vous choisissez le schéma de la semaine, vous pouvez spécifier une heure de début et une heure de fin dans lesquelles le nombre spécifié d’agents de secours sera en veille chaque jour de la semaine.
Propriété
Description
Heure de Début
Heure de début de la période d’approvisionnement.
Heure de fin
Heure de fin de la période d’approvisionnement.
Nombre d’approvisionnement
Nombre d’agents de secours à provisionner. Ce nombre doit être supérieur à zéro et ne doit pas être supérieur à la valeur maximale des agents configurés dans les paramètres du pool.
L’exemple suivant configure quatre agents à utiliser pendant les heures de travail avec 0 agents pendant les heures non ouvrées et les week-ends, à l’aide de l’heure standard de l’Est.
Si vous ne connaissez pas vos modèles d’utilisation et que vous souhaitez vous appuyer sur des prévisions automatiques basées sur des données passées, choisissez Automatique. Vous pouvez équilibrer les performances des coûts et des agents à l’aide d’un curseur avec les cinq options suivantes. Les pools DevOps managés exécutent une requête au cours de vos trois dernières semaines de données historiques (le cas échéant), organisant les sessions en file d’attente du pool en cinq minutes et affectant le centile spécifié (pour éviter les pics) à chaque heure.
Plus économique (MostCostEffective) - 10e centile
Plus économique (MoreCostEffective) - 25e centile
Équilibré (par défaut) (Balanced) - 50e centile
Plus de performances (MorePerformance) - 75e centile