Сборка мусора Kubernetes чистые docker компоненты - PullRequest
0 голосов
/ 07 января 2020

В настоящее время работает кластер k8s, но иногда возникают проблемы с памятью. Появится следующая ошибка:

Failed create pod sandbox: rpc error: code = Unknown desc = failed to create a sandbox for pod "<web app>": Error response from daemon: devmapper: Thin Pool has 6500 free data blocks which is less than minimum required 7781 free data blocks. Create more free space in thin pool or use dm.min_free_space option to change behavior

Я могу решить эту проблему, вручную запустив docker ps -a -f status=exited -q | xargs -r docker rm -v

Однако я хочу, чтобы Kubernetes выполнял эту работу сам. В настоящее время в моей конфигурации kublet у меня есть:

evictionHard:
  imagefs.available: 15%
  memory.available: "100Mi"
  nodefs.available: 10%
  nodefs.inodesFree: 5%
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80

Что я делаю не так?

1 Ответ

0 голосов
/ 09 января 2020

Читая опубликованную вами ошибку, мне кажется, что вы используете " devicemapper " в качестве драйвера хранилища.

Драйвер хранилища devicemapper устарел в Docker Двигатель 18.09, и будет снят в будущем выпуске. Пользователям драйвера хранилища devicemapper рекомендуется перейти на overlay2.

Я бы посоветовал вам использовать " overlay2 " в качестве накопителя, если вы не используете неподдерживаемую ОС. См. здесь поддерживаемые версии ОС.

Вы можете проверить фактический накопитель с помощью команды docker info, вы получите такой вывод:

Client:
 Debug Mode: false

Server:
 Containers: 21
  Running: 18
  Paused: 0
  Stopped: 3
 Images: 11
 Server Version: 19.03.5
 Storage Driver: devicemapper <<== See here
  Pool Name: docker-8:1-7999625-pool
  Pool Blocksize: 65.54kB
...

> Предположим, что вы хотите изменить диск хранения с devicemapper на overlay2, вам необходимо выполнить следующие шаги:

Изменение драйвера хранилища делает существующие контейнеры и образы недоступными в локальной системе , Используйте docker save, чтобы сохранить созданные вами изображения, или скопируйте их sh в Docker Hub или частный реестр перед изменением драйвера хранилища, чтобы вам не нужно было их заново создавать.

Прежде чем следовать этой процедуре, вы должны сначала выполнить все предпосылки .

  1. Стоп Docker.

    $ sudo systemctl stop docker
    
  2. Скопируйте содержимое /var/lib/docker во временную папку.

    $ cp -au /var/lib/docker /var/lib/docker.bk
    
  3. Если вы хотите использовать отдельную файловую систему резервного копирования из той, которая используется /var/lib/, отформатируйте файловую систему и смонтируйте ее в /var/lib/docker. Обязательно добавьте это крепление к /etc/fstab, чтобы сделать его постоянным.

  4. Редактировать /etc/docker/daemon.json. Если его еще нет, создайте его. Предполагая, что файл был пуст, добавьте следующее содержимое.

    {
      "storage-driver": "overlay2"
    }
    

    Docker не запускается, если файл daemon.json содержит неправильно сформированный JSON.

  5. Start Docker.

    $ sudo systemctl start docker
    
  6. Убедитесь, что демон использует драйвер хранения overlay2. Используйте команду docker info и найдите Storage Driver и Backing filesystem.

Client:
 Debug Mode: false

Server:
 Containers: 35
  Running: 15
  Paused: 0
  Stopped: 20
 Images: 11
 Server Version: 19.03.5
 Storage Driver: overlay2 <=== HERE
  Backing Filesystem: extfs <== HERE
  Supports d_type: true

Извлечено из Docker Документация.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...