Девопсолог | DevOps, GitOps и прочий Ops
272 subscribers
60 photos
5 videos
2 files
91 links
Пишу про docker, k8s, gitops и прочие инфраструктурные штуки

Чат канала: https://t.me/AppliedTryndology
Download Telegram
💙 Пых.конф’25 — главное PHP-событие года!

PHP сегодня в самом расцвете сил:

• 20 человек в ядре, финансируемых PHP Foundation.
• Релизы каждый год с десятками новых фичей.
• Async, типизация, атрибуты, выразительный синтаксис.
• Обслуживает миллиарды пользователей по всему миру.

Оставалась только одна проблема — русскоязычным инженерам не хватало пространства для обсуждения этим тем. Мы её решили.

Пых.конф — абсолютно новая конференция с актуальной программой, доступными билетами и насыщенным offstage-движем.

• Асинхронность и протоколы для неблокирующего I/O.
• RAG в PHP-бэкендах и круглый стол «Кодим с ИИ».
• Архитектурные каноны: DDD, модульность, идемпотентность.
• Производительность: от памяти и массивов до воркеров и CI.
• Yii3, Doctrine, Swoole, WordPress и Битрикс — экосистема во всей красе.
• Не только PHP: YDB, Postgres, Docker, OpenAPI.
• Fail-митап и Открытый микрофон для всех, кто захочет высказаться.
• Игры и конкурсы на стендах партнёров — компаний, преданных PHP.

Мы сдедали то, чего сами ждали много лет. Не хватает только тебя.

Забрать билет | Ничего не пропустить | Собрать свою программу
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥74💯2
Используем GitVersion для получения версии helm chart

В комментариях к посту про версию helm chart @ebugusey предложил считать версию из истории коммитов при публикации чарта. И посоветовал софт GitVersion

Это еще более правильный и простой способ определения версии и он не требует похода в API гитлаба

Нам понадобится скачать версию для linux x64 на машину с gitlab-runner (Или вы можете использовать docker образ), также будем использовать jq — для получения нужного нам значения из выхлопа GitVersion

Давайте вносить правки:

1. Говорим гитлаб раннеру при запуске джобы склонировать репозиторий со всей историей коммитов (Это может замедлить джобу на больших репозиториях при первом запуске)

2. Добавляем в корень репозитория конфиг для GitVersion. Взял его из примеров в документации

3. Получаем новую версию для упаковки чарта

Вот и все правки. Мы получили более стабильный вариант расчета версии, не требующий похода в API. Спасибо @ebugusey за совет
👍7🔥1
Обновление dev кластера k8s до актуальной версии

Вот наконец и дошли руки записать видео по обновлению dev кластера. На этом про кластер для разработки всё. Вскоре начнем собирать production ready инсталляцию

YouTube — https://www.youtube.com/watch?v=_C5DLcAtQMA
ВКВидео — https://vkvideo.ru/video-232188619_456239017
👍3🔥2
Пых.Конф всё ближе, свободного времени всё меньше, поэтому с постами пока затык

Раз так — буду шарить полезное от коллег. Сегодня нововведения и изменения в недавно вышедшем кубе 1.34 от компании Флант

Приятного чтения — https://habr.com/ru/companies/flant/articles/940394/
👍5
Forwarded from Cross Join - канал о разработке (Anton Okolelov)
Опасные места в YAML

YAML позиционируется как человекочитаемый формат данных, но при этом это склад подводных камней. Рассмотрим самые тупые особенности, которые могут привести к неожиданным ошибкам.

Шестидесятеричные числа

port_mapping:
- 22:22
- 80:80
- 443:443


Что вы ожидаете увидеть? Скорее всего, список строк для настройки портов. Но YAML 1.1 интерпретирует 22:22 как шестидесятеричное число и превращает его в 1342. В YAML 1.2 эту "фичу" убрали, но многие парсеры до сих пор используют старую версию.

Проблема Норвегии

countries:
- dk
- fi
- is
- no
- se


Код страны Норвегии no будет интерпретирован как булево значение false. То же самое произойдет с off, n, yes, on, y в различных вариантах написания. Классическая ловушка, получившая название "Norway Problem".

Случайные числа

versions:
- 9.5.25 # строка
- 9.6.24 # строка
- 10.23 # Число!
- 12.13 # Тоже число!


Строки без кавычек могут неожиданно стать числами. 10.23 превратится в float, а 9.5.25 останется строкой, потому что имеет "слишком много" точек.

Ключи не только строки

settings:
on: [push, deploy]
priority: high


Здесь on интерпретируется как булево true, поэтому ключом становится не строка "on", а логическое значение. В JSON это может превратиться в "True" или вызвать ошибку.

Теги и небезопасность

