решение1
В этом случае все работает как задумано. Думаю, вы пропустили информацию о Eviction threshold
.
Allocatable
это значение Capacity
минус Reserved
и Eviction Threshold
.
В GKE
документацииРесурсы, выделяемые узломвы можете найти информацию о распределении ресурсов.
Некоторые ресурсы узла требуются для запуска
GKE
и компонентов узла Kubernetes, необходимых для того, чтобы этот узел функционировал как часть вашегоcluster
. Таким образом, вы можете заметить несоответствие между общими ресурсами вашего узла (как указано в документации по типу машины) иallocatable
ресурсами узла вGKE
. Поскольку более крупные типы машин, как правило, запускают большеcontainers
(и, соответственно, больше Pod), объем ресурсов, которыйGKE
резервируется дляKubernetes components
масштабируется для более крупных машин.Windows Server nodes
также требуетсяmore resources
, чем типичныйLinux node
. Узлам требуются дополнительные ресурсы для учета работы ОС Windows и компонентов Windows Server, которые не могут работать в контейнерах.
Чтобы проверить доступные в кластере ресурсы, выделяемые узлу, выполните следующую команду:
$ kubectl describe node ${NodeName} | grep Allocatable -B 7 -A 6
Возвращаемые выходные данные содержат поля «Емкость» и «Выделяемое» с измерениями для эфемерного хранилища, памяти и ЦП.
Если вы прокрутите немного ниже,Выделяемая память и ресурсы ЦПвы прочтете, что выделяемые ресурсы рассчитываются следующим образом:
Allocatable = Capacity - Reserved - Eviction Threshold
Для ресурсов памяти GKE резервирует следующее:
- 255 МБ памяти для машин с объемом памяти менее 1 ГБ
- 25% первых 4 ГБ памяти
- 20% от следующих 4 ГБ памяти (до 8 ГБ)
- 10% от следующих 8 ГБ памяти (до 16 ГБ)
- 6% от следующих 112 ГБ памяти (до 128 ГБ)
- 2% от любой памяти свыше 128 ГБ