Последние посты

DevOps для ДевоПсов
22 сент., 13:22
Как безопасно открыть командам метрики GPU в KubernetesAPI центрального Prometheus не ограничивает запрос одним пространством имён. Прямой доступ раскрывает чужие данные, а тяжёлый запрос замедляет хранилище. Один GPU простаивал с загрузкой 0% одиннадцать дней.Решением стал прокси: kube-rbac-proxy проверяет права, prom-label-proxy добавляет фильтр пространства имён, а MetricAccess задаёт доступные метрики. Выбранные ряды уходят в Prometheus команды через remote-write.С metricIsolation типичная команда хранит около 300 рядов вместо более 10 000, примерно на 97% меньше. Включите приём remote-write, выдайте прокси минимальные права и проверьте изоляцию соседних пространств. Схема и PromQL-запросы есть в статье Cloud Native Computing Foundation.


DevOps для ДевоПсов
22 сент., 05:00
Как отлаживать distroless-контейнеры через kubectl debugВ distroless-образе может не быть bash, ls или даже оболочки. kubectl exec тогда не даёт нужных утилит, kubectl cp требует tar внутри контейнера, а при циклическом падении exec тоже мало помогает.Запустите kubectl debug с образом BusyBox: команда добавит к созданному Pod временный контейнер без перезапуска Pod. К нему можно подключиться через kubectl attach -it и получить диагностические утилиты.У временного контейнера нет перезапуска, портов и проверок готовности или работоспособности. Он расходует только уже выделенные Pod ресурсы; его спецификацию нельзя изменить, а запись останется после завершения. В разборе показаны устройство ephemeral containers и сценарии kubectl debug.


DevOps для ДевоПсов
21 сент., 15:01
Как быстро масштабировать инфраструктуру без покупки и настройки собственного железаЗнакомая ситуация: публичное облако закрывает большинство задач, но часть нагрузок — платёжные системы, хранение персональных данных, требования регуляторов — нужно физически изолировать. Своё железо эту задачу решает. А дальше — закупка серверов, настройка гипервизора, бутстрап Kubernetes-кластера и всё, что после: патчи, мониторинг, дежурства, ручной провижининг.Yandex Cloud анонсировала BareMetal Extend — изолированные физические серверы с уже развёрнутой инфраструктурой под конкретные задачи: — Extend: Virtualization — виртуальные машины и распределённое хранилище под backend и базы данных; — Extend: Stackland — деплой и управление веб-приложениями и сервисами; — Extend: Managed Service for Kubernetes® — кластер под контейнеризованные сервисы и микросервисную архитектуру.Подходит, например,


DevOps для ДевоПсов
21 сент., 09:11
Как искать узкие места сервера методом USEМетод USE предлагает начинать диагностику со списка ресурсов: CPU, памяти, сети, накопителей, контроллеров и шин. Для каждого проверьте три сигнала: долю времени за работой, очередь задач, которые ресурс не успевает обслужить, и ошибки.Составьте чеклист с конкретной командой или метрикой напротив каждого пункта. Начните с CPU, свободной памяти, дискового ввода-вывода и сети. Если узкое место не найдено, переходите к контроллерам и шинам между CPU, памятью и устройствами.Не доверяйте длинным средним: в примере автора пятиминутное окно скрывало скачки загрузки CPU до 100%, хотя мониторинг не показывал больше 80%. Проверяйте и ошибки с успешными повторами: они могут снижать производительность незаметно. Определения метрик и чеклисты для разных ОС собраны на сайте Брендана Грегга.BrendangreggThe USE Method
DevOps для ДевоПсов
21 сент., 05:00
Как ускорить сборки Docker за счёт кэшаDocker повторно использует слой, если инструкция и зависящие от неё файлы не изменились. Сначала копируйте package.json и yarn.lock, устанавливайте зависимости, а исходники добавляйте после: правка кода не запустит установку заново.Сократите контекст сборки через .dockerignore. Исходники, нужные лишь для создания артефакта, подключайте к RUN через bind mount: результат останется, а смонтированные файлы не попадут в слой. Кэш пакетного менеджера вынесите в cache mount, чтобы при пересборке загружались только новые или изменённые пакеты.Документация Docker также разбирает внешний кэш для разных сборок и сред. Проверьте Dockerfile: дорогие и редко меняющиеся шаги стоят выше, частые изменения ниже, лишние файлы исключены, кэш пакетов сохраняется между сборками.


