Kubernetes и кот Лихачева
4.2K subscribers
996 photos
28 videos
4 files
1.06K links
Все про Kubernetes и немного про кота Маркуса

Чат для конструктивного общения: https://t.iss.one/+Q4z_2ckAkBxhNWNi

Задать вопрос: https://t.iss.one/K8sSlurm_bot?start=question
Download Telegram
API, за которые не стыдно

Сколько раз вы, глядя на API своих сервисов, пытались по метрикам угадать, кто и, главное, зачем в него стучится? А сколько раз приходилось саппортить легаси, где авторы давно сменили проект, страну или даже профессию, оставив после себя свалку из API endpoints, которые трогать — себе дороже?

Сегодня мы разберемся, как проектировать API, которые выдержат испытание временем, переживут несколько поколений команд-разрабов и не станут причиной твоего профессионального выгорания.

И да, наш любимый Кубер поможет нам не только развернуть это добро, но и правильно его готовить и обслуживать.

🔷 Читать — по ссылке 🔷
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9🌚1
Привет, на связи Маркус

Я вернулся, чтобы сказать вам, что продвинутый курс по k8s для разработчиков стартует уже через неделю.

🐈 Фундаментальные знания с акцентом на разработку
🐈 79% программы — практика и работа со стендами
🐈 Траблшутинг
🐈 Итоговая сертификация, которая закрепляет весь пройденный материал и навыки

Практика на курсе обновлена в сентябре 2024 года (свежее всех на свете рыбов, даже нидерландской селёдки).

Подробности — на странице курса.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3👍2
Обновляем k8s без слез
Часть 1

Представьте, что вы решили обновить свой кластер Kubernetes. Все здорово, новые фичи, исправление уязвимостей, новые баги.

Но что, если что-то сломается? Что, если вы используете deprecated API, которые в новой версии Kubernetes решили выпилить?

➡️ Вот тут-то на помощь приходит kubent.

Что такое Kubent и зачем он нужен?

Kubent (kube no trouble) — это инструмент, который сканирует ваш кластер и сообщает об использовании deprecated API.  Другими словами, kubent заранее предупреждает о возможных проблемах, позволяя вам подготовиться к обновлению кластера.

Как работает?

Он подключается к кластеру, используя ваш kubeconfig, получает информацию о ресурсах кластера и на основе списка заданных правил сообщает, какие из используемых API стали deprecated.

Вы, вероятно, слышали про язык rego для написания политик в open policy agent.

Не самый удобный язык, скажем так. Однако именно он работает внутри kubent : правила можно посмотреть здесь.

Например, здесь мы видим, что функционал volume snapshots с бета версией, которые впервые стал general availability в k8s аж в версии 1.20, когда-то будет удален из k8s.

Другими словами

apiVersion: snapshot.storage.k8s.io/v1beta1 


перестанет работать и останется только

apiVersion: snapshot.storage.k8s.io/v1 


Гайд по установке можно найти тут.

Как исправить найденные проблемы

После анализа результатов вам нужно исправить все проблемы, связанные с использованием deprecated API.  Для этого вам нужно обновить манифесты ресурсов, чтобы использовать актуальные API версии.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Обновляем k8s без слез
Часть 2

Продолжаем говорить про обновление k8s, и сегодня разберём другую проблему, с которой можно столкнуться.

К сожалению в базе правил нет многих сторонних инструментов. Например, правил для istio, где большая часть CRD перешла в стабильную стадию.

Конкретно для istio есть это.

И есть в документации одна замечательная строка

What analyzers are supported today?

We’re still working to documenting the analyzers. In the meantime, you can see all the analyzers in the Istio source.

Прекрасно, разбирайтесь сами, что поддерживается, копаясь в коде 😂

Например, для определения deprecated APIs и полей можно посмотреть это или запустить istioctl analyze на вашем кластере.

