Задания в Kubernetes провалились из-за проблем с временным хранилищем - PullRequest
0 голосов
/ 06 апреля 2020

Пока что наш локальный кластер kubernetes работает нормально. В последнее время мы видим, что рабочие места терпят неудачу из-за ошибки ниже. Я проверил, нет ли проблем с пространством на главном Kube, а также на рабочих узлах. В разделе "/ var / lib", а также в постоянных заявках на объем доступно много места.

Version:

Client Version: v1.17.2
Server Version: v1.17.2

Host OS:
Centos 7.7

CNI:
Weave

Ошибка:

Недостаточно ресурсов узла: ephemeral-storage.Container main использовал 5056Ki, что превышает его запрос 0. Ожидание контейнера использовало 12Ki, что превышает его запрос 0.

любые указатели будут полезны.

Спасибо, CS

1 Ответ

0 голосов
/ 06 апреля 2020

Основная причина, по которой это может происходить, заключается в том, что журналы pod или использование emptyDir заполняют ваше эфемерное хранилище.

Docker использует консервативный подход к очистке неиспользуемых объектов (часто называемых «сборкой мусора»), таких как изображения, контейнеры, тома и сети: эти объекты обычно не удаляются, если только Вы явно просите Docker сделать это. Это может привести к тому, что Docker будет использовать дополнительное дисковое пространство.

Вы можете использовать docker функцию под названием prune. Это очистит систему от неиспользуемых объектов. Если вы хотите sh очистить несколько объектов, вы можете использовать docker system prune. Проверьте здесь больше о prunning .

Существует также другой инструмент под названием Garbage collector. Это docker инструмент, который удаляет. неиспользованные / оставленные / осиротевшие капли. Проверьте здесь больше об этом.

В контексте реестра Docker сборка мусора - это процесс удаления больших двоичных объектов из файловой системы, когда на них больше не ссылается манифест. BLOB-объекты могут включать как слои, так и манифесты.

Если это не поможет, вы можете попробовать настроить драйвер ведения журнала и установить его ограничение:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3",
    "labels": "production_status",
    "env": "os,customer"
  }
}

Существует также другая опция, если emptyDir было использовано. Используя emptyDir, вы разрешаете контейнеру записывать любое количество памяти на его узел fs. Вы можете запросить или ограничить настройки для локального эфемерного хранилища, установив:

spec:
  containers:
  - name: test
    image: test-image
    resources:
      requests:
        ephemeral-storage: "1Gi"
      limits:
        ephemeral-storage: "1Gi"
  - name: test
    image: test-image2
    resources:
      requests:
        ephemeral-storage: "2Gi"
      limits:
        ephemeral-storage: "2Gi"

Вы также можете проверить контейнеры, работающие с использованием docker ps, а затем самостоятельно проверить контейнер и найти фс.

Его можно найти в этом месте:

/var/lib/docker/containers/<container-id>/<container-id>-json.log

Дайте мне знать, если это поможет.

...