У меня есть собственные физические узлы Kubernetes, размещенные на физических машинах. (12 ядер, 16 ГБ оперативной памяти). Я заметил, что во время большой нагрузки у меня в журналах появляются сбойные модули и события OOM (убийство из-за нехватки памяти).
Как я могу заставить Kubernetes не планировать никаких заданий на узле, если RAM исчерпана? Я бегаю kubernetes v1.16.11
и CentOS Linux 7 3.10.0-1127.10.1.el7.x86_64
P.S Я добавляю фрагмент вызывающего ошибку кода модуля, использую запросы и ограничиваю
containers:
- name: jnlp
(...)
resources:
requests:
cpu: 500m
memory: 1024Mi
limits:
memory: 2048Mi
- name: build
(...)
resources:
requests:
cpu: 3000m
memory: 4096Mi
Как отмечали другие, вам, скорее всего, не хватает requests
и limits
для ваших стручков. В вашем случае, поскольку даже ваше ядро сообщает о событиях OOM, ваши поды, похоже, потребляют много памяти. Вы можете узнать больше об управлении ресурсами здесь: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/
Итак, просмотрите свои поды и попытайтесь задействовать ресурсы контейнера. Вот пример контейнера, который «резервирует» 300Mi памяти (ресурсы, которые контейнер гарантированно получит), но может использовать до 600Mi памяти:
apiVersion: v1
kind: Pod
metadata:
name: example-pod
spec:
containers:
- name: example-container
image: example-image:1.0
resources:
requests:
memory: "300Mi"
cpu: "1000m"
limits:
memory: "600Mi"
cpu: "2000m"
Если контейнер пытается использовать более 600 МБ памяти, он будет отключен.