Рейтинг:2

Как ограничить место на корневом диске для модуля

флаг gb

У меня есть модуль, развернутый на узле объемом 100 ГБ. Я хочу, чтобы модуль имел только 50 ГБ дискового пространства.

Так что у меня есть такой конфиг в развертывание.yaml:

         Ресурсы:
            Запросы:
              эфемерное хранилище: "50G"
            пределы:
              эфемерное хранилище: "70G"

Но когда я проверил контейнер (в поде только 1 контейнер), я увидел, что все дисковое пространство на узле было выделено поду. Читать из здесь, Я думал эфемерное хранилище контролирует, сколько места на диске выделяется поду.

# дф-ч
Используемый размер файловой системы Доступно Использование % Установлено на
наложение 100 г 6,5 г 94 г 7% /
tmpfs 64M 0 64M 0% /dev
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/nvme0n1p1 100G 6,5G 94G 7% /etc/hosts
шм 64М 0 64М 0% /dev/шм
tmpfs 1.9G 0 1.9G 0% /proc/acpi
tmpfs 1.9G 0 1.9G 0% /sys/прошивка

Есть идеи, что я сделал не так?

user3908406 avatar
флаг gb
Я только что отредактировал вопрос. Я имел в виду, что все 100 ГБ были выделены поду, но я хочу, чтобы у пода был только 50-гигабайтный корневой диск.
Рейтинг:2
флаг cn

Дело в том, что все пространство (/) виден вам, не означает, что пространство доступно/распределяемо.

Кубелет будет контролировать использование временного хранилища вашего Стручок и действовать соответственно (выселив Стручок превысил лимит):

Управление потреблением эфемерной памяти

Если kubelet управляет локальным эфемерным хранилищем как ресурсом, то kubelet измеряет использование хранилища в:

  • пустой каталог объемы, кроме tmpfs пустой каталог тома
  • каталоги, содержащие журналы на уровне узла
  • записываемые слои контейнера Если Pod использует больше эфемерного хранилища, чем вы ему позволяете, kubelet устанавливает сигнал вытеснения, который запускает вытеснение Pod.

-- Kubernetes.io: Документы: Основные понятия: Конфигурация: Управление контейнерами ресурсов: Использование эфемерного хранилища ресурсов


Пожалуйста, взгляните на приведенный ниже пример:

Предполагая, что у вас есть следующие Стручок манифест:

апиВерсия: v1
вид: стручок
метаданные:
  имя: нгинкс
спецификация:
  контейнеры:
  - имя: nginx
    изображение: nginx
    Ресурсы:
      Запросы:
        эфемерное хранилище: "2Gi"
      пределы:
        эфемерное хранилище: "4Gi"

Ограничение, настроенное для эфемерного хранилища, составляет 4Gi. Чтобы проверить, что произойдет, вы можете запустить:

  • kubectl exec -it nginx -- fallocate -l 10GB /evict.img

Дополнительное замечание!

ошибаться используется для управления дисковым пространством, выделенным для файла, либо для его освобождения, либо для предварительного выделения.

-- Man7.org: Linux: справочные страницы: Fallocate

Через некоторое время вы должны увидеть:

  • $ kubectl описать модуль nginx
Имя: nginx
Пространство имен: по умолчанию
Приоритет: 0
Узел: XYZ
Время начала: Пн, 05 июля 2021 г., 09:47:08 +0200
Ярлыки: <нет>
Аннотации: <нет>
Статус: Ошибка # <-- ВАЖНО!
Причина: Выселен # <-- ВАЖНО!
Сообщение: Использование эфемерного локального хранилища Pod превышает общий лимит контейнеров 4Gi. # <-- ВАЖНО!
<-- УДАЛЕНО --> 
    Ограничения:
      ephemeral-storage: 4Gi # <-- ВАЖНО!
    Запросы:
      эфемерное хранилище: 2Gi
<-- УДАЛЕНО --> 
События:
  Тип Причина Возраст от сообщения
  ---- ------ ---- ---- -------
  Обычный Запланировано 32s default-scheduler Успешно назначено default/nginx для XYZ
  Обычный Вытягивание 31s kubelet Вытягивание образа "nginx"
  Обычный Получено 31s kubelet Успешно получено изображение «nginx» за 360.098619 мс
  Обычный Создан 31s kubelet Создан контейнер nginx
  Обычный Запущен 31s kubelet Запущен контейнер nginx
  Предупреждение Evicted 3s kubelet Pod Использование эфемерного локального хранилища превышает общий лимит контейнеров 4Gi. # <-- ВАЖНО!
  Обычный Killing 3s kubelet Stopping container nginx # <-- ВАЖНО!
  • $ kubectl получить стручки
ИМЯ ГОТОВ СТАТУС ПЕРЕЗАПУСКА ВОЗРАСТ
nginx 0/1 Выселено 0 9m7s

Дополнительные ресурсы:

user3908406 avatar
флаг gb
Спасибо, а что, если у меня есть 3 модуля, каждый из которых запрашивает эфемерное хранилище объемом 40 ГБ, и 2 узла каждый с объемом 100 ГБ, при условии, что ЦП и память отключены, если это беспокоит, kubenetes запланировал бы 2 модуля на 1 узле и 1 Pod на другом узле, чтобы избежать выселение?
Dawid Kruk avatar
флаг cn
@user3908406 user3908406 Короче говоря, да, Kubernetes по запросам обеспечит выделение ресурсов с помощью выделяемого ресурса и «запросов» (если это невозможно, «Pod» останется в состоянии «Ожидание»). Что касается доступного эфемерного хранилища, я бы проверил: `$ kubectl description node`, где вы можете найти `limits`/`requests` для конкретного `Node`. Кроме того, я полагаю, что Kubernetes будет балансировать «модули» между «узлами», чтобы обеспечить высокую доступность в случае сбоя «узла».

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.