kubernetes: разница между тем, что запрашивается и выделяется Docker - PullRequest
2 голосов
/ 13 октября 2019

Создано развертывание с запросами mem 200M:

request = 200Mi * ​​1004 *

Limit = не определено

kubectl get po -n qos-example mem-req-56b889c948-79ptc -o yaml|grep -i memory -A 4 -B 4
imagePullPolicy: Always
name: mem-req
resources:
  requests:  memory: 200M

Но в Docker он не показывает выделенную память,

не должен ли он устанавливать mem в качестве запрашиваемого, т.е. 200M?

Докер проверяет f8a7f26528fe | grep -i memory

        "Memory": 0,
        "KernelMemory": 0,
        "MemoryReservation": 0,
        "MemorySwap": 0,
        "MemorySwappiness": null,

Почему Kubernetes не может передать эту информацию в Docker, хотя kubernetes знает, что он должен выделить 200M

kubectl version
Client Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.3", 
GitCommit:"5e53fd6bc17c0dec8434817e69b04a25d8ae0ff0", GitTreeState:"clean", BuildDate:"2019-06-    06T01:44:30Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}

Server Version: version.Info{Major:"1", Minor:"14", GitVersion:"v1.14.3",GitCommit:"5e53fd6bc17c0dec8434817e69b04a25d8ae0ff0", GitTreeState:"clean"BuildDate:"2019-06-06T01:36:19Z", GoVersion:"go1.12.5", Compiler:"gc", Platform:"linux/amd64"}

С тем же значением для лимита и запроса, я вижу ожидаемые значения в Docker.

запрос = 200Mi * ​​1025 *

Limit = 200Mi * ​​1029 *

  kubectl get po -n qos-example  mem-check-re-limit-844b4bc5cb-nn98d -o yaml |grep memory -A 4 -B 4
imagePullPolicy: Always
name: mem-check-re-limit
resources:
  limits:
    memory: 200Mi
  requests:
    memory: 200Mi




 docker inspect d2711e340b94|grep -i memory

        "Memory": 209715200,

1 Ответ

0 голосов
/ 13 октября 2019

Запросы ресурсов влияют только на планировщик Kubernetes;они не влияют на бегущую капсулу. Если узел имеет 4 ГБ ОЗУ и имеется четыре модуля, каждый из которых запрашивает 1 ГБ, они «подходят». Они могут быть убиты OOM, если какой-либо модуль индивидуально превышает объявленную память limit (если есть) или если общая комбинация элементов, работающих на узле, не подходит.

Итак, настройкаЗапросы ресурсов ниже пределов позволяют большему количеству модулей размещаться на узле при низком уровне использования, но повышают риск их случайной гибели;установка двух чисел равным потенциально позволяет меньше соответствовать и может оставить реальную память неиспользованной, но также означает, что стручок с большей вероятностью будет жить, если он соблюдает собственный предел.

В общем, если вы используете Kubernetes, вам следуетпусть он управляет всеми взаимодействиями с системой контейнеров;Обычно вы не должны запускать docker команды на узлах, управляемых Kubernetes.

...