DevOps для ДевоПсов
20 сент., 13:29
ACME отработал с кодом 0, а пользователи всё ещё получают старый сертификатCron обновил сертификат, джоба зелёная, а nginx, HAProxy или IIS держат в памяти прежний: файлы на диске новые, но процесс перечитывает их только после reload. Второй случай: скрипт кладёт файл в один каталог, а конфиг после давней миграции читает из другого. Скрипт выйдет с нулём, ничего не изменив.Поэтому пайплайн заканчивается не успешной командой, а проверкой живого эндпоинта после reload: • снять сертификат с боевого адреса: echo | openssl s_client -connect example.com:443 -servername example.com | openssl x509 -noout -serial -enddate; • сравнить serial и notAfter с тем, что только что задеплоили; • расходятся: сделать reload и проверить, из какого пути читает сервис.Пока этого шага нет, об истёкшем сертификате вы узнаёте от пользователей. Разбор цепочки от renew до recover — в статье на DevOps.com.


DevOps для ДевоПсов
20 сент., 09:17
Зелёный CI не ловит деградацию под трафиком, зато её ловит канарейка с автооткатомФункциональные тесты проходят, а после выката растёт задержка: холодный старт функций, исчерпанный пул соединений к базе, упёршийся в потолок автоскейлинг. Этой нагрузки в пайплайне нет, регрессия вылезает уже на проде.DevOps.com предлагает перестать считать тесты воротами «прошло/упало» и перенести проверку в выкат: Argo CD раскатывает манифесты, Flagger подаёт на новую версию 10% трафика, потом 30%, потом 100%. На каждом шаге он сверяет RED-метрики канарейки (запросы, ошибки, длительность) со старой версией и при скачке задержки по 95-му перцентилю сам откатывается.Что делать: включить в тестах и сервисах трейсы OpenTelemetry, иначе сравнивать нечего; задать Flagger пороги по ошибкам и p95, разрешить автооткат; синтетику по ключевым сценариям гонять раз в минуту из регионов, где ваши пользователи.


DevOps для ДевоПсов
20 сент., 05:06
Что проверить перед запуском приложения в KubernetesPod может запуститься, а обновление или масштабирование всё равно окажется хрупким. До релиза проверьте приложение: структурированные логи идут в stdout и stderr, настройки отделены от образа, несекретные лежат в ConfigMap, чувствительные в Secret.При завершении процесс должен обработать SIGTERM: перестать принимать новые запросы, закончить текущие, закрыть соединения и выйти до terminationGracePeriodSeconds. Иначе Kubernetes остановит его принудительно, хотя трафик ещё может попадать в Pod.Чек-лист LearnKube охватывает пять этапов: приложение, манифесты Kubernetes, безопасность, масштабирование и выход в продакшен. Пройдите его перед запуском, миграцией или внутренним ревью платформы и исправьте проваленные пункты до релиза.


DevOps для ДевоПсов
19 сент., 16:51
Как выбрать инструменты для анализа производительности LinuxПри инциденте на Linux-хосте легко сразу уйти в глубокую трассировку. На странице Linux Performance собраны карты инструментов наблюдаемости, статического анализа, тестирования производительности и настройки системы, а также материалы по sar.Для первого прохода возьмите Linux Performance Analysis in 60,000 Milliseconds: там перечислены первые десять команд для расследования. Затем выбирайте нужную глубину: perf для профилирования, eBPF и ftrace для трассировки, Flame Graphs для визуализации результатов. Есть и доклады по контейнерам, настройке EC2 и чеклистам SRE.Добавьте страницу в аварийный регламент как индекс. Перед использованием схем сверяйте год в правом нижнем углу: автор предупреждает, что объединённая диаграмма менее полна, чем отдельные.BrendangreggLinux PerformanceA collection of documents, slides, and videos about Linux performance, mostly created by Brendan Gregg, and with a focus on performance analysis.
DevOps для ДевоПсов
19 сент., 12:40
OpenTelemetry бесплатен ровно до дня, когда вы начали его эксплуатироватьСтандарт снял привязку к вендорскому агенту: инструментируете один раз, шлёте куда хотите. Что начинается дальше, перечисляет спонсорский разбор на DevOps.com.Коллекторов становится по одному на кластер или регион, у каждого свои batch и memory_limiter, и под нагрузкой узким местом оказывается сам коллектор. Хранение OTel не закрывает: трейс-стор, TSDB под метрики и индекс логов вы выбираете и обновляете согласованно. Переход от медленного спана к нужной строке лога тоже не появляется сам: слой корреляции пишете вы и правите при каждом изменении схемы. И пейджер при отвале ingestion звонит вашим инженерам, а не SRE вендора.Что делать до миграции: заложить в план человека на пайплайн и посчитать квартальные часы на апгрейды SDK и семантических конвенций по всем сервисам. Не сходится — считать ценник managed.


