TGViewer
Make. Build. Break. Reflect. Make. Build. Break. Reflect. @makebreakreflect · 1.37K subscribers
Post #101 799
#aws #eks #kubernetes
Задача уровня junior+/middle-

Ну вот подключил ты Karpenter/Cluster Autoscaler + SPOT инстансы через разные node group.
Всё даже работает, ты проверяешь в EKS web консоли.

Задача: как быстро и удобно понять когда/сколько у тебя on-demand нод, а когда spot нод?
Для аналитики использования и вообще для удобства.
Перебираешь все метрики и не видишь ничего сходу.
А сходу их и нет. (а, ну или мне сейчас накидают горелых пирожков с гусятками в мою печурку в комментариях)
Прометей/VM не знает ничего про споты или не споты.
А давайте мы сделаем всё сами.

Сперва в наших существующих нод группах вешаем лейблы
resource "aws_eks_node_group" "on-demand-group" {
...
labels = {
"node-type" = "on-demand"
...
}
...
}


resource "aws_eks_node_group" "spot-group" {
...
labels = {
"node-type" = "spot"
...
}
...
}

Задеплоили, проверяем, есть ли лейблы
kubectl get nodes -L node-role,node-type

NAME STATUS ROLES AGE VERSION NODE-ROLE NODE-TYPE
ip-10-1-123-114.ec2.internal Ready <none> 70d v1.31.4-eks-aeac579 infrastructure on-demand
ip-10-1-14-194.ec2.internal Ready <none> 42m v1.31.6-eks-aad632c applications on-demand
ip-10-1-24-165.ec2.internal Ready <none> 52s v1.31.6-eks-aad632c applications spot

Видим свои лейблы:
- NODE-TYPE, тип ноды - нам нужно как раз это
- - spot
- - on-demand

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

Дальше нам нужно научить "какой-то" компонент обсервабилити кубернетиса собирать его.
У нас есть метрика с именем kube_node_labels от компонента kube-state-metrics
Компонент kube-state-metrics вы можете ставить разными способами: от оператора, отдельный манифест, стак набор, да не важно.
Смотрим в прометиусе/ВМ - метрика есть, но наших новых лейблов нет.
Как бы вы его не ставили, добавьте в его конфиг такой параметр
kube-state-metrics:
...
extraArgs:
- --metric-labels-allowlist=nodes=[node-type,node-role]

Тем самым, мы разрешаем обогащать метрику новыми лейблами из списка.
* Звездочку писать не рекомендую - этим вы лишь будете занимать сильно больше лишнего места в хранилище прометиуса/викиторииметрикс.
Применяем, смотрим в графане - красота(скриншот).
sum(kube_node_labels) by (label_node_type)


Результат: пару простых движений и у нас есть график в графане сколько каких нод у нас было в нужный момент времени.
Видим график и понимаем "ага, нам есть над чем работать, надо сделать тюнинг спот инстансов больше, чем он деманд, чтобы платить меньше", но об этом мы поговорим в следующий раз.

* параметр extraArgs может отличаться синтаксисом вашего чарта, читайте документацию по тому способу, как вы ставили куб стейт метрикс.
  • 👍 11
  • 👏 1
More from @makebreakreflect
  1. Sep 25, 2026#пятница Ждём, чо. А вообще да, заебали эти охринительно полезные новости с невероятными д…
  2. Sep 25, 2026#kubernetes - https://laravel-news.com/laravel-health-kubernetes-prometheus Жаль, что тако…
  3. Sep 24, 2026Но стоит взять задачу из смежной области, где общее понимание есть, а глубокой экспертизы…
  4. Sep 23, 2026В удивительнейшее время живём. - https://typesafe.ai/blog/introducing-system-one-models-an…
  5. Sep 22, 2026#aws #elasticache #redis #kubernetes #troubleshooting #devops #sre #longread Ничего не пре…
  6. Sep 18, 2026Вся эта неделя была очень странной. Опус отупел до уровня 3 модели. Фейбл сжигает токены б…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →