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

Чат канала: https://t.me/AppliedTryndology
Download Telegram
Вот и прошла PHP Russia 2024! Это было очень круто! Надеюсь в следующем году тоже будет о чем рассказать.

В воскресенье 15 декабря в 18:00 Мск планирую провести стрим по развертыванию куба и накатыванию всех тех штук, что мы уже успели обсудить на канале.
🔥12👍3🎉2
Выбираю платформу(мы) для стрима. Вы можете повлиять на выбор :)
Anonymous Poll
28%
ВК
33%
Telegram
22%
Twitch
44%
Youtube (Скорее всего только для записи)
Завтра стрим!

Как и договаривались - завтра будем проводить стрим. В 18 Мск.
Покажу на практике развертывание dev кластера k8s, покажу все то, что было уже описано в постах здесь, на канале.
В опросе победили две площадки - youtube и telegram. Поэтому будем стримить на них.
Сегодня будет несколько тестовых трансляций, заходить на них не нужно, это просто мои тесты.

Держите ссылочку на ютуб:
https://www.youtube.com/watch?v=dDfWQp3JRqg
🔥9👍4🎉2
2024-12-15 18-57-49.mkv
471.3 MB
Запись стрима

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

Тем не менее - вот вам запись. Также запись доступна на ютубе по ссылке постом выше.

Подняли и настроили кластер по мотивам прошедших постов в телеге.

Всем спасибо, кто пришел. И отдельное для тех, кто досмотрел до конца :)

Stay tuned!
👍13🎉31
Forwarded from IT STAND
Live: Kubernetes 1.32
Эпичные изменения


В уходящий год дракона взлетел релиз K8S Пенелопа, и Кхал Алексей Мамоа самоотверженно защищает ее безопасность перед лицом, столь же выдающимся, Георгом Гаалом.
О судьбе Пенелопы узнаете от венгерского рыцаря Георга и цифрового кочевника Алексея уже в эту пятницу в 20:00

- с Georg Gaal @gecube
- и Aleksey Fedulaev @int0x80h

Прямая трансляция: https://www.youtube.com/watch?v=PzDrJHZTTMY
с ответами на вопросы из чата YouTube

При поддержке:
@ever_secure

🔥IT STAND | FIDELINA.RU | Бот
👍2
Монтирование секретов при docker build

Сегодня занимался докеризацией одного проекта, где есть composer зависимости в приватном репозитории.
Я попробовал подсунуть переменную COMPOSER_AUTH через ARG в докерфайле, на что докер мне заявил:
 1 warning found (use docker --debug to expand):
- SecretsUsedInArgOrEnv: Do not use ARG or ENV instructions for sensitive data (ARG "COMPOSER_AUTH") (line 8)

Я загуглил этот варнинг и обнаружил, что в докере есть более крутой способ монтировать секреты для сборки образа.
Если бы я сделал как хотел, то секрет навсегда остался бы в докер образе после сборки. Умный докер подсказал, что я не прав.

И так, исправляемся, в докерфайле пишем:
RUN \
--mount=type=secret,id=composer-auth,env=COMPOSER_AUTH \
composer install --no-dev --no-scripts --no-autoloader --prefer-dist --no-progress --no-interaction


А при сборке делаем вот так:

COMPOSER_AUTH='{"github-oauth": {"github.com": "очень-секретный-секрет"}}' docker build -f ./docker/php/Dockerfile --secret id=composer-auth,env=COMPOSER_AUTH -t my-awesome-project .


Вуаля, в нашем образе не осталось секретных данных, при этом мы получили нашу зависимость из приватной репы!
👍12🔥9
Запись доклада с PHP Russia!

Хотел написать еще один пост о том, что обсуждали на стриме, но не успеваю до конца года уже.
Зато вот вам новогодний подарок - запись моего выступления на PHP Russia :)
Это последний технический пост в уходящем году, до встречи в 2025!

https://www.youtube.com/watch?v=puaANhjIs7M
🔥20
С Новым Годом!

С Новым Годом, дорогие подписчики!

Стабильно работающего и красивого кода, меньше овертаймов на работе и неуемного интереса к изучению нового! Ура 🎄🎄🎄
🔥10🎄54👍1🍾1
FluxCD. Правильный порядок применения манифестов в кластере

На стриме рассказывал как обеспечить правильный порядок применения манифестов в кластере. Пришло время написать об этом пост.

