Девопс в огне
104 subscribers
1.25K photos
12 videos
208 links
Download Telegram
VM

Сегодня столкнулся с кейсом: полетели настройки ссш ключей на виртуалке в яндексе.
Какое тут решение:
1. Делаем снимок диска нужно машины
2. Стопаем или удаляем машину
3. Конфигурим новую машину из снимка
4. Указыаем там нужный ключ и ip
5. Поднимаем машину

Все, после того как машина поднимется то там снова будут актуальные ключи, яндекс добавит их через cloud-init)
👍2
RELEASE

Как ускорить релизы фичей в прод.
Есть несколько базовых, именно технических, приемов которые могут сильно помочь:
1. Флоу разработки. Если фиче нужно пройти через несколько веток и стендов то это замедляет. Чем меньше промежутков от фича ветки до мастера тем лучше. (Смотрим на TBD)
2. Паралельность. Все мы запускаем проверки в пайплайнах, многие из них можно запускать паралельно а не последовательно.
3. Повторение. Если, допустим, юнит тесты прошли на тестовом стенде то после создания прод тега нет смысла запумкать их еще раз. (зависит от качества тестов)
4. Базовые сборки. Можно сразу собрать нужные образ и при релизах обновлять в них только артифакты.
5. Переиспользование. В идеале нам не нужно собирать прод сборку, можно просто сделать новый тег для препрод сборки.

По опыту, внедрение этих простых првил может ускорить выкатку фичей в разы)
👍1
TBD

Важно понимать один момент про транк.
Это методология разработки в контексте гита, которая описывает как мы должны сливать свои фичи в мастер. Но она не говорит о том что сразу после слива в мастер нам нужно релизится. В транке мы просто накапливаем изменения в мастере, а решение о релизе в прод принимается уже людьми)
То есть транк это больше CI процесс, а не CD.
👍1
PENTEST

Сейчас прохожу обучение по пентесту.
Это позволяет посмотреть на свою работу с другой стороны. То где могут быть ошибки в конфигурирование систем которые могут привести к эксплуатации.
Вот примеры:
- Использование простых паролей
- Одинаковые учетные данные в разных подсистемах
- Открытие лишних портов
- Разрешение входа по пароль по ссш
- Избыточные привелегии
- Сетевая связанность там где она не необходима

Это самые базовые вещи которые могут сильно облегчить проникновение. Дальше уже стоит думать про уязвимости в софте)
👍2
HEALTHCHECK

Каким в идеале должен быть хелсчек? Думаю из названия очевидно, он должен проверять состояние всей системы.
То есть не как обычно это делается - эндпоинт которые просто отвечает 200. Ведь состояние одного конкретного эндпоинта ничего не говорит нам о состоянии системы в целом.
Хелсчек должен проверять критичные для нас вещи. Как пример:
- Доступность бд
- Доступность критичных эндпоинтов
- Время ответа
И ответ должен быть бинарным, системы либо работает как нужно либо нет.
Ну и идеально было бы делать ответ на уровне http кода, а не в теле ответа. По необходимости в теле можно отдать детали)
👍2
CONF

Как может выглядить иденпотентное применение конфигурации. На примере nginx:
1. Пуш конфигурации в гит
2. Запуск джобы с ansible манифестом
3. Переписывание конф файла на серверах только при наличии диффа
4. После изменения конфигурации проводится тест самого nginx
5. Если конфигурация валидна то запускается reload
6. Если не валидна то откат до прошлой версии

Таким образом мы можем надежно заменить конфигурацию и делать это только там где есть необходимость)
👍1
SSDLC

Безопасная разработки становится трендом.
Как по мне, вся идея заключается не в конкретных инструментах а в подходе к разработке. Ведь если мы просто перед релизом прогоним код даже на самом лучшем сканере то врядли кто то сразу побежит фиксить уязвимости. С большой вероятностью эти узы просто уйдут в прод.
А вот просто учитывать безопасность на этапе аналитики даст нам куда больше профита.
Еще один важный фактор это шумность инструментов. Ведь никто не хочет разгребать сотни алертов которые по факту ни на что не влияют)
Ну и важный фактор удобства. Все мы ленивые, и если что бы поправить нужно сделать несколько лишних телодвежений то процесс будет страдать.
👍1
Заметка:
Разделять сервисы по пользакам в БД может помочь с дебагом, когда нужно найти сервис который ее кладет.
PRE COMMIT

Технология которая позваляет делать флоу перед попаданием кода в репозиторий.
Как пример, на локальной машине разработчика мы можем вызывать:
- Тесты
- Линтеры
- Сканирование на безу и сикреты
Это позволяет нам не допускать в репозторий код с явными проблемами.
Проблема в том что нельзя напрямую заставить всех разработчиков использовать его, максимум кастомить CI/CD джобы которые по косвеным признакам определит запуск. Но по большей части инструмент нужен самим разработчикам, что бы сделать проверку на дурака)
👍1
INTERVIEW

В последнее время начал проводить много собеседований.
Как я сейчас это делаю:
- Спрашиваю основные технологии которые используются сейчас
- Опыт переключения между технологиями
- Не пытаюсь вытянуть сложные термины, важнее понимание как это работает
- Больший упор на опыт, особенно в релизных процессах
- Спрашиваю точечные вопросы, которые могут появится только с опытом работы
- Безопасность. Сейчас актуален appsec, безопасную инфру и так все уже умеют

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

Как подбирать стек для проекта, в контексте инфры и DevOps практик:
1. Задачи. Определить что мы хотим от инструмента, какие задачи он должен закрывать?
2. Перспектива. Планируется ли в будущем какие то задачи которые не сможет закрыть конкретный инструмент?
3. Популярность. Есть ли на проекте или на рынке люди которые смогут работать с ним?
4. Надежность. Хватит ли нам той надежности которую предоставляет данный инсрумент?
5. Безопасность. Тут не надо пояснять)