user_data: !python/object/apply:subprocess.check_output [['rm', '-rf', '/']]


Теги, говорят, иногда полезны, но при определенных условиях позволяют выполнять произвольный код при загрузке. Всегда используйте safe_load вместо load в Python и аналогичные безопасные методы в других языках.
👍7😁1👀1
Получил свой первый сертификат по кубу. Теперь я сертифицированный кубовод)
🔥14👍2
Привет!
Коллеги проводят исследование, чтобы понять, что реально происходит внутри ИТ-команд и какие закономерности можно в этом увидеть.

Уже нащупаны интересные корреляции:
– между скоростью пайплайнов и качеством code review,
– между алертингом и стабильностью релизов,
– между ролями в команде и удовлетворённостью релизным процессом.

Но нужно больше данных, чтобы отделить закономерности от шума.

Пройти анкету можно за 10 минут. Её же можно использовать как мини-чек-лист для самооценки зрелости инженерной культуры.

Принять участие: https://forms.gle/NszR7VDuXL9sBbVAA

P.S. Вчера прошел сам, довольно интересно будет посмотреть на результаты, коими обязательно поделюсь, после того как ребята завершат исследование

P.P.S. Довольно давно не выходило моих постов про инфру — подготовка идет полным ходом. Скоро возобновлю регулярные посты про кубер в проде
👍2🔥1
Media is too big
VIEW IN TELEGRAM
Создание production кластера kubernetes под управлением Talos Linux

Начинаем цикл видео про production ready k8s кластер

YouTube — https://youtu.be/_QwJRZa52QU
ВКВидео — https://vkvideo.ru/video-232188619_456239018
Ну и буду прикреплять к посту в Telegram

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

P.S. Забыл в видео удалить токен после flux bootstrap. Не забудьте это сделать!

Полезные ссылки и информация, которые вам потребуются при просмотре видео:

Proxmox terraform provider. Документация по добавлению пользователя для terraform

Репозиторий с конфигами для terraform

Установка talosctl

Установка kubectl

Установка helm

Установка flux

Talos Image Factory

Установка cilium в кластер talos

Flux Bootstrap Gitlab

Доклад про Talos от Дмитрия Рыбалки

Список разрешений для пользователя terraform:

SDN.Use, VM.Monitor, Datastore.AllocateSpace, VM.Clone, VM.Allocate, VM.Config.Options, VM.Config.Memory, VM.Config.HWType, VM.Config.CPU, VM.Config.Cloudinit, VM.Config.Disk, VM.PowerMgmt, Datastore.Audit, VM.Config.Network, VM.Config.CDROM, VM.Audit

.terraformrc:

provider_installation {
network_mirror {
url = "https://terraform-mirror.yandexcloud.net/"
include = ["registry.terraform.io/*/*"]
}
direct {
exclude = ["registry.terraform.io/*/*"]
}
}


Команда для flux bootstrap:

GITLAB_TOKEN=<токен> flux bootstrap gitlab \
--owner=<repo_group> \
--repository=<repo_name> \
--path=cluster \
--hostname=gitlab.example.com \
--components-extra='image-reflector-controller,image-automation-controller' \
--read-write-key \
--deploy-token-auth
👍5🔥52
Media is too big
VIEW IN TELEGRAM
Процесс обновления Talos Linux

YouTube — https://youtu.be/ikiPtVs78YI
ВКВидео — https://vkvideo.ru/video-232188619_456239020

Команды, которые вам потребуются:

Просмотр списка доступных нод — kubectl get nodes -o wide

Обновление Talos — talosctl -n <ip ноды> upgrade -i registry.example.com/talos:1.11.3

Talos Dashboard - talosctl -n <ip ноды> dashboard

Обновление image в конфигах Talos — sed -i "s|factory.talos.dev/metal-installer/6adc7e7fba27948460e2231e5272e88b85159da3f3db980551976bf9898ff64b:v1.11.2|registry.example.com/talos:1.11.3|" *.yaml

Поднятие локального docker registry — docker run -d -p 5000:5000 --restart always --name registry registry:3
👍5
А вот и результаты опроса подъехали!
А вот и аналитика по инженерной зрелости компаний(статья на хабре), в которой многие из вас участвовали.
Помните мы устраивали опрос?
Большое спасибо всем кто принял в нем участие.
Ответ каждого из вас сделал эту статью более глубокой и честной.

А вот вам выводы для затравки
1) Для роста нужно не геройство, а системность
2) мы релизим так же хреново как ведем документацию. (такая вот авторская интерпретация подтвержденная цифрами)

притяного чтения)

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

Я уже упоминал на канале такой продукт, как Cozystack. Давайте смотреть как же он устроен.