В каталоге cluster у нас есть файлы, пронумерованные в том порядке, в котором мы хотим применять их в кластере. Но на деле сейчас ничего не применяется по порядку, все применяется одновременно. Чтобы обеспечить нужный нам порядок, в сущности Kustomization мы можем указать директиву dependsOn. Давайте реализуем это в нашем dev кластере:

1. Разделим установку и конфигурацию metallb на два этапа - metallb-install и metallb-config, при этом укажем, что config должен выполняться после install:
  dependsOn:
- name: metallb-install

2. Укажем, что ingress-nginx должен выполняться после того, как будет выполнен metallb-config
3. Укажем, что app должен выполняться после того, как будет установлен ingress-nginx

Готово! Пушим в репозиторий, проверяем статус с помощью flux get all -A. Убеждаемся, что все применяется в нужном порядке
👍6
Приходите на пыхап! Я там тоже буду
Forwarded from Пых (Валентин Удальцов)
Пыхап 8 февраля!

Друзья, через 2.5 недели пройдёт второй Пыхап! В программе у нас 3 доклада и новая секция:

🤔 Шардирование в RabbitMQ
Антон Растрыгин расскажет, как разбирать очередь параллельно, но последовательно.

🤝 Гибкий проект с фича-флагами Unleash
Рустэм Ахметзянов объяснит, почему «друзья не позволяют друзьям делать самописную систему фича-флагов».

🤹 Реализация нейронной сети на PHP
Алексей Нечаев покажет, как создать нейронку, не написав ни строчки кода на Python!

🎤 Открытый микрофон (только офлайн)
В конце митапа любой участник сможет на 5-10 минут завладеть флипчартом и поделиться насущной проблемой, элегантным решением или историей про то, как уронил прод накануне в пятницу.

Пыхап пройдёт там же — в уютном лофте «Событие» на Таганке. В этот раз решили попробовать субботу, поэтому собираемся пораньше, в 16:30. Регистрация откроется на канале Пых в следующий понедельник в 15:00, не пропустите. Входной билет — 500₽. Ну и конечно же митап будет транслироваться на YouTube и VK Видео с записью.

Спонсор второго Пыхапа — PremiumBonus. PremiumBonus — эволюция управления клиентским опытом. Весь спектр цифровых маркетинговых инструментов для выстраивания эффективной коммуникации с клиентами. Уникальные продукты на основе самых актуальных современных трендов, таких как предиктивная аналитика и автоматизация маркетинговых акций с помощью ИИ.
Please open Telegram to view this post
VIEW IN TELEGRAM
7👍4🔥2
Работа с docker на удаленной машине через ssh

Пост про cert-manager в кубе немного застрял, поэтому сегодня будет пост про докер :)
Возможно не все знают, но можно управлять удаленным docker демоном через ssh. На днях попробовал этот способ. Это удобно во всяких CI системах для деплоя на сервер.

Как сделать:

1. Добавляем контекст remote

docker context create remote --docker host=ssh://${SSH_USER}@${SSH_HOST}:${SSH_PORT}

2. Запускаем docker compose up на удаленной машине, находясь при этом у себя в локальном окружении билда в CI

docker --context remote compose -f docker-compose.prod.yaml up -d

При этом compose файлик хранится у вас на gitlab-runner локально, его не нужно никуда копировать
Также вы можете передать нужные ENVы и все прекрасно сработает. Мне кажется это очень удобно

Enjoy!
👍9🔥2
Получение SSL сертификата для нашего приложения в k8s с помощью cert-manager

И так. У нас есть задеплоенное в dev кластер куба приложение. Мы хотим его вывесить наружу и получить для него SSL сертификат.

Давайте приступим:

1. Устанавливаем в кластер компонент cert-manager:

В инфраструктурном репозитории, в каталоге cluster, переименовываем 04-app.yaml в 06-app.yaml
Добавляем в этот же каталог kustomization для cert-manager, он будет устанавливаться после ingress-nginx
В components создаем каталог cert-manager и добавляем туда namespace.yaml и hr-cert-manager.yaml

2. Теперь нам нужно создать такую сущность как ClusterIssuer, чтобы выпускать сертификаты с помощью Lets Encrypt

