Cómo limpiar contenedores e imágenes antiguos en su clúster de Kubernetes

Un clúster de Kubernetes activo puede acumular imágenes y contenedores antiguos. Asegurarse de que los recursos descartados se eliminen cuando son redundantes ayuda a liberar recursos en los nodos del clúster. A continuación, se explica cómo lidiar con la recolección de basura en Kubernetes.

Índice de contenidos
  1. Imágenes de contenedores
  2. Cancelación de contenedores viejos
  3. ¿Tengo que intervenir manualmente?
  4. El futuro: desalojos
  5. Resumen

Imágenes de contenedores

Kubernetes tiene un sistema de recolección de basura incorporado que puede limpiar las imágenes no utilizadas. Está administrado por Kubelet, el proceso de trabajo de Kubernetes que se ejecuta en cada nodo.

Kubelet monitorea automáticamente las imágenes no utilizadas e los eliminará periódicamente. Las decisiones de eliminación se toman al evaluar el uso de disco de la imagen y la hora en que se usó por última vez. Una imagen grande que no se ha utilizado durante una semana se suele limpiar antes que una imagen pequeña que se utilizó ayer.

Puede personalizar la recolección de basura especificando umbrales alto y bajo para el uso del disco. El uso del disco por encima del umbral "alto" activará la recolección de residuos. El procedimiento intentará reducir el uso del disco al umbral "bajo".

Los umbrales se definen mediante dos indicadores de Kubelet:

  • image-gc-high-threshold - Establecer el umbral alto; el valor predeterminado es 85%.
  • image-gc-low-threshold - Establecer el umbral bajo; el valor predeterminado es 80%.

Esta configuración ya debería estar activa en su clúster. Kubelet intentará reducir el uso del disco al 80% después de que esté lleno en un 85%.

Puede configurar las banderas de Kubectl en /var/lib/kubelet/kubeadm-flags.env:

KUBELET_KUBEADM_ARGS="--image-gc-high-threshold=60 --image-gc-low-threshold=50"

Después de editar el archivo, reinicie Kubectl:

systemctl daemon-reload
systemctl restart kubelet

Cancelación de contenedores viejos

Kubelet también gestiona la limpieza de contenedores redundantes. Todos los contenedores detenidos o no identificados serán candidatos a ser retirados.

Puede otorgar a los contenedores antiguos un período de gracia antes de la eliminación definiendo una edad mínima del contenedor. Las banderas adicionales le permiten controlar la cantidad total de contenedores inactivos que pueden existir en un solo pod y en el nodo:

  • maximum-dead-containers - Número máximo de contenedores viejos a conservar. Cuando se establece en -1 (predeterminado), no se aplica ningún límite.
  • maximum-dead-containers-per-container - Establece el número de instancias más antiguas que se conservarán por contenedor. Si un contenedor se reemplaza con una instancia más nueva, este número de versiones anteriores puede permanecer.
  • minimum-container-ttl-duration - Período de gracia de recolección de basura para contenedores muertos. Una vez que un contenedor tiene varios minutos, se vuelve adecuado para la recolección de desechos. El valor predeterminado de 0 significa que no se aplica ningún período de gracia.

Puede configurar estos ajustes con los indicadores de Kubelet utilizando el mismo procedimiento descrito anteriormente.

¿Tengo que intervenir manualmente?

No debe realizar ningún esfuerzo manual para eliminar contenedores o imágenes muertos. Si su espacio en disco se está llenando o la recolección de basura no parece funcionar, intente ajustar los indicadores de Kubelet a configuraciones más agresivas.

Gobernadores advierte contra realizar la recolección de basura externa. No elimine recursos manualmente ni utilice API de administración de clústeres o herramientas de terceros. Esto corre el riesgo de crear un estado incoherente que podría afectar el funcionamiento de Kubelet.

Kubelet es responsable de administrar los contenedores asignados a cada nodo. Cuando se programa un nuevo contenedor, Kubelet descargará su imagen. La operación exitosa del clúster depende de que se cumplan las expectativas de Kubelet. Una imagen o un contenedor que falte puede causar problemas con Kubelet.

El futuro: desalojos

La configuración descrita anteriormente es compatible con las versiones actuales de Kubernetes. Sin embargo, se han desaprobado en favor de un sistema de "desalojo" más sólido. Los desalojos son una forma unificada de limpiar los activos de Kubernetes; eventualmente reemplazarán la recolección de basura.

Un desalojo puede ocurrir por varias razones. Kubelet monitoreará múltiples factores, incluidos los recursos de hardware disponibles y la configuración del usuario para los períodos de retención.

Este nuevo sistema facilita la eliminación de la recogida de residuos como un mecanismo dedicado. El mismo proceso que mata los pods debido a un escenario de poca memoria eliminará las imágenes redundantes a medida que el espacio en disco se vuelva limitado.

Se definen dos tipos de desalojo: difícil es suave. Un desalojo forzoso requerirá una acción inmediata para eliminar el activo objetivo. No hay período de gracia. Un desalojo suave tiene un período de gracia configurado por el usuario; el recurso se destinará una vez que haya expirado el período de gracia. Si la causa del desalojo se resuelve durante el período de gracia, como cuando hay más espacio en disco disponible, se puede detener la eliminación.

El sistema de desalojos aún no esta Totalmente compatible para la limpieza de contenedores. La dead-containers las banderas ya están obsoletas, listas para el futuro. usted puede ya lo uso con imágenes de contenedores - set --eviction-hard o --eviction-soft en vez de threshold banderas.

--eviction-hard=imagefs.available<1Gi

Este ejemplo indica a Kubelet que elimine todas las imágenes de contenedor no utilizadas si el espacio en disco disponible para el almacenamiento de imágenes cae por debajo de 1 GB.

--eviction-soft=imagefs.available<1Gi
--eviction-soft-grace-period=imagefs.available=5m

Este segundo ejemplo muestra cómo utilizar un desalojo "leve" en su lugar. En este caso, las imágenes no se eliminarán a menos que el espacio disponible en disco haya sido inferior a 1 GB durante al menos cinco minutos.

Resumen

Kubernetes tiene la recolección de basura habilitada de forma predeterminada. Los contenedores muertos y las imágenes redundantes se limpiarán periódicamente. La programación predeterminada es 80% o menos de uso del disco; los contenedores se limpian de forma bastante agresiva una vez detenidos. Puede usar las banderas de Kubelet para ajustar los umbrales en el proceso.

El concepto de recolección de basura eventualmente se eliminará a favor de los desalojos. Los desalojos tienen una configuración simplificada que se alinea mejor con otras formas de eliminación de activos. Puede configurar desalojos en su clúster hoy. Recuerde que las banderas de recolección de basura no se asignan directamente a sus contrapartes de eliminación.

Descubre más contenido

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos Ver más

  • Responsable: Nelida Haydee Saldivia.
  • Finalidad:  Moderar los comentarios.
  • Legitimación:  Por consentimiento del interesado.
  • Destinatarios y encargados de tratamiento:  No se ceden o comunican datos a terceros para prestar este servicio. El Titular ha contratado los servicios de alojamiento web a KnownHost que actúa como encargado de tratamiento.
  • Derechos: Acceder, rectificar y suprimir los datos.
  • Información Adicional: Puede consultar la información detallada en la Política de Privacidad.

Subir