DevOps для ДевоПсов
19 сент., 08:29
Как измерить и сократить toil в эксплуатацииGoogle SRE определяет toil как поток повторяющихся и предсказуемых задач поддержки: перезапусков, обновлений и разбора алертов. Такая работа может расти вместе с инфраструктурой, а закрытый тикет не предотвращает повтор проблемы.Сначала учитывайте минуты и часы по каждой категории, включая переключение контекста. Собирайте данные до, во время и после улучшений. Затем сопоставьте сэкономленное время с затратами на разработку и поддержку автоматизации.Если инструкция сводится к входу на сервер, команде, проверке вывода и перезапуску сервиса, она уже похожа на псевдокод. Автоматизируйте выполнение без участия человека, а когда возможно, исправляйте первопричину. Критерии и примеры есть в главе «Eliminating Toil» из The Site Reliability Workbook.sre.googleGoogle SRE - Operational Efficiency: Eliminating ToilSREs optimize their time by eliminating toil, the repetitive, predictable tasks related. The characteristics of toil and operational efficiency.
DevOps для ДевоПсов
18 сент., 18:34
Как изучить контейнеры от runc до KubernetesКонтейнер полезно рассматривать как изолированную и ограниченную среду для процессов. В Linux пространства имён дают изоляцию, cgroups ограничивают ресурсы, а механизмы прав и фильтрации системных вызовов сужают доступ процесса. Программа runc подготавливает такую среду и запускает в ней процесс.Затем стоит разобрать образы, containerd, Docker и оркестраторы. Для запуска runc достаточно каталога с config.json, исполняемым файлом и зависимостями. Образы нужны, чтобы экономить место и распространять файловые системы.Практический порядок: запустить контейнер через runc, разобрать образ и containerd, затем связать эти слои с Docker и Kubernetes. Статья Learning Containers From The Bottom Up собирает маршрут и ссылки на углублённые разборы.


DevOps для ДевоПсов
18 сент., 11:52
Как собирать компактные Docker-образы через multi-stage buildВ одном Dockerfile можно отделить сборку от запуска: каждый FROM начинает новый этап, а COPY --from=build переносит в финальный образ только артефакт. В примере Docker Go SDK и промежуточные файлы остаются на этапе сборки, а образ на базе scratch содержит только бинарник.Именуйте этапы через AS build: тогда COPY не сломается после перестановки инструкций. Для отладки собирайте этап командой docker build --target build . BuildKit обработает лишь этапы, от которых зависит выбранная цель.В руководстве Docker есть варианты с внешним образом и наследованием этапов. Начните с этапов сборки и запуска, затем убедитесь, что финальный образ стартует без SDK и промежуточных файлов.


DevOps для ДевоПсов
17 сент., 18:27
Как проследить путь сетевого пакета в KubernetesВ одном pod контейнеры делят сетевое пространство имён, IP-адрес и порты, поэтому видят друг друга через localhost. Пространство создаёт среда выполнения контейнеров, pause удерживает его, а CNI назначает IP и подключает pod к сети кластера.В разборе пути пакета показаны маршруты к pod на том же и другом узле, а также к Service через Netfilter и iptables, которые перехватывают и переписывают трафик. Путь прослеживается от исходного запроса до контейнера приложения.При сетевом инциденте начните с узла: lsns -t net покажет сетевые пространства, а sudo lsns -p <PID> свяжет их с процессом контейнера. Затем проверяйте границы по порядку: пространство pod, подключение CNI, связь между узлами и правила Service.


DevOps для ДевоПсов
16 сент., 20:34
Как requests и limits управляют подом KubernetesВ манифесте четыре значения стоят рядом, но работают на разных этапах. Планировщик сравнивает requests с allocatable узла. После запуска kubelet и среда контейнеров переводят настройки в cgroups, где Linux распределяет CPU и ограничивает память.Низкий requests.cpu уменьшает долю CPU при конкуренции. Достижение limits.cpu включает троттлинг: растёт задержка, падает пропускная способность. Заниженный requests.memory ужесточает вытеснение и OOM, а превышение limits.memory приводит к OOM kill. HPA считает загрузку относительно request.Сопоставьте requests с kubectl top и allocatable узла: текущее потребление может быть ниже, но планировщик всё равно учитывает весь request. В руководстве Learnkube есть разбор от YAML до механизмов Linux.