Вот к примеру:
Gitlab CI/CD по всем пунктам плюс минус такой же как CircleCi, по сути делает тоже самое. Но в реалиях рынка РФ gitlab сильно популярнее и бОльшее количество людей умеют с ним работать, для меня выбор очевиден)
👍1
ERLANG

Иногда читаю про язык erlang и его виртуальную машину. И каждый раз нравится все больше.
Основная идея состоит в надежных распределенных вычислениях. Как это добивается:
1. Виртуальная машина предоставляет простой способ поднять кластер на разных нодах
2. Она сама распределяет нагруку и создает процессы на нодах
3. Есть специальный фреймворк для вычислений на кластере
4. Hot reload, можно без поростоя обновить код
5. Миграции, позволяет настраивать переход состояния процессов при hot reload
6. Автоматический перенос процессов между нодами

Все это позволяет делать высоко доступные производительные решения. Чаще всго применяется в телекоме, где необходимо давай высокий uptime без простоя)
11
MONO

Один из вариантов ведения разработки это монорепы.
Как пример - в репе несколько модулей одного проекта, плюс общие компоненты. Чаще всего все эти модули собираются в отдельные микросервисы, и при сборке сразу из репы тащаться общие компоненты.
Зачем так делать? Для кого то это проще. Если все модули имеют сильную связанность то куда легче вести все это вместе. Плюс, в какой то мере, это проще поддерживать и выкатывать.
Какой обычно флоу для CI/CD:
- При изменения файлов кокнретного модуля тригер на сборку этого модуля
- Тригер сборки модуля тригерит его деплой
- При изменения файлов общих компонентов пересобираются и деплоятся все компоненты
👍2
TOOLS

Про зоопарк инструментов.
Периодически втречаю проекты где есть какое то количество инструментов которые делают одно и тоже, но их схлопывают.
Например репозиторий в гитлабе, а пайпланы запускаются в jenkins. Казалось бы, почему не сделать сразу все в гитлабе? Ну или не переделать сейчас.
Чаще это бывает легаси которое сложно выпилить. Например когда то дженкинс закрывал что то чего нет в гитлабе. Но со временем база пайлпайнов сильно разрастается, и уже сложно просто взять и переписать все на гитлаб. Так и продолжается, все новые пайпланы по привычке заводятся на jenkins.
Что тут можно сделать? Ну если команду все устраивает то ничего делать не нужно.
А так, изначально не стоит заводить зоопарк инструментов, это сильно увеличивает сложность поддержки и необходимую экспертизу.
Если же это уже случилось то можно просто остановится и оставить этот кусок как легаси, все новое уже заводить как нужно. А легаси можно уже потихоньку разгребать)
👍1
TRIVY

Как сделать сканирование образов без доступа в интернет? Это важно в закрытых контурах.
Проблема в том что нам нужна база данных известных CVE, и в любом случае придется выкачивать их из интернета.
Но это можно сделать на этапе сборки самого трайви, а не при сканировании. Это даст нам гарантию что мы просканирую наши образы только у себя и это никуда не сольется.
Делается это так:
При сборке образа с трайвии делаем:
RUN trivy image --download-db-only
При сканировании добавляем два параметра:
--skip-db-update --offline-scan

Все. Мы сможем сканить оффлайн)
Главное это периодически пересобирать образ, что бы держать базу CVE актуальной.
👍1
CACHE

Как работает докер кеш на уровне регистри.
Наш образ состоит из слоев, которые определяются докерфайлом. Имя каждого слоя по сути хеш того что было исполненно в кокретном шаге сборки и состояния файловой системы.
И вот мы можем пушить каждый этот слой в отдельную blob регистри, и именовать их как раз хешем. Таким образом при следующей сборке считать хеш и тянуть нужный слой из регистри.
Это может сильно ускорить например на шагах сборки зависимостей, или там где есть долгая компиляция чего то.
Но важно ставить ретеншен на этот blob, что бы не возникало случаев когда мы внесли изменение которое не попало в хеш слоя и мы получили старую его версию.
👍1
В офис красоту подвезли)
😍1
HARDWARE

Про тяжелые вычисления.
Например обучение AI моделей требует обработки большого количества данных. Основной батлнек - пропускная способность памяти. Даже если у нас стоит очень мощный чип, но мы не можем обеспечить его данными то он будет простаивать в IO большую часть времени.
Тут влияет даже проектирование платформы данных и обучение, что бы нужные для обучения данные были на тех нодах где будет происходить.
Плюс скорость самой памяти, тут очен зависит скорость RAM и большой обьем кешей чипа. Ну и скорость диска, конечно же.
Поэтому сейчас очень важно смотреть на подсистему памяти, а не только на мозность чипа, иначе дорогой чип ничем не будет выигрывать более дешевому)
👍1
CI/CD

Про разные CI/CD системы.
По своей логике они все одинаковые, просто предоставляют разные фичи.
Например сейчас смотрю один проект который работает на bitbucket. Я ни разу с ним не работал, но с опытом гитлаба тут все понятно, просто чуть другой синтаксис.
Тут, как по мне, нужно понимать логику и основные примитивы CI/CD процесса, а с синтаксисом могут помочь нейросети.
Из различий. По тому что я вижу в битбакете любят использовать шаблонные пайплайны которые предоставляет сам битбакет. Как я понял разные вендоры инфры типа aws и яндекс клауда могут предоставлять свои публичные пайплайны под их инфру. В гитлабе такого особо не встречал, все пишут шаблоны сами.
Ну и по ощущениям гитлаб куда более гибкий.
👍1