Инженер по эксплуатации Онкар Рагхунатх Шелке объяснил в разборе, что фоновая очистка образов в kubelet учитывает занятые байты, а не число файлов. kubelet — служба Kubernetes на узле.

Фоновая очистка неиспользуемых образов по умолчанию начинается при 85% заполнения хранилища образов и останавливается на 80%. На Linux порог нехватки inode по умолчанию составляет 5% свободных записей.

inode — записи файловой системы о файлах и каталогах. При этом пороге kubelet освобождает ресурсы и начинает выселять поды, группы контейнеров Kubernetes, чтобы сохранить работоспособность узла.

Шелке предлагает отделить сборку веб-приложения от итогового образа и переносить в него только готовые файлы. Автор также советует предупреждать при 80% занятых inode с задержкой 30 минут, а порог выбирать так, чтобы успеть отреагировать до заполнения на 95%.

Проверка утверждений:

  • Инженер по эксплуатации Онкар Рагхунатх Шелке разобрал, почему kubelet не запускает раннюю очистку образов при нехватке inode: фоновая очистка учитывает байты, а пороги inode относятся к выселению подов. (подтверждено самой публикацией: доказательство; «If you only remember one thing from this: kubelet’s background cleanup runs on bytes, so a workload that’s heavy on files rather than bytes gets no early intervention at all. Something does eventually fire, at 5% inodes free, and it fires by evicting pods. That’s the emergency brake, not the fix.»)
  • Фоновая очистка неиспользуемых образов по умолчанию начинается при 85% заполнения хранилища образов и останавливается на 80%. (подтверждено самой публикацией: доказательство; «Kubelet’s defence against images filling a node is image garbage collection. Once the image filesystem passes imageGCHighThresholdPercent (85 by default), it deletes unused images, oldest first, until usage drops to imageGCLowThresholdPercent (80).»)
  • На Linux порог нехватки inode в kubelet по умолчанию составляет 5% свободных записей. (подтверждено самой публикацией: доказательство; «Both filesystems get an inode threshold, and both sit at 5% free. That’s a Linux-only file.»)
  • При пороге 5% свободных inode kubelet освобождает ресурсы и начинает выселять поды, чтобы сохранить работоспособность узла. (подтверждено самой публикацией: доказательство; «So kubelet will act on inodes. The question is when. 5% free means 95% used, and that’s the hard eviction floor: the point where kubelet reclaims what it can and starts evicting pods to save the node.»)
  • Шелке предлагает отделить сборку веб-приложения от итогового образа и переносить в него только готовые файлы. (подтверждено самой публикацией: доказательство; «The first fix belongs in the build: a multi-stage Dockerfile. One stage installs dependencies and builds. The final image is a small web server that only receives the compiled output.»)
  • Шелке советует добавить предупреждение при 80% занятых inode с задержкой 30 минут, но порог выбирать с учётом времени на реакцию до 95%. (подтверждено самой публикацией: доказательство; «Give it for: 30m so a burst of image pulls during a rollout doesn’t page anyone. The 80% line is a judgement call; pick whatever leaves you enough room to act before 95%.»)

Первоисточники:

оценка 58,7 из 100 · тип: руководство