#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 автоматически отключит соответствующий модуль. С другой стороны, если фактическое потребление процессора превысит заданный предел, это приведет к дросселированию, что в основном означает, что время процессора будет ограничено заданным пределом.