Список часто используемых команд Kamal
Хотя перечень не является полным, он охватывает наиболее распространённые задачи
🔹 Команда инициализации используется для создания конфигурационных и секретных файлов один раз после добавления Kamal в проект.
🔹 Установка Docker на всех целевых хостах
🔹 Алиасы
Kamal предоставляет kamal shell из коробки. Я обычно добавляю kamal console для быстрого доступа к Rails-консоли.
🔹 Деплой приложения [в staging-окружение]
🔹 Откат приложения до VERSION [в staging-окружении]
🔹 Сборка образов
Большую часть времени вы не будете использовать команду
так как она в основном используется в
Тем не менее, вы можете использовать её для сборки образа без его пуша, что удобно для тестирования.
🔹 Ниже приведены несколько команд для чтения логов приложения и его аксессуаров
🔹 Логи аксессуара PgHero [в staging-окружении]
bash
$ kamal accessory logs pghero [-d staging]```
🔹 Логи прокси-сервера [в staging-окружении]
🔹 Показать объединённую конфигурацию (включая секреты) [для staging-окружения].
Полезно для отладки и если вы забыли IP-адрес сервера.
🔹 Вывести секреты в stdout [для staging-окружения]
🔹 Показать информацию обо всех контейнерах, сгруппированных по ролям [для staging-окружения]
🔹 Показать только контейнеры приложения [в staging-окружении], [например, для web-ролей]
🔹 Показать только контейнеры аксессуара PgHero [в staging-окружении]
👉 DevOps Portal
Хотя перечень не является полным, он охватывает наиболее распространённые задачи
$ kamal init
$ kamal server
Kamal предоставляет kamal shell из коробки. Я обычно добавляю kamal console для быстрого доступа к Rails-консоли.
$ kamal shell [-d production]
# app exec -i --reuse "bin/rails console"
$ kamal console [-d production]
$ kamal deploy [-d staging]
$ kamal rollback [VERSION] [-d staging]
Большую часть времени вы не будете использовать команду
kamal build напрямую,так как она в основном используется в
kamal deploy и kamal redeploy.Тем не менее, вы можете использовать её для сборки образа без его пуша, что удобно для тестирования.
$ kamal build dev
$ kamal app logs [--roles=web -n 100 -f]
$ kamal app logs [--primary -n 100 -f]
$ kamal app logs [--hosts=<ip_address> -n 100 -f]
$ kamal audit
bash
$ kamal accessory logs pghero [-d staging]```
$ kamal proxy logs [-d staging]
Полезно для отладки и если вы забыли IP-адрес сервера.
$ kamal config [-d staging]
$ kamal secrets print [-d staging]
$ kamal details [-d staging]
$ kamal app details [-d staging] [--roles=web]
$ kamal accessory details pghero -d staging
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1
Самый распространённый способ запустить контейнер — использовать Docker CLI. Но что именно делает команда
🔹
🔹
🔹
🔹
Мини-курс, чтобы научиться запускать контейнеры с разными рантаймами:
https://labs.iximiuz.com/skill-paths/run-containers-across-runtimes
👉 DevOps Portal
docker run? Чем она отличается от:podman runnerdctl runctr runrunc create/startМини-курс, чтобы научиться запускать контейнеры с разными рантаймами:
https://labs.iximiuz.com/skill-paths/run-containers-across-runtimes
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤2
После многих лет использования NGINX в проектах на Docker Compose, автор решил перейти на
traefik — и отмечает, что это стало одним из лучших решений в области DevOps за всё время.
В своём блоге он подробно описывает полную настройку, что изменилось и почему использование Traefik значительно упрощает работу.
Traefik из коробки предоставляет:
✅ Автоматическую маршрутизацию на основе меток контейнеров
✅ Встроенный HTTPS через Let’s Encrypt
✅ Дашборд в реальном времени для маршрутов и сервисов
✅ Балансировку нагрузки с поддержкой "липких" сессий
✅ Нативную интеграцию с Prometheus для сбора метрик
✅ Отсутствие необходимости вручную поддерживать конфигурационные файлы
Ссылка на блог:
https://medium.com/@prateekjain.dev/why-i-replaced-nginx-with-traefik-in-my-docker-compose-setup-32f53b8ab2d8
👉 DevOps Portal
traefik — и отмечает, что это стало одним из лучших решений в области DevOps за всё время.
В своём блоге он подробно описывает полную настройку, что изменилось и почему использование Traefik значительно упрощает работу.
Traefik из коробки предоставляет:
Ссылка на блог:
https://medium.com/@prateekjain.dev/why-i-replaced-nginx-with-traefik-in-my-docker-compose-setup-32f53b8ab2d8
Please open Telegram to view this post
VIEW IN TELEGRAM
❤13👍9💊1
Быстрый совет по Bash: массовое переименование файлов с помощью
Команда
👉 DevOps Portal
renameКоманда
rename позволяет заменить один шаблон на другой сразу в нескольких именах файлов. В этом примере все расширения файлов .html в текущем каталоге преобразуются в .php.Please open Telegram to view this post
VIEW IN TELEGRAM
👍19❤5
This media is not supported in your browser
VIEW IN TELEGRAM
Nerdlog — tui-инструмент для работы с логами на локальных и удалённых хостах.
🔹 Не требует централизованного сервера — взаимодействие с удалёнными машинами происходит через SSH
🔹 Логи не скачиваются целиком — обработка выполняется на удалённой стороне, в интерфейс передаётся уже результат
🔹 Для удобства просмотра реализованы таймлайн и гистограмма
Статья с подробностями: dmitryfrank.com/projects/nerdlog/article
Репозиторий: github.com/dimonomid/nerdlog
👉 DevOps Portal
Статья с подробностями: dmitryfrank.com/projects/nerdlog/article
Репозиторий: github.com/dimonomid/nerdlog
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16❤2🤯1
Быстрый совет по Linux
Если у вас возникают проблемы с чтением каталогов в переменной
👉 DevOps Portal
Если у вас возникают проблемы с чтением каталогов в переменной
$PATH, используйте команду tr, чтобы заменить двоеточия (":") на символы новой строки ("\n"), чтобы отобразить их построчно:$ echo $PATH | tr ":" "\n"
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30❤11
Быстрый совет по Docker Compose
Обновление версии образа у запущенного контейнера
Да, это возможно в Docker и практически без простоев.
В блоке
Эта конфигурация лучше всего работает в сочетании с опцией
Примечание: наилучший результат достигается при использовании семантического версионирования образов.
👉 DevOps Portal
Обновление версии образа у запущенного контейнера
Да, это возможно в Docker и практически без простоев.
В блоке
services необходимо определить параметры deploy (как на изображении выше). Важным параметром здесь является order. Он указывает Docker сначала создать и запустить новый контейнер с обновлённой версией образа. После запуска нового контейнера трафик будет перенаправлен на него, а старый контейнер будет остановлен и удалён.Эта конфигурация лучше всего работает в сочетании с опцией
replicas, чтобы развернуть несколько экземпляров одного и того же контейнера и обеспечить высокую доступность.Примечание: наилучший результат достигается при использовании семантического версионирования образов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤4
Основы сетевых пространств имён в Linux
Прежде чем переходить к Docker и Kubernetes, стоит разобраться в базовых технологиях:
🔹 Создание сетевого пространства имён в Linux: https://labs.iximiuz.com/challenges/linux-network-namespace
🔹 Соединение двух сетевых пространств имён: https://labs.iximiuz.com/challenges/connect-two-network-namespaces
🔹 Соединение нескольких сетевых пространств имён: https://labs.iximiuz.com/challenges/connect-multiple-network-namespaces
👉 DevOps Portal
Прежде чем переходить к Docker и Kubernetes, стоит разобраться в базовых технологиях:
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤3
Ошибка в безопасности Docker, которую упускают даже сеньоры:
Не добавлять файл
Если не исключить
Совет: всегда добавляйте
👉 DevOps Portal
Не добавлять файл
.dockerignore с исключением .env — огромный риск.Если не исключить
.env из процесса сборки Docker, переменные окружения, включая API-ключи, учетные данные к БД и другие секреты, попадают прямо в образ.Совет: всегда добавляйте
.env и другие чувствительные файлы в .dockerignore.Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥12
Быстрый совет по Linux
Хватит управлять SSH-подключениями вручную!
Используй блоки
С конфигом, как ниже, достаточно просто:
👉 DevOps Portal
Хватит управлять SSH-подключениями вручную!
Используй блоки
Host в ~/.ssh/config.С конфигом, как ниже, достаточно просто:
$ ssh dev-server
Please open Telegram to view this post
VIEW IN TELEGRAM
❤26👍12🔥3🤯2
Недавно Docker добавил новую функциональность под названием Docker Bake, которая предназначена для управления сложными сборками
Если у вас есть разные сборки для различных стадий CI, таких как lint, test и другие, этот инструмент поможет вам управлять сборками в более декларативной и упрощённой форме.
Также он подходит для проектов, использующих monorepo-архитектуру, но с разнообразными сборками.
Отлично совместим с docker-compose.
Docker Bake теперь официально доступен в Docker Desktop 4.38!
Подробнее в блоге Docker: https://www.docker.com/blog/ga-launch-docker-bake/
👉 DevOps Portal
Если у вас есть разные сборки для различных стадий CI, таких как lint, test и другие, этот инструмент поможет вам управлять сборками в более декларативной и упрощённой форме.
Также он подходит для проектов, использующих monorepo-архитектуру, но с разнообразными сборками.
Отлично совместим с docker-compose.
Docker Bake теперь официально доступен в Docker Desktop 4.38!
Подробнее в блоге Docker: https://www.docker.com/blog/ga-launch-docker-bake/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤5🔥5🤔1
Не позволяйте одному контейнеру съедать всю память сервера
Устанавливайте ограничения по памяти в Docker с помощью флага
👉 DevOps Portal
Устанавливайте ограничения по памяти в Docker с помощью флага
--memory или в файле Compose.Please open Telegram to view this post
VIEW IN TELEGRAM
❤21👍10🔥4
Многие DevOps-инженеры не до конца понимают структуру директории Ansible и то, как всё связано между собой.
Вот шпаргалка, которая поможет лучше разобраться
👉 DevOps Portal
Вот шпаргалка, которая поможет лучше разобраться
Please open Telegram to view this post
VIEW IN TELEGRAM
❤23👍15🔥2🥱2
Когда-нибудь хотелось просто «запрыгнуть» в работающий Docker-контейнер?
Именно для этого и существует
Нужно отладить что-то или посмотреть логи?
На фото краткая шпаргалка, которая точно пригодится
👉 DevOps Portal
Именно для этого и существует
docker execНужно отладить что-то или посмотреть логи?
exec позволяет запускать любые команды внутри контейнера без его перезапуска.На фото краткая шпаргалка, которая точно пригодится
Please open Telegram to view this post
VIEW IN TELEGRAM
👍14🔥6❤2😁1
This media is not supported in your browser
VIEW IN TELEGRAM
Утилита для мониторинга передачи данных
Недавно я занимался миграцией веб-сайта, в рамках которой нужно было вручную перенести данные из SQL-файла на ноутбуке в новую базу данных MySQL (RDS). Размер файла составлял примерно 450 МБ.
Мне нужно было отслеживать прогресс импорта, и я узнал об утилите Pipe Viewer (pv).
Pipe Viewer, или просто pv, — это инструмент командной строки, позволяющий отслеживать прогресс передачи данных.
Вот команду, которую я использовал:
Пример вывода:
Утилиту можно встроить в любой стандартный конвейер (pipeline) между двумя процессами, чтобы наглядно отображать скорость передачи данных, затраченное время, степень завершённости и примерное оставшееся время до окончания операции.
Возможности:
🔹 Визуальный индикатор прогресса
🔹 Оценка оставшегося времени
🔹 Задержка
Утилиту необходимо установить через соответствующий пакетный менеджер.
Инструмент: https://ivarch.com/programs/pv.shtml
👉 DevOps Portal
Недавно я занимался миграцией веб-сайта, в рамках которой нужно было вручную перенести данные из SQL-файла на ноутбуке в новую базу данных MySQL (RDS). Размер файла составлял примерно 450 МБ.
Мне нужно было отслеживать прогресс импорта, и я узнал об утилите Pipe Viewer (pv).
Pipe Viewer, или просто pv, — это инструмент командной строки, позволяющий отслеживать прогресс передачи данных.
Вот команду, которую я использовал:
pv backup.sql | mysql -h rds.amazonaws.com -u bibinwilson -p my_db
Пример вывода:
80.0MiB 0:08:36 [ 158KiB/s]
[==================================>] 100%
Утилиту можно встроить в любой стандартный конвейер (pipeline) между двумя процессами, чтобы наглядно отображать скорость передачи данных, затраченное время, степень завершённости и примерное оставшееся время до окончания операции.
Возможности:
Утилиту необходимо установить через соответствующий пакетный менеджер.
Инструмент: https://ivarch.com/programs/pv.shtml
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤6
This media is not supported in your browser
VIEW IN TELEGRAM
Если вы инженер DevOps и ещё не слышали о метриках DORA — пора это исправить.
DORA расшифровывается как DevOps Research and Assessment (исследование и оценка практик DevOps).
Эта команда стоит за отчётом State of DevOps — ключевым источником информации о том, что действительно отличает высокоэффективные инженерные команды.
Но как метрики DORA применяются в реальных командах?
Вот как их можно отслеживать и даже создавать дашборды для визуализации:
🔹 Частота деплоев (Deployment Frequency):
Отслеживайте количество деплоев через вашу CI/CD-платформу (GitHub Actions, GitLab, Jenkins и т.д.). Отправляйте данные о деплоях в систему метрик, такую как Prometheus, Datadog или даже Google Sheets через webhook.
🔹 Время выполнения изменений (Lead Time for Changes):
Используйте временные метки Git-коммитов и событий деплоя в прод. Интегрируйте инструменты вроде Jira с GitHub или GitLab. Данные можно визуализировать в Grafana или Looker.
🔹 Процент неудачных изменений (Change Failure Rate):
Интегрируйте инструменты управления инцидентами (PagerDuty, Opsgenie и т.д.) с логами деплоя. Коррелируйте инциденты с последними релизами. Это можно отслеживать в Grafana, Datadog или даже в Excel (для небольших команд).
🔹 Время восстановления сервиса (Time to Restore Service):
Используйте системы алёртов, такие как Prometheus Alertmanager, Splunk или New Relic. Измеряйте время от срабатывания алёрта до полного устранения инцидента. Визуализируйте тренды на дашборде для контроля MTTR (среднего времени восстановления).
🔹 Надёжность (Reliability):
Определите SLO (например, аптайм 99.9%) и отслеживайте их с помощью мониторинга SLI/SLO в Prometheus, Datadog или Nobl9. Визуализируйте бюджеты ошибок и аптайм во времени.
Инструменты вроде Grafana, Looker, Power BI или Tableau отлично подходят для создания кастомных дашбордов.
Не обязательно внедрять всё сразу.
Выберите одну метрику. Постройте простой дашборд. И постепенно улучшайте подход.
👉 DevOps Portal
DORA расшифровывается как DevOps Research and Assessment (исследование и оценка практик DevOps).
Эта команда стоит за отчётом State of DevOps — ключевым источником информации о том, что действительно отличает высокоэффективные инженерные команды.
Но как метрики DORA применяются в реальных командах?
Вот как их можно отслеживать и даже создавать дашборды для визуализации:
Отслеживайте количество деплоев через вашу CI/CD-платформу (GitHub Actions, GitLab, Jenkins и т.д.). Отправляйте данные о деплоях в систему метрик, такую как Prometheus, Datadog или даже Google Sheets через webhook.
Используйте временные метки Git-коммитов и событий деплоя в прод. Интегрируйте инструменты вроде Jira с GitHub или GitLab. Данные можно визуализировать в Grafana или Looker.
Интегрируйте инструменты управления инцидентами (PagerDuty, Opsgenie и т.д.) с логами деплоя. Коррелируйте инциденты с последними релизами. Это можно отслеживать в Grafana, Datadog или даже в Excel (для небольших команд).
Используйте системы алёртов, такие как Prometheus Alertmanager, Splunk или New Relic. Измеряйте время от срабатывания алёрта до полного устранения инцидента. Визуализируйте тренды на дашборде для контроля MTTR (среднего времени восстановления).
Определите SLO (например, аптайм 99.9%) и отслеживайте их с помощью мониторинга SLI/SLO в Prometheus, Datadog или Nobl9. Визуализируйте бюджеты ошибок и аптайм во времени.
Инструменты вроде Grafana, Looker, Power BI или Tableau отлично подходят для создания кастомных дашбордов.
Не обязательно внедрять всё сразу.
Выберите одну метрику. Постройте простой дашборд. И постепенно улучшайте подход.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍4❤3
This media is not supported in your browser
VIEW IN TELEGRAM
Освойте деплойменты в Kubernetes
Нашел практическое задание, которое поможет разобраться, как работают Deployment'ы — от их создания до масштабирования, обновления образов, проверки состояния Pod'ов и отката изменений.
Отлично подходит для практики реальных операций, стоящих за
Попробуйте здесь
👉 DevOps Portal
Нашел практическое задание, которое поможет разобраться, как работают Deployment'ы — от их создания до масштабирования, обновления образов, проверки состояния Pod'ов и отката изменений.
Отлично подходит для практики реальных операций, стоящих за
kubectl apply/create и kubectl rollout.Попробуйте здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥3❤2
Kubernetes 1.33 (кодовое имя Octarine) был выпущен чуть более двух недель назад
В релиз вошли 64 улучшения (!!), поэтому полезно иметь краткий и наглядный обзор.
Визуальный разбор Kubernetes 1.33:
https://dev.to/aurelievache/understanding-kubernetes-part-55-kubernetes-133-changelog-1k5l
Подробности о релизе доступны в официальных примечаниях к релизу Kubernetes 1.33 и релиз-нотах GKE 1.33.
👉 DevOps Portal
В релиз вошли 64 улучшения (!!), поэтому полезно иметь краткий и наглядный обзор.
Визуальный разбор Kubernetes 1.33:
https://dev.to/aurelievache/understanding-kubernetes-part-55-kubernetes-133-changelog-1k5l
Подробности о релизе доступны в официальных примечаниях к релизу Kubernetes 1.33 и релиз-нотах GKE 1.33.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2
Паттерны проброса портов в Kubernetes
Вы находитесь внутри dev-кластера, доступ к сети ограничен, и только что задеплоенный сервис ведёт себя некорректно.
Нет ни LoadBalancer'а, ни ingress-контроллера, а открыть порт — не вариант, потому что сетевая команда либо медлит, либо отказывает.
В этом случае вас выручает
Здесь представлена упрощённая схема для наглядного понимания.
👉 DevOps Portal
Вы находитесь внутри dev-кластера, доступ к сети ограничен, и только что задеплоенный сервис ведёт себя некорректно.
Нет ни LoadBalancer'а, ни ingress-контроллера, а открыть порт — не вариант, потому что сетевая команда либо медлит, либо отказывает.
В этом случае вас выручает
kubectl port-forward.Здесь представлена упрощённая схема для наглядного понимания.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤4🥱2