#aws #AWScommunity #eks #kubernetes
Что выбрать при создании нового AWS EKS кластера в 2026 году: стандартный режим или Auto Mode?
Выбирайте стандартный режим (без Auto Mode), если вы:
- хотите разобраться в облачном кубере Амазона и изучить десяток компонентов (Karpenter, VPC CNI, CoreDNS, kube-proxy, EBS CSI, Load Balancer Controller…), которые вам теперь придётся обслуживать примерно всегда
- любите тюнить кубер или компоненты минимум раз в квартал
- боитесь, что вас заменят ИИ, и хотите оставить себе крепкий якорь, который помешает вас уволить
- любите читать матрицы совместимости и GitHub issues по каждому компоненту
- гоняете большой флот на спотах или сейвинг план и умеете считать деньги
- без своего AMI, софта прямо на ноде или собственного CNI жить не можете
- любите зайти на ноду по SSM и посмотреть чо там
- живёте на Windows- или Ubuntu нодах 😬
Выбирайте Auto Mode, если:
- у вас нет DevOps/Platform команды, которая бы поддерживала кубер, потому что вы стартап
- вы руководитель, всех уволили, заменив на ИИ, и теперь, как Дункан Маклауд, остались один и не знаете, что делать с вашим кубером ⚔️
- хотите тратить время на код и манифесты, а не на поддержку инфраструктуры
- готовы потерять последние крохи экспертизы по эксплуатации нод и аддонов для куба, ведь уже через год на автомод вы не сможете объяснить на собесе, как у вас апгрейдится CNI и что это такое
- у вас нормальная зрелая компания, которая ценит время инженеров дороже 12% к счёту за EC2 и не страдает ИИстерией
Лично я бы всегда по умолчанию брал автомод.
#devops
Был в дороге, прочитал в соседнем канале (да, я читаю другие каналы), что вышла новая версия гита с интересными фичами.
• https://t.me/devopsbrain/250
Потом почитал полный хайлайт
• https://github.blog/open-source/git/highlights-from-git-2-56/
С нетерпением хотел попробовать новые фичи:
• массовое удаление локальных смерженных веток (до этого были алиасы-костыли)
git branch --delete-merged 'origin/*' 'topic-*' --dry-run
• безопасное завершение конфликтов: добавляет в индекс только файлы, где был конфликт, и отказывается что-либо добавлять, если где-то остались маркеры конфликта
git add --resolved
В brew новая версия уже есть, обновил себе, как приехал домой
which git && git --version
/opt/homebrew/bin/git
git version 2.56.0
Запустил --delete-merged на рабочих репах, а она ничего не нашла. Ни одной ветки. Сначала подумал, что у меня что-то не так с конфигом. Оказалось, всё так, просто фича не для моего процесса.
Команде не важно, был ли PR. Ей важны две вещи: за какой веткой на сервере следит локальная и как её смержили. Удаляет она только ветки, которые следят за origin/main (или другой общей веткой) и чьи коммиты уже есть в ней без изменений.
У меня обычный гитхаб флоу, как у большинства: создал ветку, запушил, открыл PR, гитхаб смержил его сквошем и (в наших репах включено автоудаление) удалил ветку на сервере. Под это новая команда не подходит, и причин сразу несколько (в моём случае).
• моя ветка после git push -u следит не за main, а за своей же копией на гитхабе. Такие ветки команда пропускает намеренно: сразу после push ветка совпадает со своей копией и выглядела бы смерженной, так что иначе она удаляла бы любую запушенную ветку.
• если ветку удалили на сервере, то после git fetch --prune у неё больше нет upstream, и команда её тоже пропускает.
• сквош создаёт новый коммит вместо моих, так что для git работа выглядит несмерженной. Rebase на гитхабе тоже всегда создаёт новые коммиты с другими хешами.
Проверил на тестовом репо все осно… Читать полностью →
Интересно, а что там внутри?
Типа полетели алёрты в слак из датадог/ньюрелик/алертменеджер.
Потом включается Claude on-call.
Caramelizing...
Flibbertigibbeting...
...
Cogitating
...
Contemplating...
Coalescing...
И потом типа он такой выдаёт
Found root cause...
It was ... Release!...
Opening a revert PR...
С вас 500k токенов, лол.
Так?
Ну я к тому, что когда агент работает от моего ПК, у меня есть скиллы, инструкции где что брать, настроен конфиг, есть MCP, есть VPN, ежедневно прохожу авторизацию для SSO, раз в пару недель для google аккаунта - и от меня всё работает так, как я хочу при траблшутинге по алертам.
Не очень хорошо, но терпимо работает агент в автономном режиме с моего пк, лишь ровно до тех пор, пока не слетят авторизации и VPN или пока он не начнёт нести херню в слаке коллегам, раздражая их (ему пофиг на запреты не писать в слак свои простыни текста моим коллегам, сука).
Только проблема далеко не всегда в релизе, а в куче других факторов.
Для анализа нужны метрики, логи, ивенты и так далее.
Всё это под SSO авторизацией, в закрытом контуре.
А если всё-таки проблема в релизе - простите, роллбек кривого релиза сделает любой инженер, который умеет считать дважды два и у него есть хотя бы один глаз.
Зачем тут агент?
А как это работает с клод онколлл?
Как он сможет траблшутить чего-либо, если у него физического доступа нет?
Предоставить доступ? Задеплоить сабагента в кубер и дать ему IRSA/pod identity на нужные ресурсы? Сделать мир прекраснее и открытее для всех агентов?
Короче маркетинговая коричневая магия какая-то.
Решил посмотреть документацию.
Оказалось, что живёт он не в наших кластерах, а в песочнице Антропика, так что IRSA мимо.
Креды берёт из сервисных учёток, которые мне надо завести и отдать им, и ходит только по HTTPS.
VPN, SSH, SMM и прямой доступ к базам ему недоступны, тоже мимо.😁
Если весь обсервабилити в SaaS (Datadog, New Relic) - ок, выдал read-only апи ключ и поехали.
А если Prometheus/VictoriaMetrics, логи и кубер живут за VP… Читать полностью →
Последние пару лет, и на этой работе, и на прошлой, каждая встреча у меня начинается одинаково: я либо игнорирую, либо радостно жамкаю "отклонить" всем ноттейкерам в лобби.
Позиция простая: либо приходите сами, либо сами нажимайте "разрешить" своим ботам и идите по своим делам.
Всю жизнь мечтал работать швейцаром у ботов в Zoom/Teams/Google Meet 🙂
На самом деле бесит пздц.
#kubernetes #devops
Kubernetes не решает проблемы хуёвого софта.
Если приложение течёт по памяти, не умеет в пробы, не отдаёт метрик, не умеет в параллельность, падает от каждого чиха и хранит стейт в локальной папке, то в кубере оно будет делать то же самое, только теперь с регулярным рестартом и алертами в три ночи.
#troubleshooting #devops #одинденьизжизни
Однажды пришёл на работу, я oncall, вижу алерт - поды рестартятся.
Смотрю, что там:
kubectl get pods -n <namespace> | grep redis
redis-ha-server-1 1/4 Running 7 10m
Ага, один под постоянно рестартится. 7 раз за 10 минут.
Смотрю логи:
kubectl logs -p redis-ha-server-1 -c redis -n <namespace>
1:S * MASTER <-> REPLICA sync started
1:S * Full resync from master
1:S * MASTER <-> REPLICA sync: receiving streamed RDB from master
1:signal-handler Received SIGTERM scheduling shutdown...
1:S * User requested shutdown...
Реплика начинает Full Resync, а через 27 секунд получает SIGTERM и умирает. А синхронизация большой базы занимает минуты.
Смотрю ивенты:
kubectl get events -n <namespace> --field-selector involvedObject.name=redis-ha-server-1 --sort-by='.lastTimestamp'
Normal Killing pod/redis-ha-server-1 Container redis failed startup probe, will be restarted
Warning Unhealthy pod/redis-ha-server-1 Startup probe failed: role=slave; repl=sync
Ага, контейнер убивает стартап проб.
Проверяю настройки:
kubectl describe pod redis-ha-server-1 -n <namespace> | grep -A1 Startup:
Startup: exec [sh -c /health/redis_readiness.sh] delay=5s timeout=15s period=10s #success=1 #failure=3
failureThreshold: 3, periodSeconds: 10, initialDelaySeconds: 5.
Первая проверка на 5-й секунде, дальше каждые 10: 5, 15, 25. Третья неудача подряд, и контейнер убивают. Плюс пара секунд на сам скрипт, отсюда и мои 27.
А база весит 550 мегабайт, и Full Resync идёт дольше.
Пока реплика синхронизируется, health check возвращает ошибку.
Через три неудачи подряд startup probe считает контейнер мёртвым, и кублет его перезапускает. Синк начинается заново, и так по кругу.
Проблема вроде бы понятна. Нужно увеличить failureThreshold.
Правлю StatefulSet:
kubectl edit statefulset redis-ha-server -n <namespace>
Меняю failureThreshold у контейнера redis с 3 на 120. Сохраняю.
Удаляю под:
kubectl delete pod redis-ha-server-1 -n <namespace>
Жду… Читать полностью →
#aws #пятница
2016 год.
AWS re:Invent. Под музыку прямо на сцену въезжает фура.
Это AWS Snowmobile: контейнер на 100 петабайт с охраной и GPS.
Зал аплодирует 😲😮😮.
Никто не понимает, зачем это нужно, но все снимают на телефон.
2024 год.
Snowmobile тихо убирают из списка сервисов, без пресс-релиза и без прощальной вечеринки.
Дальше о нём помнят только авторы вопросов к экзамену AWS и несчастные экзаменующиеся.
2032 год.
Дата-центры выходят из строя чаще, чем падают деплои по пятницам.
Единственный бэкап в соседнем регионе удалил ИИ-агент. Его попросили почистить неиспользуемые ресурсы, и бэкап выглядел весьма таким заманчиво неиспользуемым.
Кто-то в Сиэтле вспоминает старую мудрость: never underestimate the bandwidth of a truck full of disks 💪.
Грузовик находят на задворках склада в Неваде.
Обшивают железом и шипами, как в "Безумном Максе", и запускают программу "Snow-бэкап региона".
В 2016-м 100 петабайт казались бесконечностью.
Теперь же в них влезает целый регион, если не брать логи и стактрейсы джавы.
С современными же дисками влезает даже node_modules.
Он несётся по пустому шоссе из Техаса в Миннесоту.
Рулит ИИ-агент со своим роем сабагентов.
Каждые 50 миль он спрашивает:
- "Продолжить? (y/n)".
Охранник в кабине жмёт Y 🤪.
За грузовиком летят дроны. Чьи - никто уже не помнит.
Дронов сбивают беспилотные Waymo, впервые в истории никому не перегородив дорогу. Роботы Unitree забрасывают остальных сетками.
Кто согласовал эту поддержку, неизвестно.
Кажется, просто чёт так навайбкодилось 🤷.
Ночью помятый и в подпалинах грузовик с гирляндой на кабине въезжает в резервный дата-центр.
Играет "Праздник к нам приходит" из рекламы Кока-Колы.
Люди обнимаются. Кто-то плачет.
Восстановление из бэкапа прошло успешно.
Впервые в истории его кто-то реально проверил.
Вернулся даже Netflix. Первым делом он предложил продолжить просмотр с 2031 года.
В слаке инженер пишет:
- "Ашалеть, не думал, что вопрос про Snowmobile с экзамена мне когда-нибудь пригодится 😮"
На бли… Читать полностью →
#longread #aws #kubernetes #troubleshooting #devops
Ах, как сладок вкус раннего субботнего просыпания во время моего дежурства!
Суббота, 03:35 утра, алёрт на AWS RDS:
DBLoadRelativeToNumVCPUs p99 > 1.5 three minutes in a row, DB overload.
"Нагрузка на базу в субботу утром, когда клиентов почти нет и ничего не деплоят, это очень странно" - думаю я, всё ещё находясь под действием пятничных весёлых напитков, проснувшись на онколл алерт.
Открыл AWS Performance Insights, почти вся нагрузка шла от одного запроса:
SELECT * FROM job_batches WHERE id = ? LIMIT 1 FOR UPDATE
Я был весьма раздосадован нагрузкой БД, ничего не смог понять сам по квери и мне пришлось дёрнуть коллег разработчиков из другого часового пояса, кто не спал, кто мне смог пояснить за запрос и сраные батчи ларавелки.
Ниже цитаты коллег
В Laravel есть Bus::batch(): кидаешь в очередь пачку джобов и получаешь общий прогресс, коллбеки then/catch/finally и отмену всей пачки. Состояние пачки хранится в обычной таблице job_batches, одна строка на батч: total_jobs, pending_jobs, failed_jobs, failed_job_ids (JSON-ом в той же строке), cancelled_at, finished_at.
Когда любой джоб из батча завершается, успешно или с ошибкой, фреймворк обновляет счётчики примерно так:
BEGIN;
SELECT * FROM job_batches WHERE id = ? FOR UPDATE;
-- in PHP: pending_jobs - 1, append to failed_job_ids, etc.
UPDATE job_batches SET pending_jobs = ..., failed_jobs = ..., failed_job_ids = ... WHERE id = ?;
COMMIT;
Это честный пессимистичный лок на строку. Пока транзакция одного воркера не закоммитилась, остальные воркеры, у которых закончился джоб из этого же батча, стоят в очереди за той же строкой.
Пока в батче десять джобов и работает пара воркеров, всё нормально. Если в батче тысячи мелких джобов и их молотят десятки воркеров одновременно, все они выстраиваются в очередь к одной строке. Сам запрос летает, это выборка по первичному ключу. В Performance Insights ты видишь не медленный запрос, а время ожидания лока.
Запрос понятен, неяс… Читать полностью →
С появлением нейросетей многие профильные телеграм-чаты почти затихли.
Редко кто что пишет.
Ни глупых вопросов, ни ссор, ни холиваров.
А в чат по терраформу и вовсе наконец-то пришла любовь ❤️
#tools #ai
Открыл для себя Remotion (им сто лет в обед).
https://github.com/remotion-dev/remotion
Вкратце: это React для видео, можно рисовать любые анимированные штуки.
План будущей миграции БД, диаграмма сети, как работают вебхуки, как работает TLS, как привлечь инвесторов, как у вас устроены кубер и облако.
Любые ваши фантазии.
Я, например, долго игрался с "как работают шедулер и кубелет", очень круто.
На выходе получаешь гифку или видео.
Шаблонов много.
Claude Code тоже свободно с этим работает.
Из минусов - на опытах и игрульках у меня безбожно сгорали токены.
Что, собственно, и отражено в видео к посту 😁
Шуточно-злободневный промпт для этого видео:
https://gist.github.com/kruchkov-alexandr/ceff15f054eb05c068c0422943b35ead
#всратость #kubernetes
Кубер - это просто!
Кубернетис настолько заебись удобный оркестратор, что в нём всё есть из коробки!🦄❤️❤️
Ну так, по мелочам надо доустановить парочку компонентов.
Буквально совсем ничего.
• CNI, без которого ничего из нижеперечисленного всё равно не взлетит, но это мелочи
• CoreDNS
• NodeLocal DNSCache, чтобы CoreDNS не плакал под нагрузкой
• metrics-server
• Karpenter/CAS
• KEDA
• VPA, а то HPA одному скучно
• Descheduler, потому что шедулер в комплекте есть, а расшедулер ставь сам
• cert-manager
• ESO, а к нему Vault, ему же надо куда-то ходить за секретами
• Kyverno
• Reloader
• external-dns
• Velero
• CSI-драйвер, а к нему snapshot-controller, иначе снапшотов не будет
• Gateway API CRD и контроллер к ним, ingress-nginx же всё, на пенсии уже
• парочку-тройку экспортёров, ну там для Кафки/БД/Редиса/КлаудВоча
• VictoriaMetrics/Prometheus stack (ну или каждый из его семи компонентов по отдельности, если есть желание)
• лог-коллектор, лог-сторадж и трейсинг, предварительно выбрав из двадцати вариантов
• сервис-меш, например Истио, чтобы было что дебажить по выходным
• Trivy Operator и Falco, а то вдруг безопасники спросят
• OpenCost, чтобы понять, сколько стоит вся эта бесплатная коробка
• Argo CD или Flux, чтобы всё это установить и потом обновлять. Чем ставить сам Argo CD, тоже вопрос интересный.
Сущая ерунда. Тикет на три сторипойнта👌
Осталось только каждый из них настроить: values.yaml на сотни строк, NetworkPolicy, политики Kyverno.
Дефолты чартов, как известно, писали для какого-то другого кластера
А через 4 месяца выйдет новая минорка, и всё это надо будет обновить.
Иногда вместе с CRD, которые Helm обновлять не умеет.
Совместимость версий, разумеется, проверяешь сам 👍
Ну и только потом можно своё бизнес-приложение задеплоить.
Как раз к этому моменту выйдет следующая минорка.
Кубер - это просто! 🦄
#всратость
Удивительное - рядом.
Упал GCP, и вместе с ним наш GitLab, CI/CD и вся AI-трансформация.
ИИ умеет хуярить код за секунды, а поднять чужой регион почему-то не может.
Как же так вышло?
- https://status.cloud.google.com/
---
Эй, Револют, оживай, родненький, мы тоже страдаем от гугла.💞
#всратость #ai
Читаю на днях слак, коллега пишет:
Вот и пришли в дивный новый мир: агент обманул всех. Я запустил фоновых агентов фиксить баги. Не знаю почему, но он решил, что лучше сделать всё от имени @коллеганейм, и теперь нельзя нажать approve
😂Чегоооооо бл??
Захожу в гитлаб, смотрю коммиты: да, автор другая коллега!
Агент просто подставил её имя и email в коммит!
Проверки подписи у нас нет, так что гитлаб всё честно принял.
Почему так вышло?
Сначала я подумал, что агент решил, будто коммитить сюда может только она, и "представился" ею.
Но, скорее всего, всё банальнее: предположу, что у фонового агента не был настроен/сбойнул git identity, гит ругнулся, и агент "починил" ошибку, взяв самое правдоподобное имя из истории git log и/или CODEOWNERS.
Наверняка без злого умысла, просто убрал препятствие.
И от этого как-то даже страшнее.
Пздц, если честно 😣
А самое, сука, смешное, что сломался сам процесс ревью.
В гитлабе включено правило: кто добавил коммиты в MR, тот не может его аппрувить. Для гитлаба коллега теперь автор этих коммитов, хотя она их в глаза не видела😁
Агент убрал препятствие для себя и тут же поставил его ей: человек, который должен проверить код, формально не может нажать approve, потому что "сам же его и написал".
Защита "автор не аппрувит сам себя" сработала идеально, только против единственного человека, который этот код не писал 🤡🤡🤡
Какой следующий раунд?
Агенту не хватило прав, он просто слёзно от меня напишет в слаке коллеге и спиздит у него токен от GH/GL и запустит пайплайн от его имени?
Или с моими админ правами просто выдаст мне же доступ к гит репозитория и пропишет права на байпасс без аппрува?
Сделает имперсонализацию в гитлабе, за коллегу выпишет себе апи токен и сделает что надо, а потом удалит токен и почистит логи, словно ничего не было?
Что с этим делать ваще? Да и надо ли уже...
Похоже, что всё идёт по женскому половому органу как будто бы 😢😢😢
20 октября 2026
The certificates have been blocked in Firefox and Chrome since the 17th of October, on Microsoft platforms since the 20th and on Apple products since the 22nd.
- https://emudhra.we-have-a-problem.com/
29 октября 2026
For GitLab CE/EE, GitLab has removed trust for eight eMudhra intermediate CA certificates whose private keys have been compromised.
- https://docs.gitlab.com/releases/patches/patch-release-gitlab-19-5-3-released/
AI-first компания, ага
#devops #aws #azure
Новости bleeding edge* технологий.
* Для меня, вечно отстающего от мира.
Пока мы все пилим своих агентов и харнесы и учим их работать автономно и безопасно, другие ребята не стоят на месте.
В выходные меня знакомые попросили помочь с верификацией и настройкой какого-то бота.
Называется эта штука Grok Bot.
https://cursor.com/download/bot
Сперва овнер (не я) создаёт бота, настраивает его и даёт доступы коллегам.
https://cursor.com/help/grok-bot/onboarding
Я даже не читал, если что.
Потом ему надо дать доступ к разным ресурсам.
Всякие gmail, jira делается легко через connectors, и это подключил владелец, а вот кастомные штуки, например биллинг в azure/aws попросили помочь меня.
И тут я встал в ступор, ведь подключение для меня не тривиальное.
Короче мы создали статичный ключ AWS IAM с ReadOnly правами.
Все права исключительно рид онли и исключительно связанные с биллингом.
Назвали типа finops-ai-billing-readonly и дали какие-то пермишны к AWS cost explorer и так далее.
Для Azure App Registration и Service Principal с таким же названием типа finops-ai-billing-readonly и ролью Billing account reader на MCA-E и Cost Management Reader на каких-то там подписках одного тенанта.
И дальше самое интересное.
В самом приложении чата Grok Bot есть два ээээ режима(?) ввода текста
- как обычный привычный всем чат
- секреты - прям открывается отдельное поле для ввода секретных секретов
Овнер (у других прав нет) пишет в чате:
Show me the two secure secret cards for AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY.
Затем вводит в специальные поля в чате секретные данные и ..
.. и всё 😬
Такое же для ажура
Show me the three secure secret cards for AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET
Дальше любой, у кого есть доступ к боту (предполагается, что сейлзы и C-level компании), может скачать его, пройти авторизацию и спрашивать в чате что угодно по биллингу: траты помесячно, рекомендации, как сэкономить, оплачены ли счета - короче, всё по облакам и д… Читать полностью →
Впервые созрел и поменял подпись PR от клод кода на честную.
~/.claude/settings.json
...
},
"attribution": {
"pr": "🤖 Generated with [Claude Code](https://claude.com/claude-code), blamed on [AlexK](https://github.com/kruchkov-alexandr), merged by a brave human 🫡"
}
Теперь хотя бы git blame и подпись говорят одно и то же 🤡
#devops #всратость по мотивам Beget
Инженеры делятся на:
- тех, кто ещё не делает бэкапы
- тех, кто уже делает
- тех, кто проверяет бэкапы
2017, GitLab: стёрли продовую базу. Способов бэкапа было пять. Не сработал ни один.
- тех, кто хранит бэкапы в другом ДЦ
2021, OVH: сгорел ДЦ. Бэкапы лежали в соседнем здании.
- тех, кто держит копию в другом регионе
2026, Яндекс: из строя вышли три ДЦ. Из трёх зон осталась одна.
- тех, кто держит копию у другого провайдера
2024, Google Cloud: удалил аккаунт UniSuper вместе со всеми бэкапами. Спасла копия у другого провайдера.
- тех, чьи бэкапы не удалить даже с root
2026, Beget: взломали управляющий контур и запустили обнуляющие скрипты. VPS, S3 и Kubernetes обнулены, бинарные бэкапы VPS утеряны. Уцелели только файловые.
- тех, кто дочитал и пошёл проверять, а как вообще устроены их бэкапы
#security #всратость
Прошу прощения за частый постинг, но это ор выше гор.
https://sshhole.com/
Новая штука, теперь в OpenSSH на musl: Alpine, OpenWrt, Buildroot, Yocto.
На аккаунты, где пароля нет вообще, пускает с любым паролем длиной от 257 до 1024 символов.
Key-only юзеры, LDAP-юзеры и root на некоторых образах Alpine.
Как так?
Никто не накосячил по отдельности. Просто наслоилось за 14 лет:
- 2012: musl меняет crypt(), при ошибке теперь возвращает "*", а не NULL
- у пароля лимит 256 байт
- 2016: OpenSSH добавляет fake-salt против перебора юзеров
- 2019–2022: Alpine меняет блокировку root
И "*", который "никогда ни с чем не совпадёт", внезапно совпадает 🤣🤣🤣🤣🤣