По итогу со всей этой гонкой апдейтов получаем большой operational toil: добавляем сотни разных CRD в кластер и затем нужно отслеживать, а не сломаются ли они при релизе новой версии стороннего контроллера/оператора. А сбоку появляются и дополнительные приколы, связанные не просто с deprecation, а с полной миграцией настроек одного API на другой API.

Да, речь про gateway API.

Мы вам создали ресурсы ingress, но поняли, что сделали плохо, поэтому теперь точно сделаем хорошо, пострадайте всего лишь еще один раз, переписывая манифесты под новый формат (и попутно создавая новые баги, с которыми еще не встречались). При этом gateway API, на мой взгляд, очень сильно напоминает ресурсы istio.

На самом деле, конечно же, это не так, ingress обещают поддерживать условно бесконечно.

Про gateway API и почему его создали расскажу в другой раз.

И напоследок: альтернативный инструмент. Он уже, кажется, поддерживает побольше deprecated APIs из коробки. Посмотреть можно здесь.
🔥4👍3
Ностальгии пост

Развели тут кубернетисы и прочие прометеусы.

Вот в наше время сервера были настоящие, их можно было потрогать и еще они могли прикольно делать пшшш, если внутри что-то сгорало, а не эти ваши бездушные облака, в которых и железо не потрогаешь.

Эх, где мои патч-корды!


Если вам далеко за 30 и вы давно в IT, то велика вероятность, что вы когда-то (может и сейчас) работали сисадмином (или программистом-админом-эникеем-заправлятелем принтеров).

Это были те времена, когда «войти в IT» никому не было нужно, и сильно больших перспектив в отрасли вряд ли можно было достичь. Обычная обслуживающая работа: починить, настроить, поставить, автоматизировать.

Ключевые слова для олдов: башорг, итхэппенс, лор, ирка, домовые сети.

Я сам начинал админствовать помаленьку с линуксовыми серверами, поднимал IP телефонию поверх openvpn между филиалами одной конторы (о, эти часы копания с tcpdump с поисками, где теряется голосовой трафик), переносил почтовый сервер с полумертвого железа с сохранением всех почтовых ящиков, автоматизировал раскатывание новых машин через PXE boot, внедрял zabbix там, где о мониторинге и не думали, и многое другое.

И, что самое главное, все это стало возможным благодаря развитию сетей. Без нормальной сетевой связности с низкой latency и с высоким throughput не было бы ни кубернетиса, ни прочих распределенных систем.

Скажем за все спасибо ETHERNET!

Итак, сегодня, 22 мая, день рождения ethernet. Считается, что технология была изобретена аж в 1973 году.

Все началось с коаксиальных кабелей. У них была куча проблем: малая гибкость, скорость, стоимость.

Все изменилось, когда витая пара пошла в массы. О, сколько кабелей было обжато кримпером.

А схема обжима заучена наизусть. Вот шпаргалка по порядку выбора проводов:
😁12👍81
Вопрос для тех, кто помнит разницу между хабами и свитчами. Популярный вопрос был в свое время на собеседовании на сисадмина.

Что произойдет, если взять один патч-корд и воткнуть оба его конца в один и тот же неуправляемый коммутатор?
Anonymous Quiz
18%
Ничего не произойдет. Коммутатор просто будет передавать данные сам себе.
3%
Коммутатор начнет работать в режиме повторителя, усиливая сигнал и передавая его на все порты.
78%
Коммутатор создаст петлю, и в сети возникнет широковещательный шторм, способный парализовать ее.
2%
Коммутатор перегорит.
👍3💔1
Правильный ответ: 3

Пояснение: Если на коммутаторе нет работающего протокола STP, то он не умеет обнаруживать и предотвращать петли. Он просто тупо передает все пакеты на все порты. В результате, когда ты создашь петлю, пакеты начнут бесконечно циркулировать по сети, создавая широковещательный шторм, который очень быстро забьет всю полосу пропускания и сделает сеть неработоспособной.

Наверняка такую ошибку допускали многие, перепутав порты на патч-панели. Для тех, кто никогда не работал с физическими сетями, патч-панели — на фото.

