CCE позволяет задавать запросы ресурсов и лимиты, такие как CPU и RAM, для добавляемых контейнеров при создании рабочей нагрузки. Kubernetes также позволяет использовать YAML для задания требований к другим типам ресурсов.
Для CPU и Память, значения Запрос и Лимит следующие:
Если узел имеет достаточные ресурсы, под на этом узле может использовать больше ресурсов, чем запрошено, но не более лимита.
Например, если вы задаете запрос памяти пода в 1 ГиБ и его лимит в 2 ГиБ, и под планируется на узел с 8 ГиБ памяти (без запущенных других подов), под может использовать более 1 ГиБ памяти при высокой нагрузке, но его использование памяти будет ограничено 2 ГиБ. Если процесс в контейнере пытается использовать более 2 ГиБ ресурсов, ядро системы пытается завершить процесс. В результате возникает ошибка out of memory (OOM).
При создании рабочей нагрузки рекомендуется установить верхние и нижние лимиты ресурсов CPU и памяти. Если верхние и нижние лимиты ресурсов не установлены для рабочей нагрузки, утечка ресурсов этой нагрузки сделает ресурсы недоступными для других нагрузок, развернутых на том же узле. Кроме того, нагрузки без верхних и нижних лимитов ресурсов нельзя будет точно мониторить.
В реальных сценариях рекомендуется соотношение Запрос к Лимит составляет примерно 1:1.5. Для некоторых чувствительных сервисов рекомендуемое соотношение 1:1. Если Запрос слишком мал, а Лимит слишком велик, ресурсы узла переосвоены. В периоды пиковых нагрузок память или CPU узла могут быть исчерпаны. В результате узел становится недоступным.
Параметр | Описание |
|---|---|
Запрос CPU | Минимальное количество ядер CPU, требуемое Контейнером. Ресурсы планируются для контейнера на основе этого значения. Контейнер может быть запланирован на узел только тогда, когда общее количество доступных ядер CPU на узле больше или равно количеству ядер CPU, запрошенных контейнером. |
Лимит CPU | Максимальное количество ядер CPU, доступных Контейнеру. |
Рекомендованная конфигурация
Фактическое доступное количество CPU узла ≥ Сумма лимитов CPU всех контейнеров на текущем узле ≥ Сумма запросов CPU всех контейнеров на текущем узле. Вы можете просмотреть фактическое доступное количество CPU узла в консоли CCE (Управление ресурсами > Узлы > Выделяемый).
Параметр | Описание |
|---|---|
Запрос памяти | Минимальный объём памяти, требуемый Контейнером. Ресурсы планируются для контейнера на основе этого значения. Контейнер может быть размещён на узле только тогда, когда общее доступное количество памяти на узле больше или равно запрашиваемой контейнером памяти. |
Лимит памяти | Максимальный объём памяти, доступный Контейнеру. Когда использование памяти превышает настроенный лимит памяти, экземпляр может быть перезапущен, что влияет на нормальное использование рабочей нагрузки. |
Рекомендованная конфигурация
Фактическая доступная память узла ≥ Сумма лимитов памяти всех контейнеров на текущем узле ≥ Сумма запросов памяти всех контейнеров на текущем узле. Вы можете просмотреть фактическую доступную память узла в консоли CCE (Управление ресурсами > Узлы > Выделяемый).
Выделяемые ресурсы рассчитываются на основе значения запроса ресурса (Запрос), которое указывает верхний предел ресурсов, которые могут запрашиваться подами на этом узле, но не отражает фактические доступные ресурсы узла (подробности см. Пример использования квот CPU и памяти). Формула расчёта следующая:
Предположим, что Кластер содержит узел с 4 ядрами CPU и 8 ГиБ памяти. На кластере развернуты два пода (под 1 и под 2). Под 1 переосваивает ресурсы (то есть Лимит > Запрос). Спецификации двух подов следующие.
Под | Запрос CPU | Лимит CPU | Запрос памяти | Лимит памяти |
|---|---|---|---|---|
Под 1 | 1 ядро | 2 ядра | 1 ГиБ | 4 ГиБ |
Под 2 | 2 ядра | 2 ядра | 2 ГиБ | 2 ГиБ |
Использование CPU и памяти узла следующее:
В этом случае оставшееся 1 ядро и 5 ГиБ могут быть использованы следующим новым подом.
Если под 1 находится под высокой нагрузкой в пиковые часы, он будет использовать больше CPU и памяти в пределах лимита. Поэтому фактические выделяемые ресурсы меньше, чем 1 ядро и 5 ГиБ.
Обычно узлы поддерживают локальное временное хранилище, которое предоставляется локально смонтированными записываемыми устройствами или ОЗУ. EV не обеспечивает долгосрочную доступность данных. Подам можно использовать локальные EV для буферизации данных и хранения логов, либо монтировать тома emptyDir в контейнеры. Подробности см. Локальное временное хранилище.
Kubernetes позволяет указывать запрошенное значение и значение лимита временного хранилища в конфигурациях контейнера для управления локальным временным хранилищем. Для каждого контейнера в поде можно настроить следующие атрибуты:
В следующем примере под содержит два контейнера. Запрошенное значение каждого контейнера для локального временного хранилища составляет 2 ГиБ, а значение лимита — 4 ГиБ. Поэтому запрошенное значение пода для локального временного хранилища составляет 4 ГиБ, значение лимита — 8 ГиБ, а том emptyDir использует 500 МиБ локального временного хранилища.
apiVersion: v1kind: Podmetadata:name: frontendspec:containers:- name: container-1image: <example_app_image>resources:resources:requests: requests:ephemeral-storage: "2Gi" ephemeral-storage: "2Gi"limits: limits:ephemeral-storage: "4Gi" ephemeral-storage: "4Gi"volumeMounts:- name: ephemeralmountPath: "/tmp"- name: container-2image: <example_log_aggregator_image>resources:resources:requests: requests:ephemeral-storage: "2Gi" ephemeral-storage: "2Gi"limits: limits:ephemeral-storage: "4Gi" ephemeral-storage: "4Gi"volumeMounts:- name: ephemeralmountPath: "/tmp"volumes:- name: ephemeralemptyDir:emptyDir:sizeLimit: 500Mi sizeLimit: 500Mi