Узлы Kubernetes простаивают, но из-за ошибки процессора при планировании модулей

#kubernetes #kubernetes-pod

Вопрос:

У меня есть несколько узлов, которые в основном простаивают, но при планировании модулей/служб появляется ошибка с надписью «Недостаточно процессора».

Вывод использования узла :-

 top - 17:59:45 up 17 days,  2:52,  1 user,  load average: 5.61, 7.85, 8.58
Tasks: 2030 total,   3 running, 1771 sleeping,   0 stopped,   0 zombie
%Cpu(s):  6.5 us,  2.3 sy,  0.4 ni, 90.4 id,  0.0 wa,  0.0 hi,  0.3 si,  0.0 st
KiB Mem : 39616812 total, 29776403 free, 30507960 used, 67896128 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 35842112 avail Mem
 

Как видно, вся куча памяти/процессора простаивает (~ 80-90% свободны).

То же самое может быть подтверждено тем фактом :-

 $ kubectl top nodes
W0615 14:03:16.457271     108 top_node.go:119] Using json format to get metrics. Next release will switch to protocol-buffers, switch early by passing --use-protocol-buffers flag
NAME     CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
node1    4680m        29%    14943Mi         47%
node10   9524m        19%    44735Mi         11%
node11   273m         0%     1614Mi          0%
node12   289m         0%     1617Mi          0%
node2    1736m        10%    11683Mi         37%
node3    3223m        20%    17837Mi         56%
node4    1680m        10%    15075Mi         47%
node5    7386m        15%    39163Mi         10%
node6    5392m        22%    26448Mi         20%
node7    2457m        5%     28002Mi         7%
node8    4853m        10%    51863Mi         13%
node9    3620m        7%     18299Mi         4%
 

Но при планировании модулей появляется ошибка (kubectl описывает имя модуля pod) :-

 Events:
Type     Reason            Age   From               Message
----     ------            ----  ----               -------
Warning  FailedScheduling  62m   default-scheduler  0/12 nodes are available: 5 node(s) had taints that the pod didn't tolerate, 7 Insufficient cpu.
 

Причина, по которой я понимаю, почему это происходит (kubectl описывает узел node10) :-

 Allocated resources:
  (Total limits may be over 100 percent, i.e., overcommitted.)
  Resource           Requests          Limits
  --------           --------          ------
  cpu                47887m (99%)      92270m (192%)
  memory             59753371Ki (15%)  87218649344 (21%)
  ephemeral-storage  2Gi (0%)          2Gi (0%)
  hugepages-1Gi      0 (0%)            0 (0%)
  hugepages-2Mi      0 (0%)            0 (0%)
 

Модули распределили все ресурсы процессора по всем узлам

Несмотря на то, что фактическое использование очень низкое, k8s считает, что узлы полностью заняты. То, чего я пытаюсь достичь, — это как переоценивать ресурсы ? Я попытался отредактировать «Выделяемый» процессор в 2 раза больше «Емкости», но изменения не сохраняются. Есть какие-нибудь предложения, как я могу переусердствовать ?

Комментарии:

1. Ознакомьтесь с запросами/ограничениями на ресурсы pod. Планировщик использует запросы и ограничения, а не фактическое использование ресурсов.

2. можете ли вы добавить вывод kubectl get pod <podname> -o yaml

Ответ №1:

Вы не можете переоценивать запросы, так как они формируют минимальные необходимые ресурсы для запуска данного модуля. Вы можете превысить лимиты, как вы можете видеть по своему 192% там.

Комментарии:

1. Итак, если я правильно понимаю, единственный способ разместить больше модулей / сделать узел более полезным-это сделать так, чтобы модули имели меньшие запросы (независимо от ограничений), или вообще удалить ЗАПРОС, чтобы иметь неограниченный доступ к процессору, или очистить устаревшие модули/службы ?

2. Технически уверен? Запрос памяти и процессора на модуль должен быть минимальным, необходимым для нормального функционирования. Если они установлены неправильно, то да, вам следует их обновить. Но если они установлены правильно, то вам нужно больше оборудования 🙂

3. Большое спасибо, ребята, в настоящее время мы вообще не будем настраивать запрос и будем настраивать оповещения nagios для мониторинга активности узла. Еще раз спасибо

4. Это нецелесообразно. Вы должны установить их по крайней мере на минимальные разумные значения.