В реальности все часто было не так красиво, как на первой фотографии — скорее, как на второй. И не потому, что админ негодяй, а потому, что все это нарастает годами, а времени плотно заняться рефакторингом сети никогда нет. Да и есть риск сломать сеть так, что потом будешь долго искать, какой из сотен кабелей воткнул не в тот vlan, к примеру.
👍71
Как встроить безопасность в свои процессы?

➡️ 4 июня в 19:00 мск — бесплатный вебинар с экспертами Kaspersky и Positive Technologies.

🔹 Dev vs Sec: всё ещё не разговаривают — почему?
🔹 Что DevSecOps может, а что не может?
🔹 Где DevSecOps реально помогает бизнесу, а где мешает?
🔹 Time to market — вечная басня, которая не про DevSecOps
🔹 Где в DevSecOps сейчас Ops, если DevSecOps это AppSec?

Ссылка на трансляцию придёт в бота в день вебинара. Занимайте места в первом ряду!

А пока ждёте — пройдите короткий тест из 5 вопросов и узнайте, насколько ваша команда готова к DevSecOps.

➡️ Подробности — в боте.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
«Kubernetes для разработчиков» стартовал!🐈

Ближайшие 7 недель мы с коллегами будем учить студентов:

➡️ создавать и настраивать CronJob в Kubernetes, контролировать частоту выполнения задач;

➡️ устанавливать ограничения на перезапуск подов и задавать тайм-ауты на выполнение задач;

➡️ создавать и конфигурировать Service и Ingress для различных Deployment;

➡️ деплоить в Kubernetes, управлять переменными окружения контейнера и работать с логами подов, сохраняя их на указанные пути;

➡️ создавать и настраивать Helm-чарты для приложений, включая интеграцию с Redis через PersistentVolumeClaim;

➡️ настраивать CI/CD пайплайн в GitLab для автоматического билда, пуша образов и деплоя приложения в кластер Kubernetes.

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

Присоединиться можно до конца недели. Подробности — по ссылке.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
k8s и бородатая база: сеть и unix

Ситуация:

➡️ Вы развернули on-premise кластер. Никаких managed сервисов в облаке, где можно одной кнопкой нарастить ноды, если вдруг лень освоить Terraform или другие инструменты IaC.

➡️ Внезапно нода отказывается регистрироваться в кластере. В логах тишина (кстати, в каких логах? компонентов-то много, которые логи пишут), kubectl get nodes показывает, что нода «NotReady». Что делать?

Помните времена dial-up модемов и админов, рулящих правилами iptables через /etc/rc.local (на или через другие init скрипты)? Но сегодня у нас есть k8s, виртуализация и прочие абстракции, призванные упростить нашу жизнь при работе at scale (или нет).

Знание UNIX-like систем — это база! k8s построен поверх базовых вещей: демонов, процессов, файловой системы, сетевых взаимодействий, сертификатов и так далее. Например, kubelet, может запускаться как systemd unit, и если у вас on prem кластер, умение продебажить проблемы на уровне linux может в редких случаях пригодиться.

➡️ Возвращаясь к ситуации выше — вот, какие есть варианты решения:

Вариант 1 (без solid знаний UNIX и сети)

Панически перезапускаем все подряд, молимся, обновляем k8s до последней версии (а вдруг поможет!).

Вариант 2 (с solid знаниями UNIX и сети)

🟠 Проверяем системные логи на ноде.
journalctl -u kubelet -f

🟠 Возможно, проблема с DNS, с сертификатами, с дисковым пространством, с сетью, с файрволом, с роутингом, с неожиданно сбоящей сетевой картой, в которой багованная прошивка (реальная история), да много чего еще.

🟠Смотрим конфигурацию kubelet.
cat /var/lib/kubelet/config.yaml . Мало что там понимаем 😂, но главное, посмотрели с умным видом.