DevOps для ДевоПсов
16 сент., 16:20
Модемный скрип перед соединением — если он сразу всплыл в голове, то тебе как раз в анкету от SpaceWeb и Типичного программиста! Она напомнит времена ЖЖ, гостевых книг, первых твитов и других интернет-икон того времени. Заодно расскажем, как менялись веб и SpaceWeb за 25 лет, немного заглянем в будущее, а в конце — промокод и результат, который может удивить.


DevOps для ДевоПсов
16 сент., 12:25изменён
В Суздаль за DevOpsНедавно мы съездили на «Без предела: Исходный код ритейла» от MAGNIT TECH в Суздаль. Разговор о технологиях начинался с купеческих рядов, продолжился на Demo Day на ГЭС на Нерли, а затем перешёл к самовару. Мы кайфанули от формата.У Владимира Дроздецкого, например, зацепил заход через первый рабочий день инженера. По мере знакомства с инфраструктурой за привычными сборками и выкладками обнаруживается хозяйство на тысячи ядер. Через такую историю масштаб ощущается лучше, чем через цифры сами по себе: можно примерить на себя работу человека, которому всё это поддерживать. Ради этого взгляда изнутри советуем открыть презентацию. И наставление от Владимира не забудьте:Не важно, сколько раз ты упал – важно, сколько раз ты поднялся. Главное — поднимайся с правильным IP-адресом


DevOps для ДевоПсов
16 сент., 09:31
Как удержать кардинальность метрик Prometheus под контролемКардинальность метки: число её уникальных значений. Число рядов равно произведению количеств значений меток. В примере два HTTP-метода, семь путей, пять машин и 12 рядов, создаваемых гистограммой, дают 840 временных рядов. Добавление одного значения к первым трём меткам увеличивает результат до 1728.Проверьте /metrics: найдите метки, число значений которых может превысить 10 по мере роста сервиса. Особенно следите за идентификаторами клиентов и числом корзин гистограмм. Не переносите значения в имя метрики: количество рядов от этого не уменьшится.Детализацию по отдельным запросам оставьте журналам событий, а метрики используйте для общей картины и оповещений. Механика роста и ориентиры по пределам разобраны в статье Robust Perception.
DevOps для ДевоПсов
16 сент., 05:10
Как выбрать distroless-образ для статического и динамического бинарникаFROM scratch даёт пустую файловую систему. Каталоги, CA-сертификаты, данные пользователей, часовые пояса и общие библиотеки приходится добавлять вручную. Distroless уже содержит необходимый системный минимум.Для статически собранного приложения подходит gcr.io/distroless/static: около 2 МБ, без libc и менеджера пакетов. Бинарнику с зависимостью от glibc нужен base-nossl размером около 15 МБ, а при зависимости от libssl — base размером 20,7 МБ. В замере статьи Trivy нашёл в static 0 уязвимостей, а в base восемь: семь низкой и одну средней опасности.Перед сменой образа проверьте зависимости бинарника через ldd и выберите минимальный вариант с нужными библиотеками. Иерархию образов и Dockerfile для Go с CGO автор показывает в разборе iximiuz Labs.


DevOps для ДевоПсов
15 сент., 18:18
Как завершать Pod в Kubernetes без оборванных запросовПри rolling update, масштабировании или вытеснении Pod могут удалить, пока он отвечает на запрос. Для Service маршрут до экземпляра задаёт endpoint: IP-адрес Pod вместе с targetPort. В список попадают Pod, прошедшие readiness probe; при создании и удалении Pod список обновляется.Перед изменением Deployment проверьте путь остановки: 1. новый Pod принимает трафик только после readiness probe;2. для завершаемого Pod настроен preStop;3. у долгих задач и постоянных соединений есть отдельный сценарий завершения;4. длительность остановки согласована с масштабированием кластера.В разборе Learnk8s показан путь Pod через kubelet, Service и endpoints, затем сценарии корректного завершения. Используйте его как чеклист для теста rolling update без оборванных соединений.