https://www.youtube.com/watch?v=fzA3WxoZFYg
👍2
Media is too big
VIEW IN TELEGRAM
Устанавливаем Flux через Flux

Сегодня будем переводить Flux под управление его же самого. Чтобы у нас был настоящий GitOps

YouTube — https://youtu.be/023CIvGaDTA
ВКВидео — https://vkvideo.ru/video-232188619_456239021
Текстовая версия — https://etherlord.org/posts/переводим-fluxcd-под-управление-fluxcd/

Коммит с изменениями в рамках этого поста — тык сюда.
👍3
С наступающим!

Пора подвести итоги года. Они на картинке :)

Всех с наступающими праздниками!

Декабрь был трудным, потому ничего не писал. Надеюсь после праздников возобновить регулярные посты и продолжить цикл по production ready k8s
👍64🎄1
Удаляем FluxCD манифесты, которые были созданы при первоначальном бутстрапе

В этом году было достаточно сложно раскачаться и войти в рабочий ритм. Но у меня получилось :)

Первый пост в этом году будет маленький, как дополнение к предыдущему.

После того как мы перевели Flux под управление самого себя — была забыта одна вещь. А именно — нам нужно удалить старые манифесты, которые записал Flux в репозиторий, когда делался первоначальный bootstrap. Они нам теперь не нужны.

Исправляемся — коммитим, пушим, убеждаемся, что все работает.

Путь миграции с flux bootstrap на flux operator описан в официальной документации flux operator. То, что мы сейчас делали описано в разделе Cleanup the repository

На след. неделе будем передавать Cilium под управление Flux
🔥5
Media is too big
VIEW IN TELEGRAM
Переводим Cilium под управление FluxCD

YouTube — https://youtu.be/pYZN_wMk5qk
ВКВидео — https://vkvideo.ru/video-232188619_456239022
Текстовая версия — https://etherlord.org/posts/переводим-cilium-под-управление-fluxcd/

Коммит с изменениями в рамках этого поста — тык

На следующей неделе поста не будет. В комментариях под прошлым постом мне предложили сделать AI продукт, который бы настраивал простые сервера. Мне кажется такой продукт не особо нужен, поэтому 22 февраля (воскресенье) в 18:00 Мск проведем стрим. Покажу как с помощью Claude Code можно настраивать сервер. Также покажу более правильный, на мой взгляд, подход, в котором мы, совместно с ИИ, напишем Ansible Playbook, который будет делать тоже самое, но при этом у нас останется артефакт в виде кода и его можно будет многократно применять для настройки однотипных серверов
🔥41
🌿 Про Tini и опцию --init в docker run

Валентин Удальцов на стриме «Scaffolder: создаём и обновляем репо за пару минут» упомянул утилиту Tini, через которую предлагается запускать команды внутри контейнера:

ENTRYPOINT ["tini", "--", "php", "/app/run.php"]


Tini запускается как главный процесс в контейнере и решает две задачи.

⭐️ Зомби-процессы

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

Не все программы умеют обрабатывать зомби-процессы. В обычной системе их «страхует» главный процесс (например, systemd), а в контейнере это может делать Tini.


⭐️ Обработка сигналов

Если процесс не установил обработчик для сигнала (речь про SIGTERM, SIGINT и т. д.), то выполняется действие по умолчанию.

Но это правило не действует для главного процесса. Tini корректно обрабатывает сигналы и пересылает их дочерним процессам.


Если с первой проблемой я не сталкивался, то вторая возникает с завидной периодичностью.

Например, запускаем внутри контейнера тесты и решаем их прервать, нажимаем Ctrl+C (вызывает отправку сигнала SIGINT, «прервать процесс») и… ничего не происходит 🤷‍♂️. Это как раз из-за того, что у основного процесса не задан обработчик.

Tini оказался настолько полезным инструментом, что на его основе сделали утилиту docker-init и добавили её в Docker, а у команды docker container run (она же docker run) появилась опция --init (документация), которая запускает docker-init как главный процесс. Для copmose-файлов также добавили опцию init (документация).

Сегодня вместо Tini удобнее использовать опцию --init, которую к тому же можно применить для любого docker-образа 🐬
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Стрим по AI Ops!
22 февраля в 18:00 Мск


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

Рассмотрим два подхода:

1. Даем ИИ полный доступ к серверу
2. Просим сгенерировать ansible playbook и сами его проверяем

Мы будем настраивать простой сервер с помощью Claude Code.
Это связка nginx + docker. Сделаем простой деплой с помощью Gitlab CI.

YouTube — https://www.youtube.com/watch?v=U9w0xsejL8Y
ВКВидео — https://vkvideo.ru/video-232188619_456239024

До встречи на стриме!
🔥71