🟠 Анализируем сетевую конфигурацию ноды.
ip addr show, ip route show, iptables -L (или nft list ruleset, если у вас современный дистрибутив). Убеждаемся, что сеть настроена правильно, что трафик между воркер нодой и мастер нодой не блокируется, что DNS резолвится корректно.

🟠Проверяем SELinux/AppArmor. Эти системы безопасности могут блокировать доступ kubelet к необходимым ресурсам. ausearch -m AVC -ts recent может помочь выявить проблемы.

🟠Не забываем про файрвол! Возможно, файрвол на ноде блокирует трафик от kubelet к kube-apiserver. Может быть вы разворачиваете ноды через ansible и где-то была внесена правка в переменных, из-за которых для всех новых настраиваемых нод файрвол неожиданно подкидывал начал подкидывать правила, которые вообще не для k8s нод предназначались.

И вот, спустя часы копания в логах вы докопались до причины.
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥5🤓2
Всегда виноват DNS (или сертификаты).

➡️ В продолжение вчерашнего поста — реальный кейс из практики.

Представьте, что есть внутренний DNS сервер, который автоматически регистрирует новые (и старые, конечно) серверы. Как - непринципиально. Хоть статикой через ansible, хоть через consul dns, хоть через любые другие велосипеды🚴

На новый сервер для новой k8s ноды так же через ansible все раскатили, но kubelet не хочет регистрироваться — ошибка сертификата. При этом DNS адрес API сервера правильный. Чудеса. IP адрес все равно никто не смотрел.

Long story short: в сети, без какой-то сегментации и с общим dns сервером оказалось 2 k8s кластера. Просто второй по ошибке частично раскатили «поверх» первого, подменив dns запись до API сервера (перезаписав в DNS сервере). Ну а кешировать DNS записи можно и на сутки, так что другие ноды вполне продолжали работать до поры до времени.

Все работает. Пока не перестанет.

➡️ Что почитать, чтобы получить более основательные знания сетей?

1. Таненбаум, «Компьютерные сети»
Он известен еще и тем, что создал minix — учебную ОС для изучения студентами. А так же как человек, активно споривший с Линусом Торвальдсом по поводу дизайна ядра Linux в далеком 1992, когда Торвальдс только начинал писать linux.

2. «Сети для самых маленьких»
Более простой путь, без погружения в преобразование Фурье.

Вопрос на подумать: к каким проблемам приведет mismatch MTU на api server и kubelet для on prem инфраструктуры? Пишите в комментариях ⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👍3
Всем тем, кто прохавал YAML с самого низа, посвящается.

Если вы имеете дело с k8s и считаете, что YAML — это простой язык, обязательно прочитайте легендарный «YAML document from hell», откроете для себя много нового.

Тем, кто уже читал — мое почтение🎩

Ещё парочка полезных советов:

🟣 YAMLLint — чтобы автоматизировать проверки и не наступать на грабли.

🟣 Kubernetes для разработчиков — чтобы научиться правильно разрабатывать приложение под k8s и запускать его в кластере. До 2 июня при покупке тарифа «видеокурс» — 6 встреч с обратной связью в подарок.

➡️ Подробности — на странице курса ⬅️
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓93
This media is not supported in your browser
VIEW IN TELEGRAM
Мы с котом ведем этот канал уже почти полгода 🔥

И пока Маркус преисполняется RHСP (ставьте 😻, если нужно больше постов с ним), я собрал для вас дайджест самых мясных материалов за всю историю моего присутствия здесь. Погнали!

➡️ Как работают requests/limits изнутри

➡️ Используем Sidecar Pattern во благо.
→ Часть 1

→ Часть 2

➡️ Что лежит в основе работы service mesh, и как нам в этом поможет Linux?

➡️ План онбординга в компанию
→ Часть 1
→ Часть 2
→ Часть 3

➡️ Типичные ошибки найма

➡️ Secret injection webhook

➡️ Как изучать новое с пользой и с доставкой прямо в ваш inbox?

➡️ CRI, CSI, CNI

➡️ Align expectations: почему это ключ к успеху почти в любой задаче

