Чеклист для запуска или миграции приложений в Kubernetes
Ограничения ресурсов используются для ограничения объема процессора и памяти, которые могут использовать ваши контейнеры.
Планировщик Kubernetes использует их в качестве одной из метрик, чтобы решить, на какой узел лучше всего разместить ваш Pod.
Неограниченное количество модулей (без ограничений по ресурсам) может привести к чрезмерному использованию ресурсов и потенциальному сбою узла (и kubelet).
То же самое относится и к ограничениям процессора.
Запросы (requests) — это ресурсы, которые контейнер гарантированно получит. То есть это своего рода минимальные системные требования, которые нужны приложению для работы. Kubernetes всегда планирует размещение подов на узлах так, чтобы обеспечить необходимые запросы для всех подов.
Ограничения (limits) — это максимальные значения выделяемых ресурсов. Kubernetes гарантирует, что приложение никогда не получит больше ресурсов, чем указано в ограничениях.
Если под попытается превысить ресурс, Kubernetes поступит по-разному в зависимости от типа ресурса.
CPU — сжимаемый ресурс, его можно искусственно ограничить. Поэтому если под запросит больше CPU, чем указано в ограничениях, он их просто не получит. Возможно, это скажется на производительности приложения, но оно продолжит работать.
RAM — несжимаемый ресурс, его невозможно ограничить. Ведь если приложению просто не выделить запрашиваемую память, оно, скорее всего, перестанет нормально работать. Поэтому если под запросит больше памяти, чем указано в ограничениях, Kubernetes перезапустит под.
По умолчанию для всех продуктовых немспейсов используются LimitRanges. Если вы не задали ресурсы для вашего контейнера, то будут использоваться дефолтовые параметры. Они имеют следующие значения:
spec:
limits:
— default:
cpu: 250m
memory: 512Mi
defaultRequest:
cpu: 250m
memory: 512Mi
max:
cpu:»2»
memory: 16Gi
maxLimitRequestRatio:
cpu:»4»
memory:»2»
min:
cpu: 50m
memory: 64Mi
type: Container
При использовании universalChart определите в своем values.yaml блок с секцией resources, чтобы указать необходимые ресурсы для вашего контейнера с приложением.
Пример:
resources:
limits:
cpu: 2
memory: 4Gi
requests:
cpu: 1
memory: 2Gi