Перечислите память и процессор узлов kubernetes

#bash #kubernetes #kubectl #amazon-eks

Вопрос:

Я пытаюсь перечислить использование процессора и памяти всеми узлами в kubernetes и повторить «превышение нагрузки», если лимит памяти или процессора превышает некоторую цифру. Я перечисляю процессор и память этой команды, но как применить логику, чтобы повторить это load exceeded

kubectl describe nodes | grep -A 3 "Resource .*Requests .*Limits"

Выход:

 Resource                    Requests      Limits
  --------                    --------      ------
  cpu                         360m (18%)    13 (673%)
  memory                      2800Mi (84%)  9Gi (276%)
--
  Resource                    Requests          Limits
  --------                    --------          ------
  cpu                         1430m (74%)       22300m (1155%)
  memory                      2037758592 (58%)  15426805504 (441%)
--
  Resource                    Requests     Limits
  --------                    --------     ------
  cpu                         240m (12%)   5 (259%)
  memory                      692Mi (20%)  3Gi (92%)
--
  Resource                    Requests      Limits
  --------                    --------      ------
  cpu                         930m (48%)    3100m (160%)
  memory                      1971Mi (59%)  3412Mi (102%)
--
  Resource                    Requests     Limits
  --------                    --------     ------
  cpu                         270m (13%)   7 (362%)
  memory                      922Mi (27%)  4Gi (122%)
--
  Resource                    Requests      Limits
  --------                    --------      ------
  cpu                         530m (27%)    5 (259%)
  memory                      1360Mi (40%)  3Gi (92%)
--
  Resource                    Requests      Limits
  --------                    --------      ------
  cpu                         440m (22%)    5250m (272%)
  memory                      1020Mi (30%)  3884Mi (116%)

 

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

1. Было бы здорово, если бы вы могли добавить образец вывода kubectl, так как не у всех есть работающий кластер k8s, чтобы проверить, как точно выглядит вывод.

2. Да, добавьте ввод и желаемый выход.

3. Привет, я добавил вывод команды

4. Можете ли вы описать свой вариант использования и что вы подразумеваете под превышением нагрузки? Потому что эти показатели ненадежны для определения того, сколько ресурсов вы на самом деле использовали. Они показывают только резервирование и чрезмерное использование ресурсов.

5. Когда запрос на процессор превышает лимит, он должен сказать, что предел превышен

Ответ №1:

Попробуйте сделать это, чтобы извлечь нужные атрибуты, сопоставив шаблон регулярного выражения

 kubectl describe nodes | grep -E -A 3 "Resource|Requests|Limits"
 

Вы можете расширить его следующим образом, чтобы извлечь CPU или MEMORY значения

 grep -E -A 3 "Resource|Requests|Limits" | awk '/cpu/{print $2}'
 

Редактировать
Для печати, если предел превышен или нет (например, для процессора, превышающего 1),

 grep -E -A 3 "Limits" | awk '/cpu/{if($2 > 1) print "Limit Exceeded"; else print "Within Limits";}'
 

Вам придется сделать

 | awk '/memory/{print $2}' | awk -vFS="" '{print $1}'
 

чтобы извлечь число из памяти перед применением условия, так как оно дает метрику G с номером.

ПРАВКА 2

Это может дать вам соотношение, основанное на предоставленных выходных данных вашей команды grep.

ЦП

 | awk '/cpu/{print $1,$2,$4}' | awk '{if($3 ~ /[0-9]$/) {print $1,$2/($3*1000)} else {print $1,$2/$3}}'
 

Выход

 cpu 0.0276923
cpu 0.0641256
cpu 0.048
cpu 0.3
cpu 0.0385714
cpu 0.106
cpu 0.0838095
 

память

 | awk '/memory/{print $1,$2,$4}' | awk '{if($3 ~ /Gi$/) {print $1,$2/($3*1024)} else {print $1,$2/$3}}'
 

Выход

 memory 0.303819
memory 0.132092
memory 0.22526
memory 0.577667
memory 0.225098
memory 0.442708
memory 0.262616
 

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

1. Есть ли какой-либо способ проверить всю память, запрос и процессор одновременно и проверить каждый из них на соответствие ограничению?

2. @user16133873 Я обновил ответ. Пожалуйста, проверьте, работает ли это для вас.

3. Любой способ перечислить запрос на процессор и ограничение? а память — запрос и ограничение?

4. Я только что рассчитал соотношение. Пожалуйста, проверьте, удалив последний awk раздел, чтобы лучше понять.

Ответ №2:

Как упоминалось в комментариях, в зависимости от типа ресурса Kubernetes будет вести себя по-разному, и вы можете использовать стек kube-prometheus для предупреждений о превышении процессора и памяти.

  • Если вы хотите отслеживать текущее потребление ресурсов, загляните на эту страницу.
  • Я хотел бы прояснить, что ваша концепция решения, к сожалению, уже несовершенна, потому что запросы ресурсов в терминах kubernetes по своей природе никогда не могут превышать ограничений.
  • Альтернативой является использование чего-то вроде сервера метрик или prometheus, например, в виде стека куб-прометей. С помощью последнего вы можете легко добавлять правила, которые предупреждают вас, когда приложение превышает запросы.
  • Проблема с ограничениями немного сложнее, потому что в зависимости от типа ресурса kubernetes будет вести себя по-разному. Если фактическое потребление памяти превышает заданный предел, kubernetes автоматически отключит соответствующий модуль. С другой стороны, если фактическое потребление процессора превысит заданный предел, это приведет к дросселированию, что в основном означает, что время процессора будет ограничено заданным пределом.