➡️ Собесы с алгоритмами — это лишь входной фильтр!
→ Часть 1
→ Часть 2

➡️ Роли в технических командах: запись прямого эфира
→ YouTube
→ VK Видео
→ Rutube
→ Дзен

➡️ API, за которые не стыдно

➡️ Ностальгии пост: с днем рождения, ETHERNET!

➡️ k8s и бородатая база: сеть и unix

В комментариях к этому посту можно свободно делиться своими мыслями о контенте, который я выкладываю, и писать пожелания для будущих публикаций ⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
239👍5🔥3
System design interview наоборот

Есть у меня очень большая задача in progress (параллельно с другими не менее важными тасками), срок выполнения которой непонятен ни одному участнику процесса.

Задача, прямо скажем, не для слабонервных, но она довольно важная с точки зрения повышения observability, reliability, maintainability и прочих ***bility. Десятки огромных сервисов, каждый из которых — отдельная вселенная со своими решениями.

Команд, которые владеют всеми этими сервисами, наберется 10+. Сервисов и того больше. Каждая команда знает про свой огород и иногда знает, какая картошка посажена у соседей 🥔

Как только data flow процессов в системе выходит за пределы их зоны ответственности, понимание общей картины сразу тускнеет. Это абсолютно нормальная ситуация в бигтехе. У всех и так навалом задач, и разбираться, что делают соседи, мало кто хочет. Кроме меня 😂

Задача простая, как скейлинг деплоймента: построить граф взаимодействий, архитектурную схему, чтобы хоть примерно понимать, что вообще происходит. System design interview наоборот. И не для гипотетической системы, а для вполне реальной, которую пилят не один год 10+ команд.

Зависимостей у каждого сервиса — вагон и маленькая тележка, асинхронных взаимодействий — и тут и там и еще сверху накинули. Трейсинг? Слышали о таком, но пока на уровне попыток внедрения.

Проблема в том, что даже когда появится этот трейсинг, он не спасет. Потому что большинство процессов живут своей жизнью, работают по много часов, и отследить полную цепочку — та еще задача. Нужно знать, где прокидывать трейсы, а в этом очень поможет развесистая архитектурная диаграмма.

Вот только ни один из этих сервисов я не писал 🤷‍♂️

Вся надежда на то, что расскажут команды, и на существующую документацию, которая устаревает через месяц после написания. Коммуникации — наше все. В основном асинхронные, но иногда приходится вытягивать людей в zoom, без этого не обойтись.

Зачем все это? Да чтобы видеть верхнеуровневую картину, как эти сервисы взаимодействуют. Чтобы, когда что-то начинает деградировать, мы не гадали на метриках, а какой data flow ломается. А их много. Очень много. Да и метрики не всегда показывают проблему. А если метрика ошибок в сервисе X выросла на 0.5%, как это скажется на сервисе Y, который напрямую с X не взаимодействует ни по API, ни асинхронно? И прочие подобные вопросы.

С диаграммой довольно легко приходить в команды и спрашивать, а где эта стрелочка в метриках, а покрыта ли она трейсингом (в будущем), а есть ли на нее SLO, а есть ли error budget, а есть ли run book, что делать, если эта стрелочка покажет SLO breach?

Короче, задача — как собеседование в Google, только ни я, ни интервьюер понятия не имеем, что вообще происходит.

Пожелайте мне удачи в этом непростом деле и поделитесь в комментариях, какие задачи вам предстоит затащить в ближайших спринтах — хочу знать, что не один страдаю 😅
🔥6👏4😁32
Все уже слышали про вайб-кодинг

А что насчет вайб infrastructure as code? Мой опыт пока такой: модель легко создаст несуществующие опции, но если понимать, что она сгенерировала чушь, это можно легко поправить.

Гораздо опаснее, когда моделям дают доступ к инфре. Удобно, когда можно текстом описать желаемое (scale my k8s cluster by 10%), но делать так все же не стоит.

