En esta página, se muestra cómo solicitar tiempos de ejecución extendidos para los Pods antes de que Google Kubernetes Engine (GKE) los expulse.
Acerca de la expulsión de Pods iniciada por GKE
Las expulsiones de Pods son una parte normal de la ejecución de cargas de trabajo en Kubernetes.
GKE expulsa las cargas de trabajo durante los eventos programados, como las actualizaciones automáticas de nodos y las reducciones verticales automáticas de escala, para garantizar que tus nodos estén actualizados y optimizados para un uso eficiente de los recursos. De forma predeterminada, GKE envía una señal de finalización al contenedor en cuanto se produce el evento, después de lo cual el contenedor tiene un período de gracia para finalizar antes de que Kubernetes expulse el Pod. En el caso de las actualizaciones automáticas de nodos, el período de gracia puede durar hasta una hora. Para los eventos de reducción de escala, el período de gracia puede ser de hasta 10 minutos.
Kubernetes tiene funciones integradas que los contenedores pueden usar para controlar las expulsiones de forma correcta, como los PodDisruptionBudgets y los períodos de finalización correctos.
Sin embargo, algunas cargas de trabajo, como las colas de lotes o los servidores de juegos multijugador, deben ejecutarse durante un período más prolongado antes de que se desalojen. Es posible que el período de gracia predeterminado que otorga GKE durante las expulsiones iniciadas por GKE no sea suficiente para estas cargas de trabajo. En estas situaciones, puedes indicarle a Autopilot que evites expulsar cargas de trabajo específicas durante un máximo de 7 días.
Casos de uso
Estas son algunas situaciones en las que tal vez quieras indicarle a GKE que evite expulsar cargas de trabajo:
Ejecutas servidores de juego multijugador para juegos que saturan a los jugadores de sus sesiones si los servidores finalizan de forma anticipada.
Ejecutas software de videoconferencias o audioconferencias que interrumpirían las reuniones en curso si se cerraran los servidores.
Ejecutas tareas que necesitan tiempo para completarse, y la finalización anticipada causaría una pérdida del trabajo en curso.
Ejecutas un servicio con estado que es menos tolerante a las interrupciones y deseas minimizar la frecuencia con la que ocurren.
Precios
Puedes solicitar tiempos de ejecución extendidos para tus Pods sin cargo adicional.
Sin embargo, ten en cuenta los siguientes cambios de comportamiento que podrían afectar tus precios:
Los clústeres de Autopilot aplican valores mínimos más altos para las solicitudes de recursos de los Pods de duración extendida. Los clústeres de Autopilot te cobran por las solicitudes de recursos de tus Pods en ejecución. No se te cobra por la sobrecarga del sistema ni por la capacidad de nodos sin usar.
El uso de Pods de duración extendida puede aumentar la cantidad de nodos en tu clúster, lo que podría afectar el uso de direcciones IP y la escalabilidad. Si tienes DaemonSets que se ejecutan en cada nodo, esto genera más DaemonSets en el clúster.
Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.
Asegúrate de tener un clúster de Autopilot que ejecute la versión 1.27 o posterior.
Limitaciones
No puedes solicitar tiempos de ejecución extendidos para tus Pods Spot.
Los tiempos de extracción de imágenes se tienen en cuenta cuando se calcula el tiempo de ejecución extendido.
Puedes tener un máximo de 50 cargas de trabajo de duración extendida (con solicitudes de CPU diferentes) en cada clúster. Esto significa que hasta 50 conjuntos diferentes de valores de solicitud de CPU, después de pasar las cantidades mínimas de recursos de Autopilot, las proporciones y las verificaciones de tamaño de incremento, pueden tener una duración prolongada en cada clúster.
No puedes usar la afinidad entre Pods de Kubernetes en Pods de duración extendida.
Siempre que sea posible, GKE coloca cada Pod de tiempo de ejecución extendido en su propio nodo. Este comportamiento garantiza que los nodos puedan reducir la escala si no se usan lo suficiente.
Para solicitar un tiempo de ejecución extendido para un Pod, configura la anotación cluster-autoscaler.kubernetes.io/safe-to-evict de Kubernetes como false en la especificación del Pod.
Guarda el siguiente manifiesto como extended-deployment.yaml:
Los Pods continúan ejecutándose durante al menos 7 días antes de que se pueda reducir la escala verticalmente o una actualización automática de nodo.
Consideraciones y recomendaciones
Cuando uses esta funcionalidad, ten en cuenta lo siguiente:
Los Pods de duración extendida no están protegidos contra la expulsión basada en la prioridad. Si usas PriorityClasses de Kubernetes, considera los siguientes métodos para minimizar la probabilidad de expulsión basada en la prioridad:
Asegúrate de que tus Pods de duración extendida usen la PriorityClass de mayor prioridad para que otros Pods de usuario no los expulsen.
Los Pods del sistema se ejecutan con la prioridad más alta y siempre podrán expulsar Pods de duración extendida. Para minimizar la probabilidad de que esto suceda, GKE programa los Pods del sistema en el nodo antes de programar el Pod de duración extendida.
Los Pods de duración extendida aún se pueden desalojar antes de tiempo en las siguientes situaciones:
Expulsión para dejar espacio para Pods de usuario de mayor prioridad (con una PriorityClass más alta)
Desalojo para dejar espacio a los componentes del sistema de Kubernetes
Eventos iniciados por el usuario, como el drenaje de un nodo
Puedes usar la anotación cluster-autoscaler.kubernetes.io/safe-to-evict en los clústeres estándar, pero el resultado no es el mismo. Los pods se ejecutan de forma indefinida, incluso si ocurre un evento de reducción de escala, lo que evita que se borren los nodos con poco uso y que continúes pagando por esos nodos. Los Pods tampoco están protegidos de las expulsiones causadas por las actualizaciones automáticas de nodos.
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Difícil de entender","hardToUnderstand","thumb-down"],["Información o código de muestra incorrectos","incorrectInformationOrSampleCode","thumb-down"],["Faltan la información o los ejemplos que necesito","missingTheInformationSamplesINeed","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 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)"]]