Cette page explique comment demander des durées d'exécution étendues pour les pods avant qu'ils ne soient évincés par Google Kubernetes Engine (GKE).
À propos de l'éviction de pods lancée par GKE
Les évictions de pods font partie intégrante de l'exécution des charges de travail sur Kubernetes.
GKE supprime les charges de travail lors des événements planifiés, tels que les mises à jour automatiques des nœuds et le scaling à la baisse de l'autoscaling, pour garantir que vos nœuds sont à jour et optimisés pour une utilisation efficace des ressources. Par défaut, GKE envoie un signal d'arrêt au conteneur dès que l'événement se produit, après quoi le délai de grâce du conteneur s'arrête avant que Kubernetes évince le pod. Pour les mises à niveau automatiques des nœuds, le délai de grâce peut aller jusqu'à une heure. Pour les événements de scaling à la baisse, le délai de grâce peut aller jusqu'à 10 minutes.
Kubernetes dispose de fonctionnalités intégrées que les conteneurs peuvent utiliser pour gérer correctement les évictions, telles que les PodDisruptionBudgets et les délais de grâce.
Toutefois, certaines charges de travail, telles que les files d'attente par lot ou les serveurs de jeu multijoueurs, doivent être exécutées plus longtemps avant d'être supprimées. Le délai de grâce par défaut accordé par GKE lors des évictions lancées par GKE peut ne pas être suffisant pour ces charges de travail. Dans ces situations, vous pouvez indiquer à Autopilot d'éviter d'expulser des charges de travail spécifiques pendant sept jours maximum.
Cas d'utilisation
Dans certaines situations, vous pouvez indiquer à GKE d'éviter d'évincer les charges de travail comme suit :
Vous exécutez des serveurs de jeu multijoueurs qui suppriment les joueurs de leurs sessions si ceux-ci s'arrêtent plus tôt.
Vous exécutez un logiciel audio ou de visioconférence qui peut perturber les réunions en cours si les serveurs s'arrêtent.
Vous exécutez des tâches qui nécessitent du temps et l'arrêt anticipé entraîne une perte de travail en cours.
Vous exécutez un service avec état moins tolérant aux perturbations et vous souhaitez minimiser la fréquence des interruptions.
Tarifs
Vous pouvez demander des durées d'exécution prolongées pour vos pods sans frais supplémentaires.
Toutefois, tenez compte des changements de comportement suivants qui pourraient avoir une incidence sur vos tarifs :
Les clusters Autopilot appliquent des valeurs minimales plus élevées pour les demandes de ressources de pods de durée étendue. Les clusters Autopilot vous facturent les demandes de ressources de vos pods en cours d'exécution. La surcharge du système et la capacité des nœuds inutilisés ne vous sont pas facturées.
L'utilisation de pods de durée étendue peut augmenter le nombre de nœuds dans votre cluster, ce qui peut affecter l'utilisation des adresses IP et l'évolutivité. Si vous avez des DaemonSets qui s'exécutent sur chaque nœud, le nombre de DaemonSets dans le cluster sera plus élevé.
Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. Si vous avez déjà installé gcloud CLI, assurez-vous de disposer de la dernière version en exécutant la commande gcloud components update.
Assurez-vous de disposer d'un cluster Autopilot exécutant la version 1.27 ou ultérieure.
Limites
Vous ne pouvez pas demander de durées d'exécution étendues pour vos pods Spot.
Les temps d'extraction d'images sont comptabilisés lors du calcul de la durée d'exécution étendue.
Vous pouvez avoir au maximum 50 charges de travail de durée étendue (avec différentes requêtes de processeur) dans chaque cluster. Cela signifie que jusqu'à 50 ensembles de valeurs de requête de processeur différents, après avoir passé les contrôles minimum, ratios et contrôles de taille des ressources Autopilot, peuvent avoir une durée étendue dans chaque cluster.
Vous ne pouvez pas utiliser l'affinité inter-pod Kubernetes dans des pods de durée prolongée.
Dans la mesure du possible, GKE place chaque pod de durée d'exécution étendue sur son propre nœud. Ce comportement garantit que les nœuds peuvent effectuer un scaling à la baisse s'ils sont sous-utilisés.
Pour demander une durée d'exécution étendue pour un pod, définissez l'annotation cluster-autoscaler.kubernetes.io/safe-to-evict de Kubernetes sur false dans la spécification du pod.
Enregistrez le manifeste suivant sous le nom extended-deployment.yaml :
Les pods continuent de s'exécuter pendant au moins sept jours avant qu'un scaling à la baisse ou une mise à niveau automatique des nœuds ne puisse se produire.
Remarques et recommandations
Lorsque vous utilisez cette fonctionnalité, tenez compte des points suivants :
Les pods de durée prolongée ne sont pas protégés contre l'éviction basée sur la priorité. Si vous utilisez des classes PriorityClass Kubernetes, envisagez les méthodes suivantes pour minimiser la probabilité d'éviction basée sur la priorité :
Assurez-vous que vos pods de durée prolongée utilisent la priorité la plus élevée, afin que les autres pods d'utilisateur n'évincent pas vos pods de durée prolongée.
Les pods système s'exécutent avec la priorité la plus élevée et peuvent toujours évincer les pods avec une durée prolongée. Pour minimiser cette probabilité, GKE planifie les pods système sur le nœud avant de planifier le pod de durée étendue.
Les pods de durée prolongée peuvent toujours être évincés plus tôt dans les cas suivants :
Éviction pour libérer de l'espace pour les pods d'utilisateur prioritaires (avec une classe PriorityClass plus élevée)
Éviction pour libérer de l'espace pour les composants système Kubernetes
Événements déclenchés par l'utilisateur, tels que le drainage d'un nœud
Vous pouvez utiliser l'annotation cluster-autoscaler.kubernetes.io/safe-to-evict dans des clusters standards, mais le résultat n'est pas le même. Les pods s'exécutent indéfiniment, même si un événement de scaling à la baisse se produit, empêchant la suppression des nœuds sous-utilisés et entraînant une facturation de ces nœuds. Les pods ne sont pas non plus protégés contre les évictions causées par les mises à niveau automatiques des nœuds.
Sauf indication contraire, le contenu de cette page est régi par une licence Creative Commons Attribution 4.0, et les échantillons de code sont régis par une licence Apache 2.0. Pour en savoir plus, consultez les Règles du site Google Developers. Java est une marque déposée d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/09/01 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Difficile à comprendre","hardToUnderstand","thumb-down"],["Informations ou exemple de code incorrects","incorrectInformationOrSampleCode","thumb-down"],["Il n'y a pas l'information/les exemples dont j'ai besoin","missingTheInformationSamplesINeed","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/09/01 (UTC)."],[],[],null,["# Extend the run time of Autopilot Pods\n\n[Autopilot](/kubernetes-engine/docs/concepts/autopilot-overview)\n\n*** ** * ** ***\n\nThis page shows you how to request extended run times for Pods before they're\nevicted by Google Kubernetes Engine (GKE).\n\nAbout GKE-initiated Pod eviction\n--------------------------------\n\nPod evictions are a normal part of running workloads on Kubernetes.\nGKE evicts workloads during scheduled events, such as automatic\nnode upgrades and autoscaling scale-downs, to ensure that your nodes are\nup-to-date and optimized for efficient resource usage. By default,\nGKE sends a termination signal to the container as soon as the\nevent occurs, after which the container has a grace period to terminate before\nKubernetes evicts the Pod. For automatic node upgrades, the grace period\ncan be up to one hour. For scale-down events, the grace period can be up to\n10 minutes.\n\nKubernetes has built-in features that containers can use to gracefully handle\nevictions, such as\n[PodDisruptionBudgets](https://kubernetes.io/docs/tasks/run-application/configure-pdb/)\nand [graceful termination\nperiods](https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-termination/).\nHowever, some workloads, such as batch queues or multiplayer game servers, need\nto run for a longer period of time before being evicted. The default grace\nperiod that GKE grants during GKE-initiated\nevictions might not be enough for these workloads. In these situations, you can\ntell Autopilot to avoid evicting specific workloads for up to 7 days.\n\n### Use cases\n\nSome situations in which you might want to tell GKE to avoid\nevicting workloads include the following:\n\n- You run multiplayer game servers that would kick players out of their sessions if the servers terminated early.\n- You run audio or video conferencing software that would disrupt in-progress meetings if the servers terminated.\n- You run tasks that need time to complete, and early termination would cause a loss of in-progress work.\n- You run a stateful service that is less tolerant to disruption and you want to minimize how often disruptions occur.\n\nPricing\n-------\n\nYou can request extended run times for your Pods at no additional charge.\nHowever, consider the following behavioral changes that might impact your\npricing:\n\n- Autopilot clusters enforce [higher minimum values](/kubernetes-engine/docs/concepts/autopilot-resource-requests#workload-separation) for the resource requests of extended duration Pods. Autopilot clusters charge you for the resource requests of your running Pods. You're not charged for system overhead or for unused node capacity.\n- Using extended duration Pods might increase the number of nodes in your cluster, which might affect IP address usage and scalability. If you have DaemonSets that run on every node, this results in more DaemonSets in the cluster,\n\nFor pricing details, see\n[Autopilot pricing](/kubernetes-engine/pricing#autopilot_mode).\n\nBefore you begin\n----------------\n\nBefore you start, make sure that you have performed the following tasks:\n\n- Enable the Google Kubernetes Engine API.\n[Enable Google Kubernetes Engine API](https://console.cloud.google.com/flows/enableapi?apiid=container.googleapis.com)\n- If you want to use the Google Cloud CLI for this task, [install](/sdk/docs/install) and then [initialize](/sdk/docs/initializing) the gcloud CLI. If you previously installed the gcloud CLI, get the latest version by running `gcloud components update`. **Note:** For existing gcloud CLI installations, make sure to set the `compute/region` [property](/sdk/docs/properties#setting_properties). If you use primarily zonal clusters, set the `compute/zone` instead. By setting a default location, you can avoid errors in the gcloud CLI like the following: `One of [--zone, --region] must be supplied: Please specify location`. You might need to specify the location in certain commands if the location of your cluster differs from the default that you set.\n\n\u003c!-- --\u003e\n\n- Ensure that you have an [Autopilot cluster](/kubernetes-engine/docs/how-to/creating-an-autopilot-cluster) running version 1.27 or later.\n\n### Limitations\n\n- You can't request extended run times for your Spot Pods.\n- Image pull times are counted when calculating the extended run time.\n- You can have a maximum of 50 extended duration workloads (with different CPU requests) in each cluster. This means that up to 50 different sets of CPU request values, after passing Autopilot resource minimums, ratios, and increment size checks, can have extended duration in each cluster.\n- You can't use Kubernetes inter-Pod affinity in extended duration Pods.\n- Whenever possible, GKE places each extended run time Pod on its own node. This behavior ensures that nodes can scale down if they're under-utilized.\n- You can't request extended run times for Pods that target [custom compute classes](/kubernetes-engine/docs/concepts/about-custom-compute-classes).\n\nRequest extended run time\n-------------------------\n\nTo request extended run time for a Pod, set the Kubernetes\n`cluster-autoscaler.kubernetes.io/safe-to-evict` annotation to `false` in the\nPod specification.\n\n1. Save the following manifest as `extended-deployment.yaml`:\n\n apiVersion: apps/v1\n kind: Deployment\n metadata:\n name: extended-pods\n labels:\n duration: extended\n spec:\n selector:\n matchLabels:\n duration: extended\n template:\n metadata:\n annotations:\n cluster-autoscaler.kubernetes.io/safe-to-evict: \"false\"\n labels:\n duration: extended\n spec:\n containers:\n - name: example-container\n image: registry.k8s.io/pause\n resources:\n requests:\n cpu: 200m\n\n2. Create the Deployment:\n\n kubectl create -f extended-deployment.yaml\n\nThe Pods continue to run for at least 7 days before a scale-down or a node\nauto-upgrade can occur.\n\nConsiderations and recommendations\n----------------------------------\n\nWhen you use this functionality, consider the following:\n\n- Extended duration Pods aren't protected from priority-based eviction. If you use [Kubernetes PriorityClasses](/kubernetes-engine/docs/how-to/capacity-provisioning), consider the following methods to minimize the probability of priority-based eviction:\n - Ensure that your extended duration Pods use the highest priority PriorityClass, so that other user Pods don't evict your extended duration Pods.\n - Use [workload separation](/kubernetes-engine/docs/how-to/workload-separation) to run extended duration Pods separately from other Pods.\n- System Pods run with the highest priority and will always be able to evict extended duration Pods. To minimize the probability of this, GKE schedules system Pods on the node before scheduling the extended duration Pod.\n- Extended duration Pods can still be evicted early in the following situations:\n - Eviction to make space for higher-priority user Pods (using a higher PriorityClass)\n - Eviction to make space for Kubernetes system components\n - [kubelet out-of-memory eviction](https://kubernetes.io/docs/concepts/scheduling-eviction/node-pressure-eviction/) if the Pod uses more memory than it requested (OOMKill)\n - Compute Engine VM maintenance events. [Accelerator-optimized machine types](/compute/docs/accelerator-optimized-machines) are more likely to be affected by these events because those machines don't support [live migration](/compute/docs/instances/live-migration-process).\n - Node auto-repairs\n - User-initiated events such as draining a node\n- You can use the `cluster-autoscaler.kubernetes.io/safe-to-evict` annotation in Standard clusters, but the result is not the same. Pods run indefinitely even if a scale-down event occurs, preventing deletion of underutilized nodes and resulting in you continuing to pay for those nodes. Pods also aren't protected from evictions caused by node auto-upgrades.\n\nWhat's next\n-----------\n\n- [Use PriorityClasses to provision spare capacity in Autopilot for\n rapid Pod scaling](/kubernetes-engine/docs/how-to/capacity-provisioning)"]]