Добавим в каталог cluster kustomization
В components создадим каталог letsencrypt и добавим туда issuer.yaml
ВАЖНО! Для тестов и во избежание временной блокировки со стороны lets encrypt в параметре server: сначала лучше указать https://acme-staging-v02.api.letsencrypt.org/directory
Когда сертификат будет успешно получен - можно заменить обратно на значение, которое приведено в issuer.yaml

3. В файле 06-app.yaml меняем зависимость c ingress-nginx на letsencrypt

4. Создаем файл cert.yaml в components/app-example. Это наш сертификат, который будет получен от Lets Encrypt. Он будет сохранен в k8s secret под названием app-example-tls

5. Пушим всё в репозиторий, отслеживаем статус через flux get all -A. Когда все пройдет успешно - проверим, что сертификат создан:
kubectl get secret -n app-example

Вы должны увидеть следующую строку:
NAME            TYPE              DATA   AGE
app-example-tls kubernetes.io/tls 2 5m6s


6. Осталось только поправить ingress.yaml и values.yaml в helm чарте нашего приложения. Смотрите коммит

Пушим в репозиторий приложения, дожидаемся деплоя и проверяем.
Теперь приложение должно открываться по адресу https://app-example.example.com и иметь действительный сертификат!

В след. посте начнем подключать БД к нашему приложению и устанавливать в кластер PostgreSQL (На тестовых средах это нормально. В проде не рекомендую дежрать БД в кластере)
👍4🤔1
Добавляем в кластер поддержку хранения данных с помощью local-path-provisioner

Для нашего тестового приложения в dev кластере нам потребовалась БД.

Так как кластер тестовый - мы можем разместить СУБД прямо в кластере, а не где-то на серверах снаружи.

Чтобы СУБД было где хранить данные - мы сегодня займемся добавлением персистентного хранилища в наш кластер.

В кубе за хранение данных отвечают такие сущности как Storage Class, Persistent Volume и Persistent Volume Claim.

Также есть различный софт, который интегрирует разные системы хранения с вышеуказанными сущностями куба.

Мы воспользуемся одним из самых простых - local-path-provisioner. Данный софт просто создает папку на локальном диске, подключенном к ноде кластера и пишет данные туда. Не поддерживает ограничение размера запрошенного Persistent Volume, не умеет переевозить PV с ноды на ноду, но в тестовом кластере нам это не нужно.

Давайте приступать:

1. В каталоге cluster снова переименуем 06-app.yaml в 07-app.yaml и поменяем там зависимость с letsencrypt на local-path-provisioner
2. Добавим файл 06-local-path-provisioner.yaml в каталог cluster
3. Внесем необходимые изменения в файл kustomization.yaml
4. В components создадим папку local-path-provisioner и добавим туда namespace.yaml
5. Создадим Helm Release для local-path-provisioner.

Тут есть одна хитрость. Helm chart лежит не где-то в репозитории чартов, а прямо в репозитории с исходным кодом.
Но это не проблема. FluxCD позволяет установить чарт в кластер и в этом случае. В документации описано как можно провернуть данную затею.

Создаем GitRepository и указываем, что Flux должен игнорировать все, кроме указанной папки в git репозитории.

В Helm Release ссылаемся на наш git репозиторий и указываем путь, где искать чарт.

6. Пушим все в репозиторий, дожидаемся синхронизации и проверяем, что все прошло успешно:

Выполняем kubectl get storageclass

Должен появиться storage class с именем local-path

Вот и всё! В следующем посте установим PostgreSQL в кластер и подключим базу к нашему приложению

Stay tuned!
👍7
Deptrac внезапно сменил репозиторий

Сегодня утром обнаружил, что инструмент deptrac внезапно и без каких-либо объявлений сменил репозиторий с https://github.com/qossmic/deptrac на https://github.com/deptrac/deptrac/

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

Как разберусь с ситуацией подробнее - напишу
👍7
Deptrac в порядке

Я создал issue для того, чтобы разобраться в ситуации.
Еще один представитель организации qossmic (не связанный с тем, что осуществил перенос репозитория) ответил, что у компании ребрендинг и они решили выделить deptrac в отдельную организацию.

Полагаю, что злонамеренных действий тут нет. У Qossmic действительно сейчас ребрендинг и их старый сайт ведет на сайт, который указан в комментарии к моему issue.

Ждем пока появится на packagist как deptrac/deptrac и можно обновляться
👍6