Ограничение памяти пода 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, чтобы указать значение по умолчанию для ограничения памяти.

Другие вопросы по тегам