Ограничение памяти пода Kubernates с использованием метрик
Я пытаюсь получить фактический и общий объем памяти, выделенной модулю, с помощью API. Хотя я могу получить фактическое потребление памяти, используя api сервера метрик. Как я могу получить общий объем памяти, выделенной для модуля, с помощью API сервера метрик?
Я разрабатываю панель инструментов, на которой мне нужно продемонстрировать память модуля и процессор. График пользовательского интерфейса содержит фактическое и общее количество вводимых данных. Я могу получить фактическую память, используемую командой kubectl get --raw /apis/metrics.k8s.io/v1beta1/namespaces/default/pods/, но как я могу получить общую память модуля?
1 ответ
Все доступные API описаны в Kubernetes API Guide. Он доступен для разных версий K8s (только обратите внимание на URL).
Ник, как мне получить это значение с помощью API?
На первый взгляд даже
/api/v1/namespaces/<namespace>/pods/
сделаю свою работу.
Посмотрите, пожалуйста, мой пример (я сам решил повесить).
$ cat pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: server-go-lim
...
spec:
containers:
- image: nkolchenko/enea:server_go_latest
resources:
...
limits:
memory: 1024Mi # Here is the Limit
...
$ kubectl create -f pod.yaml
pod/server-go-lim created
$ kubectl get --raw /api/v1/namespaces/default/pods/server-go-lim | json_pp
{
...
"spec" : {
"containers" : [
{
"resources" :
"limits" : {
"memory" : "1Gi"
}
Как видим, API возвращает лимиты для pod. Дайте мне знать, если это то, что вы искали.
Ты просто бежишь kubectl describe pod <pod>
и посмотрите под .Containers.<container>.Limits
Общий объем памяти, выделенной модулю, ограничен лимитом памяти, который вы назначаете контейнерам модуля. https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/
Чтобы указать запрос памяти для контейнера, включите поле resources: requests в манифест ресурса контейнера. Чтобы указать предел памяти, включите ресурсы: пределы.
Если вы не укажете предел памяти, у контейнера нет верхней границы. https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/
Если вы не укажете ограничение памяти для контейнера, применима одна из следующих ситуаций:
• Контейнер не имеет верхней границы объема используемой памяти. Контейнер может использовать всю память, доступную на узле, где он работает, что, в свою очередь, может вызвать OOM Killer. Кроме того, в случае OOM Kill контейнер без ограничений по ресурсам будет иметь больше шансов быть убитым.
• Контейнер работает в пространстве имен с ограничением памяти по умолчанию, и контейнеру автоматически назначается ограничение по умолчанию. Администраторы кластера могут использовать LimitRange, чтобы указать значение по умолчанию для ограничения памяти.