➡️ Есть другие применения AI. Например, мне довелось попользоваться komodor, и, boy, was it beautiful. Отличный инструмент, когда нужно быстро собрать логи сервисов и получать summary, что там произошло и почему все сломалось.

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

А какой у вас опыт интеграции такого рода помощников в повседневную работу? Наиболее интересны self hosted решения, потому что слать ваши логи в chatgpt плохая идея)
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4🔥2
Помните большой пост про деньги, которые вы сливаете в облако?

В нем я разбирал типичные примеры, озаглавленные общей идеей «Играл с облаками и проиграл». Если пропустили или присоединились к каналу позже — ловите ссылку.

➡️ Классная новость для тех, кто хочет лучше разобраться в вопросе — Слёрм запускает серию бесплатных встреч, на которых будут разбирать решения в области FinOps:

🟠 неверное использование облачных ресурсов из-за непонимания их специфики;
🟠 избыточную надёжность (SRE);
🟠 оverengineering — избыточное усложнение инструментов, пайплайнов, процессов.

➡️ Первый вебинар «Облачные решения: как снизить затраты и повысить эффективность?» — уже на следующей неделе.

Программа вебинара:

➡️ Типичные ошибки при работе с облачными сервисами и их влияние на бизнес.
➡️ Настройка сетевых сервисов и контроль доступа.
➡️ Как неправильный выбор ресурсов может привести к сбоям.
➡️ Почему резервное копирование — обязательная часть стратегии.

Когда: 11 июня в 17:00 мск


Занять место на вебинаре — через бота.
Please open Telegram to view this post
VIEW IN TELEGRAM
2🤓1
Оптимизация запуска тяжелых образов для ML

Представьте простую задачу.

Есть k8s. Есть ML модели, где веса вшиты в образ приложения. Любая выкатка или переезд контейнера — боль и нагрузка на container registry, потому что не факт, что образ был закеширован на ноде.

Вы спросите, почему не держать веса в S3? Их оттуда при старте тоже придется скачивать, либо имплементировать способ кеширования на ноде. Тоже возможны разные решения, но пойдем более простым путем, где не нужно переписывать приложения, которые ожидают файлы весов в локальной файловой системе.

➡️ Как ускорить процесс запуска многогигабайтных образов?

Конечно, кеш!

Задействуем спящий DaemonSet. Идея простая.

🟠 Создаем DaemonSet с нужным/нужными образами (может быть много разных).
🟠 В качестве команды для этих контейнеров используем, например, sleep infinity.

В результате образы будут загружены в локальный кеш каждой ноды и будут доступны мгновенно.

При выкатке приложения:

1. Сначала катим DaemonSet
2. Ожидаем в пайплайне, пока все поды в DaemonSet поднимутся
3. Деплоим приложение

Пример решения, где вместо sleep используется pause container:

apiVersion: apps/v1
kind: DaemonSet
metadata:
name: prepuller
spec:
selector:
matchLabels:
name: prepuller
template:
metadata:
labels:
name: prepuller
spec:
initContainers:
- name: prepuller-1
image: nginx # Наш образ, что подтягиваем в кеш ноды
command: ["sh", "-c", "'true'"]

# - name: prepuller-2
# image: ...
# command: ["sh", "-c", "'true'"]

containers:
- name: pause
image: gcr.io/google_containers/pause:3.2
resources:
limits:
cpu: 1m
memory: 8Mi
requests:
cpu: 1m
memory: 8Mi


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

Существуют и другие подходы к кешированию, например, такой. Но внутри он все так же создает DaemonSet 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
🤓74
Привет! На связи Маркус 🐈

Столько разговоров про этот ваш кубернетес, как будто это что-то вкусное. Хочу разобраться, почему вы все с ним так носитесь, поэтому решил спросить:

➡️ Какой аспект Kubernetes (сети, хранилища, безопасность, RBAC, операторы и т.д.) вы считаете самым недооцененным, но критически важным для стабильной работы?

Поделитесь в комментариях ⬇️
Please open Telegram to view this post
VIEW IN TELEGRAM
71