Трюки для ускорения Docker-образов на проде
Контейнеры — сердце современных приложений. Но тяжёлые образы = медленные деплои и высокие затраты. Как ускорить образы без боли?
Мультистейдж билды — must have
Используй multi-stage builds, чтобы собрать приложение в одном контейнере, а продакшн-образ сделать минимальным:
Минимизируй базовые образы
Выбирай облегчённые базовые образы:
• alpine вместо ubuntu
• distroless для максимальной безопасности и минимального веса
Оптимизируй порядок слоёв
Чем выше изменяемость — тем ниже слой:
• Сначала COPY go.mod, npm package.json, установка зависимостей
• Потом COPY . . с кодом проекта
Это позволяет кэшировать большую часть слоёв даже при частых изменениях кода.
Чисть за собой
Всегда удаляй временные файлы и зависимости для сборки:
Сжимай образы
Используй docker-slim — он автоматически оптимизирует образ, удаляя всё ненужное:
Как применять и чего избегать
• В продакшне старайся держать образы <100MB
• Не добавляй лишние пакеты “на всякий случай”
• Проверяй образы на уязвимости: trivy image your-app:tag
#devops #девопс
Подпишись 👉@i_DevOps
Контейнеры — сердце современных приложений. Но тяжёлые образы = медленные деплои и высокие затраты. Как ускорить образы без боли?
Мультистейдж билды — must have
Используй multi-stage builds, чтобы собрать приложение в одном контейнере, а продакшн-образ сделать минимальным:
# Сборка
FROM golang:1.22 as builder
WORKDIR /app
COPY . .
RUN go build -o app
# Продакшн
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/app .
CMD ["./app"]Минимизируй базовые образы
Выбирай облегчённые базовые образы:
• alpine вместо ubuntu
• distroless для максимальной безопасности и минимального веса
Оптимизируй порядок слоёв
Чем выше изменяемость — тем ниже слой:
• Сначала COPY go.mod, npm package.json, установка зависимостей
• Потом COPY . . с кодом проекта
Это позволяет кэшировать большую часть слоёв даже при частых изменениях кода.
Чисть за собой
Всегда удаляй временные файлы и зависимости для сборки:
RUN apt-get install -y build-essential && \
make build && \
apt-get remove --purge -y build-essential && \
apt-get autoremove -y && \
apt-get cleanСжимай образы
Используй docker-slim — он автоматически оптимизирует образ, удаляя всё ненужное:
docker-slim build --http-probe my-app:latestКак применять и чего избегать
• В продакшне старайся держать образы <100MB
• Не добавляй лишние пакеты “на всякий случай”
• Проверяй образы на уязвимости: trivy image your-app:tag
#devops #девопс
Подпишись 👉@i_DevOps
👍6❤2
Bruno — это новый, современный и удобный инструмент для работы с API. В отличие от Postman и аналогов, Bruno хранит все данные локально в виде обычных файлов и папок, что позволяет легко версионировать их с помощью Git.
Основные особенности:
- Локальное хранение данных без облака
- Полная совместимость с Git
- Высокая производительность и минималистичный интерфейс
- Открытый исходный код
https://github.com/usebruno/bruno
#devops #девопс
Подпишись 👉@i_DevOps
Основные особенности:
- Локальное хранение данных без облака
- Полная совместимость с Git
- Высокая производительность и минималистичный интерфейс
- Открытый исходный код
https://github.com/usebruno/bruno
#devops #девопс
Подпишись 👉@i_DevOps
👍8❤1💩1
Работа с хранилищами в Kubernetes: руководство для инженеров
Как DevOps-инженер я часто сталкиваюсь с необходимостью глубокого понимания тонких аспектов Kubernetes. Одним из таких ключевых элементов является управление хранилищем данных. Хотя этот элемент иногда остаётся в тени других задач, его важность для успешного развёртывания и поддержки приложений велика.
Накопленный мною опыт в этой области стал основой для этой статьи.
Я сфокусируюсь на трёх ключевых элементах управления хранилищем в Kubernetes:
PersistentVolumes (PV).
PersistentVolumeClaims (PVC).
Storage Classes.
https://habr.com/ru/companies/T1Holding/articles/781368/
#devops #девопс
Подпишись 👉@i_DevOps
Как DevOps-инженер я часто сталкиваюсь с необходимостью глубокого понимания тонких аспектов Kubernetes. Одним из таких ключевых элементов является управление хранилищем данных. Хотя этот элемент иногда остаётся в тени других задач, его важность для успешного развёртывания и поддержки приложений велика.
Накопленный мною опыт в этой области стал основой для этой статьи.
Я сфокусируюсь на трёх ключевых элементах управления хранилищем в Kubernetes:
PersistentVolumes (PV).
PersistentVolumeClaims (PVC).
Storage Classes.
https://habr.com/ru/companies/T1Holding/articles/781368/
#devops #девопс
Подпишись 👉@i_DevOps
👍5❤1
CI/CD без боли: оптимизация пайплайнов на GitHub Actions 🚀
GitHub Actions — мощный инструмент, но без оптимизации ваш пайплайн легко превратится в тормозную мясорубку. Разбираемся, как выжать максимум из CI/CD на GitHub.
Почему это важно:
Быстрые и надёжные пайплайны — ключ к высокой скорости доставки. Медленные сборки = потеря времени, нервов и денег.
1. Кэшируй разумно
Используй
⚠️ Ключ должен быть завязан на lock-файлы, иначе можно словить конфликты версий.
2. Делай job-ы параллельными
Разделяй пайплайн на независимые шаги — unit-тесты, линтеры, сборка. Добавляй
3. Matrix strategy — must-have
Хочешь тестировать на разных версиях языка/ОС? Используй
Это масштабирует проверку без дублирования кода.
4. Отключи ненужные события
Не запускай воркфлоу на каждом чихе. Используй
Это поможет не перегружать runners.
5. Используй
Иногда надо протестить пайплайн руками — не бойся добавить ручной триггер:
6. Логи и таймауты — твои друзья
Добавляй
Вывод:
Грамотно настроенный GitHub Actions экономит время и снижает головную боль. Избегай монолитных пайплайнов, кэшируй умно и тестируй только то, что нужно. Автоматизация — это про контроль, а не хаос.
#devops #девопс
Подпишись 👉@i_DevOps
GitHub Actions — мощный инструмент, но без оптимизации ваш пайплайн легко превратится в тормозную мясорубку. Разбираемся, как выжать максимум из CI/CD на GitHub.
Почему это важно:
Быстрые и надёжные пайплайны — ключ к высокой скорости доставки. Медленные сборки = потеря времени, нервов и денег.
1. Кэшируй разумно
Используй
actions/cache для ускорения зависимостей, но не кэшируй всё подряд. Пример для Node.js:
- uses: actions/cache@v4
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
⚠️ Ключ должен быть завязан на lock-файлы, иначе можно словить конфликты версий.
2. Делай job-ы параллельными
Разделяй пайплайн на независимые шаги — unit-тесты, линтеры, сборка. Добавляй
needs: там, где реально нужно, а не везде.3. Matrix strategy — must-have
Хочешь тестировать на разных версиях языка/ОС? Используй
matrix:
strategy:
matrix:
node-version: [16, 18, 20]
Это масштабирует проверку без дублирования кода.
4. Отключи ненужные события
Не запускай воркфлоу на каждом чихе. Используй
on: грамотно:
on:
push:
branches:
- main
pull_request:
paths:
- 'src/**'
Это поможет не перегружать runners.
5. Используй
workflow_dispatch для ручных запусков Иногда надо протестить пайплайн руками — не бойся добавить ручной триггер:
on:
workflow_dispatch:
6. Логи и таймауты — твои друзья
Добавляй
timeout-minutes к job-ам и выводи ключевые логи через ::group:: и ::endgroup::, чтобы не утонуть в консоли.Вывод:
Грамотно настроенный GitHub Actions экономит время и снижает головную боль. Избегай монолитных пайплайнов, кэшируй умно и тестируй только то, что нужно. Автоматизация — это про контроль, а не хаос.
#devops #девопс
Подпишись 👉@i_DevOps
👍9
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Media is too big
VIEW IN TELEGRAM
Docker
01- Основы. Принцип работы. Почему docker. Сравнение с виртульной машиной. Применение.
02- Установка Docker в Linux и Windows.
03- Основные команды. Управление портами. Port Mapping.
04- Переменные. Environment Variables.
05- Volumes. Постоянные данные. Persisting Data.
06- Сети в докер. Network: bridge, host, none, macvlan, ipvlan
07- Dockerfile. Создаем СВОИ контейнеры.
08- Docker-COMPOSE. Простой запуск контейнеров.
09- Portainer. Управлять Docker ПРОСТО. Обзор, установка, настройка.
10- Watchtower. Автоматизация: обновление Docker контейнеров.
источник
#devops #девопс
Подпишись 👉@i_DevOps
01- Основы. Принцип работы. Почему docker. Сравнение с виртульной машиной. Применение.
02- Установка Docker в Linux и Windows.
03- Основные команды. Управление портами. Port Mapping.
04- Переменные. Environment Variables.
05- Volumes. Постоянные данные. Persisting Data.
06- Сети в докер. Network: bridge, host, none, macvlan, ipvlan
07- Dockerfile. Создаем СВОИ контейнеры.
08- Docker-COMPOSE. Простой запуск контейнеров.
09- Portainer. Управлять Docker ПРОСТО. Обзор, установка, настройка.
10- Watchtower. Автоматизация: обновление Docker контейнеров.
источник
#devops #девопс
Подпишись 👉@i_DevOps
👍10
Освоение журналов аудита Kubernetes
Kubernetes предоставляет мощный инструмент, позволяющий создавать журналы аудита для каждого действия, запрашиваемого и выполняемого через API Kubernetes.
Понимание того, как настраивать, управлять и интерпретировать эти журналы, критически важно для поддержания безопасности и соответствия требованиям в средах Kubernetes. Конкретно эта статья посвящена исследованию безопасности Kubernetes.
https://habr.com/ru/articles/815119/
#devops #девопс
Подпишись 👉@i_DevOps
Kubernetes предоставляет мощный инструмент, позволяющий создавать журналы аудита для каждого действия, запрашиваемого и выполняемого через API Kubernetes.
Понимание того, как настраивать, управлять и интерпретировать эти журналы, критически важно для поддержания безопасности и соответствия требованиям в средах Kubernetes. Конкретно эта статья посвящена исследованию безопасности Kubernetes.
https://habr.com/ru/articles/815119/
#devops #девопс
Подпишись 👉@i_DevOps
👍4
Как определить, какая версия Docker установлена: Docker Desktop или Docker Engine
Docker стал лидером в предоставлении решений для разработки программного обеспечения, предлагая инструменты, которые упрощают процесс разработки, тестирования, развертывания и запуска приложений с использованием контейнеров. Поэтому понимание различных продуктов Docker, таких как Docker Desktop, и компонентов, таких как Docker Engine, а также того, как они взаимодействуют, крайне важно для разработчиков, стремящихся к максимальной продуктивности и соблюдению условий лицензирования Docker.
В этой статье будут разъяснены различия и сходства между Docker Desktop и Docker Engine, а также приведены рекомендации по определению, какой из них используется в данный момент, чтобы вы могли максимально эффективно использовать возможности Docker.
https://www.docker.com/blog/how-to-check-docker-version/
#devops #девопс
Подпишись 👉@i_DevOps
Docker стал лидером в предоставлении решений для разработки программного обеспечения, предлагая инструменты, которые упрощают процесс разработки, тестирования, развертывания и запуска приложений с использованием контейнеров. Поэтому понимание различных продуктов Docker, таких как Docker Desktop, и компонентов, таких как Docker Engine, а также того, как они взаимодействуют, крайне важно для разработчиков, стремящихся к максимальной продуктивности и соблюдению условий лицензирования Docker.
В этой статье будут разъяснены различия и сходства между Docker Desktop и Docker Engine, а также приведены рекомендации по определению, какой из них используется в данный момент, чтобы вы могли максимально эффективно использовать возможности Docker.
https://www.docker.com/blog/how-to-check-docker-version/
#devops #девопс
Подпишись 👉@i_DevOps
👍5
🚨 Helm: как не сломать прод — 5 ошибок, которые делают все
Helm — must-have инструмент для деплоя в Kubernetes. Но даже опытные инженеры наступают на одни и те же грабли, особенно в проде. Разберём, какие ошибки чаще всего приводят к падениям и багам.
🔸 1.
Без
Решение: всегда используйте
🔸 2. Забытый
Нередко инженеры коммитят
Решение:
* Разделяй values по окружениям (
* Используй
* Применяй валидацию с helm-schema-gen
🔸 3. Не pinned зависимости в
Если чарты-зависимости подтягиваются без фиксации версий (
Решение:
Фиксируй зависимости чётко:
🔸 4. Отсутствие pre-upgrade и post-upgrade хуков
Если приложение требует миграций БД или прогрева кэша, а хуки не заданы — велика вероятность получить нерабочий релиз.
Решение:
Определи хуки в
🔸 5. Helm secrets хранятся в чистом виде в Git
Распакованный
Решение:
* Используй helm-secrets с
* Шифруй
✅ Вывод:
Helm — мощный, но не прощающий ошибок инструмент. Настрой atomic деплой, следи за values и зависимостями, автоматизируй pre/post-хуки и защищай секреты. Это минимальный чеклист для прод-готовности.
#devops #девопс
Подпишись 👉@i_DevOps
Helm — must-have инструмент для деплоя в Kubernetes. Но даже опытные инженеры наступают на одни и те же грабли, особенно в проде. Разберём, какие ошибки чаще всего приводят к падениям и багам.
🔸 1.
helm upgrade без флага --atomicБез
--atomic Helm не откатывает релиз при ошибке — в кластере остаётся полусломанное состояние.Решение: всегда используйте
--atomic на проде:
helm upgrade my-app ./chart --atomic --install
🔸 2. Забытый
values.yaml с тестовыми значениямиНередко инженеры коммитят
values.yaml с включёнными debug-логами, выключенным HPA и отключённым SSL.Решение:
* Разделяй values по окружениям (
values-prod.yaml, values-staging.yaml)* Используй
.gitignore для временных файлов* Применяй валидацию с helm-schema-gen
🔸 3. Не pinned зависимости в
Chart.yamlЕсли чарты-зависимости подтягиваются без фиксации версий (
version: ^1.2.3), то обновления могут неожиданно всё сломать.Решение:
Фиксируй зависимости чётко:
version: 1.2.3 и контролируй обновления вручную.🔸 4. Отсутствие pre-upgrade и post-upgrade хуков
Если приложение требует миграций БД или прогрева кэша, а хуки не заданы — велика вероятность получить нерабочий релиз.
Решение:
Определи хуки в
templates/hooks.yaml:
apiVersion: batch/v1
kind: Job
metadata:
annotations:
"helm.sh/hook": pre-upgrade
🔸 5. Helm secrets хранятся в чистом виде в Git
Распакованный
secrets.yaml в Git — это инцидент.Решение:
* Используй helm-secrets с
sops* Шифруй
secrets.yaml и расшифровывай только при деплое:
helm secrets upgrade my-app -f secrets.enc.yaml
✅ Вывод:
Helm — мощный, но не прощающий ошибок инструмент. Настрой atomic деплой, следи за values и зависимостями, автоматизируй pre/post-хуки и защищай секреты. Это минимальный чеклист для прод-готовности.
#devops #девопс
Подпишись 👉@i_DevOps
👍5
Netshoot — набор инструментов для устранения сетевых проблем с Docker и Kubernetes.
Отладка сетей Docker и Kubernetes может быть сложной. Однако при правильном понимании принципов работы сетей Docker и Kubernetes, а также наличии подходящих инструментов, вы сможете эффективно выявлять и устранять сетевые проблемы. Контейнер netshoot включает в себя мощный набор инструментов для диагностики сетевых проблем в Docker. Вместе с этими инструментами идут практические примеры, демонстрирующие, как netshoot можно использовать в реальных сценариях.
https://github.com/nicolaka/netshoot
#devops #девопс
Подпишись 👉@i_DevOps
Отладка сетей Docker и Kubernetes может быть сложной. Однако при правильном понимании принципов работы сетей Docker и Kubernetes, а также наличии подходящих инструментов, вы сможете эффективно выявлять и устранять сетевые проблемы. Контейнер netshoot включает в себя мощный набор инструментов для диагностики сетевых проблем в Docker. Вместе с этими инструментами идут практические примеры, демонстрирующие, как netshoot можно использовать в реальных сценариях.
https://github.com/nicolaka/netshoot
#devops #девопс
Подпишись 👉@i_DevOps
👍9❤1
Kubernetes как PaaS: максимум возможностей без разработки. Часть 1
Kubernetes — это не просто оркестратор контейнеров, а целая экосистема инструментов, которые позволяют построить PaaS без написания кода. Helm, ArgoCD, Crossplane, Knative и другие решения делают управление приложениями и инфраструктурой настолько простым, что разработка собственной платформы превращается в задачу конфигурации, а не программирования. Меня зовут Сергей Емельянов, я техлид команды в VK Tech, которая занимается созданием PaaS-платформы на базе Kubernetes для упрощения работы с данными. В серии статей разберем, как создать PaaS, используя мощь Kubernetes и его экосистему.
https://habr.com/ru/companies/vktech/articles/895954/
#devops #девопс
Подпишись 👉@i_DevOps
Kubernetes — это не просто оркестратор контейнеров, а целая экосистема инструментов, которые позволяют построить PaaS без написания кода. Helm, ArgoCD, Crossplane, Knative и другие решения делают управление приложениями и инфраструктурой настолько простым, что разработка собственной платформы превращается в задачу конфигурации, а не программирования. Меня зовут Сергей Емельянов, я техлид команды в VK Tech, которая занимается созданием PaaS-платформы на базе Kubernetes для упрощения работы с данными. В серии статей разберем, как создать PaaS, используя мощь Kubernetes и его экосистему.
https://habr.com/ru/companies/vktech/articles/895954/
#devops #девопс
Подпишись 👉@i_DevOps
👍5
Kubernetes как PaaS: максимум возможностей без разработки. Часть 2
Это вторая часть серии статей, где мы шаг за шагом строим PaaS на базе Kubernetes без написания кода. Напомню, для чего мы это делаем: наша цель — выжать максимум из современных технологий и экосистемы Kubernetes, чтобы создать PaaS-решение, которое упростит жизнь разработчикам. Мы хотим, чтобы приложения и сервисы разворачивались быстро, удобно и без глубокого погружения в инфраструктуру.
https://habr.com/ru/companies/vktech/articles/890386/
#devops #девопс
Подпишись 👉@i_DevOps
Это вторая часть серии статей, где мы шаг за шагом строим PaaS на базе Kubernetes без написания кода. Напомню, для чего мы это делаем: наша цель — выжать максимум из современных технологий и экосистемы Kubernetes, чтобы создать PaaS-решение, которое упростит жизнь разработчикам. Мы хотим, чтобы приложения и сервисы разворачивались быстро, удобно и без глубокого погружения в инфраструктуру.
https://habr.com/ru/companies/vktech/articles/890386/
#devops #девопс
Подпишись 👉@i_DevOps
❤2👍2