🤔 Как организовать полный цикл CI/CD для 3 команд?
- Разделить пайплайны по проектам/компонентам;
- Использовать общие stages: build → test → scan → deploy;
- Настроить изолированные среды (dev/test/prod);
- Внедрить обратную связь (slack, email);
- Хранить все артефакты централизованно;
- Назначить ответственность за релиз каждой команды или централизованно через релиз-менеджера.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- Разделить пайплайны по проектам/компонентам;
- Использовать общие stages: build → test → scan → deploy;
- Настроить изолированные среды (dev/test/prod);
- Внедрить обратную связь (slack, email);
- Хранить все артефакты централизованно;
- Назначить ответственность за релиз каждой команды или централизованно через релиз-менеджера.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1💊1
🤔 Когда вы создаёте файл какие права создаются по умолчанию?
Права доступа по умолчанию зависят от базовых прав доступа и значения
🟠Файлы: 666 (rw-rw-rw-)
Это означает, что по умолчанию все пользователи могут читать и записывать в файл.
🟠Каталоги: 777 (rwxrwxrwx)
Это означает, что по умолчанию все пользователи могут читать, записывать и выполнять (заходить) в каталог.
🚩Значение umask: 022
Это маска, которая определяет, какие права будут отключены при создании нового файла или каталога. Значение
🟠Создание файла
Базовые права доступа: 666
Значение
Окончательные права доступа: 666 - 022 = 644 (rw-r--r--)
🟠Создание каталога
Базовые права доступа: 777
Значение
Окончательные права доступа: 777 - 022 = 755 (rwxr-xr-x)
🚩Создание файла с umask 0022
1⃣Установка umask
2⃣Создание файла
3⃣Проверка прав доступа
Вывод
Права доступа: 644 (rw-r--r--)
🚩Создание каталога с umask 0027
1⃣Установка umask
2⃣Создание каталога
3⃣Проверка прав доступа
Вывод
Права доступа: 750 (rwxr-x---)
🚩Дополнительные замечания
🟠umask в скриптах
Вы можете установить umask в скрипте для задания прав доступа по умолчанию для всех создаваемых файлов и каталогов.
🟠Проверка прав доступа в разных ситуациях
Для файлов: По умолчанию права доступа 666 минус umask.
Для каталогов: По умолчанию права доступа 777 минус umask.
Ставь 👍 и забирай 📚 Базу знаний
Права доступа по умолчанию зависят от базовых прав доступа и значения
umask. Базовые права доступа — это значения, которые система использует для определения разрешений перед применением маски umask.🟠Файлы: 666 (rw-rw-rw-)
Это означает, что по умолчанию все пользователи могут читать и записывать в файл.
🟠Каталоги: 777 (rwxrwxrwx)
Это означает, что по умолчанию все пользователи могут читать, записывать и выполнять (заходить) в каталог.
🚩Значение umask: 022
Это маска, которая определяет, какие права будут отключены при создании нового файла или каталога. Значение
umask указывается в восьмеричной системе счисления. 🟠Создание файла
Базовые права доступа: 666
Значение
umask: 022Окончательные права доступа: 666 - 022 = 644 (rw-r--r--)
🟠Создание каталога
Базовые права доступа: 777
Значение
umask: 022Окончательные права доступа: 777 - 022 = 755 (rwxr-xr-x)
🚩Создание файла с umask 0022
1⃣Установка umask
umask 0022
2⃣Создание файла
touch myfile
3⃣Проверка прав доступа
ls -l myfile
Вывод
Права доступа: 644 (rw-r--r--)
-rw-r--r-- 1 user user 0 Jul 26 12:00 myfile
🚩Создание каталога с umask 0027
1⃣Установка umask
umask 0027
2⃣Создание каталога
mkdir mydir
3⃣Проверка прав доступа
ls -ld mydir
Вывод
Права доступа: 750 (rwxr-x---)
drwxr-x--- 2 user user 4096 Jul 26 12:00 mydir
🚩Дополнительные замечания
🟠umask в скриптах
Вы можете установить umask в скрипте для задания прав доступа по умолчанию для всех создаваемых файлов и каталогов.
#!/bin/bash
umask 027
touch file1
mkdir dir1
🟠Проверка прав доступа в разных ситуациях
Для файлов: По умолчанию права доступа 666 минус umask.
Для каталогов: По умолчанию права доступа 777 минус umask.
Ставь 👍 и забирай 📚 Базу знаний
🔥3
Пожизненная PRO подписка на easyoffer по цене одного года.
Акция до 20 февраля. Покупаешь сейчас один раз – пользуешься всю жизнь без лимита, включая все будущие функции.
Запланированные новые фичи на ближайшие пол года:
1. Агрегатор вакансий
2. Улучшение резюме, чтобы проходить ATS системы
3. Генерация уникального резюме и сопроводительного письма под вакансию
Покупай на https://easyoffer.ru/
Акция до 20 февраля. Покупаешь сейчас один раз – пользуешься всю жизнь без лимита, включая все будущие функции.
Запланированные новые фичи на ближайшие пол года:
1. Агрегатор вакансий
2. Улучшение резюме, чтобы проходить ATS системы
3. Генерация уникального резюме и сопроводительного письма под вакансию
Покупай на https://easyoffer.ru/
🤔1💊1
🤔 Что такое декларативный подход?
Декларативный подход — это способ описания желаемого конечного состояния, а не шагов, как до него добраться. Например, мы говорим, что "пакет nginx должен быть установлен", а не "скачай и установи nginx".
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍6
🤔 Что такое cherry pick?
Это команда в системе контроля версий Git, которая позволяет выбрать отдельные коммиты из одной ветки и применить их к другой ветке. Это полезно, когда вы хотите перенести конкретные изменения (коммиты) в текущую ветку, не выполняя слияние всей ветки.
🚩Когда используется
🟠Применение отдельных изменений
Когда нужно перенести конкретные исправления или функции из одной ветки в другую, не сливая все изменения из исходной ветки.
🟠Быстрое исправление ошибок
Когда найденное исправление в одной ветке нужно срочно применить в другой, например, из ветки разработки в ветку релиза.
🟠Избежание сложного слияния
Когда слияние всей ветки может привести к конфликтам или нежелательным изменениям,
🚩Примеры использования
🟠Простого `cherry-pick`
Перенос одного коммита из другой ветки.
🟠Применения нескольких коммитов
Перенос нескольких коммитов из другой ветки.
🟠Применения диапазона коммитов
Перенос диапазона коммитов из другой ветки.
🚩Разрешение конфликтов
1⃣Разрешите конфликты в файлах.
2⃣Добавьте изменения в индекс
3⃣Завершите процесс
🚩Прерывание
Если вы хотите прервать процесс
Ставь 👍 и забирай 📚 Базу знаний
Это команда в системе контроля версий Git, которая позволяет выбрать отдельные коммиты из одной ветки и применить их к другой ветке. Это полезно, когда вы хотите перенести конкретные изменения (коммиты) в текущую ветку, не выполняя слияние всей ветки.
🚩Когда используется
🟠Применение отдельных изменений
Когда нужно перенести конкретные исправления или функции из одной ветки в другую, не сливая все изменения из исходной ветки.
🟠Быстрое исправление ошибок
Когда найденное исправление в одной ветке нужно срочно применить в другой, например, из ветки разработки в ветку релиза.
🟠Избежание сложного слияния
Когда слияние всей ветки может привести к конфликтам или нежелательным изменениям,
cherry-pick позволяет аккуратно перенести только нужные коммиты.🚩Примеры использования
🟠Простого `cherry-pick`
Перенос одного коммита из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch
# Выполните cherry-pick коммита
git cherry-pick <commit-hash>
🟠Применения нескольких коммитов
Перенос нескольких коммитов из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch
# Выполните cherry-pick нескольких коммитов
git cherry-pick <commit-hash-1> <commit-hash-2> <commit-hash-3>
🟠Применения диапазона коммитов
Перенос диапазона коммитов из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch
# Выполните cherry-pick диапазона коммитов
git cherry-pick <start-commit-hash>..<end-commit-hash>
🚩Разрешение конфликтов
1⃣Разрешите конфликты в файлах.
2⃣Добавьте изменения в индекс
git add <filename>
3⃣Завершите процесс
cherry-pick git cherry-pick --continue
🚩Прерывание
Если вы хотите прервать процесс
cherry-pick, можно использовать командуgit cherry-pick --abort
Ставь 👍 и забирай 📚 Базу знаний
🔥3
🤔 Как сделать отказоустойчивый кластер Kubernetes?
Чтобы обеспечить отказоустойчивость:
1. Master-ноды в HA:
- Несколько control-plane-нод за балансировщиком (HAProxy, nginx, keepalived).
- etcd кластер в odd-количестве узлов (3+).
2. Worker-ноды:
- Несколько нод в разных зонах (для облаков — Availability Zones).
- Использование PodDisruptionBudget и antiAffinity.
3. Ingress и LoadBalancer:
- Балансировка между ingress-нодами.
- Использование внешнего L4-балансировщика.
4. Мониторинг и алерты:
- Prometheus + Alertmanager.
- Проверка готовности/живости, рестарт в случае сбоев.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
1. Master-ноды в HA:
- Несколько control-plane-нод за балансировщиком (HAProxy, nginx, keepalived).
- etcd кластер в odd-количестве узлов (3+).
2. Worker-ноды:
- Несколько нод в разных зонах (для облаков — Availability Zones).
- Использование PodDisruptionBudget и antiAffinity.
3. Ingress и LoadBalancer:
- Балансировка между ingress-нодами.
- Использование внешнего L4-балансировщика.
4. Мониторинг и алерты:
- Prometheus + Alertmanager.
- Проверка готовности/живости, рестарт в случае сбоев.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥6👍1
🤔 Что за протокол http, зачем он нужен?
HTTP (HyperText Transfer Protocol) — это протокол передачи данных в интернете. Он используется для обмена данными между клиентом (браузером) и сервером.
🚩Пример работы HTTP
Браузер отправляет запрос →
Сервер отвечает → HTML-страницей (
Браузер отображает страницу.
🚩Основные принципы HTTP
Клиент-серверная модель → браузер запрашивает, сервер отвечает.
Без состояния (stateless) → каждый запрос независим (нет сессий).
Текстовый протокол → данные передаются в читаемом формате.
🚩Структура HTTP-запроса
Пример запроса от браузера к серверу
Ставь 👍 и забирай 📚 Базу знаний
HTTP (HyperText Transfer Protocol) — это протокол передачи данных в интернете. Он используется для обмена данными между клиентом (браузером) и сервером.
🚩Пример работы HTTP
Браузер отправляет запрос →
"GET /index.html HTTP/1.1". Сервер отвечает → HTML-страницей (
200 OK). Браузер отображает страницу.
🚩Основные принципы HTTP
Клиент-серверная модель → браузер запрашивает, сервер отвечает.
Без состояния (stateless) → каждый запрос независим (нет сессий).
Текстовый протокол → данные передаются в читаемом формате.
🚩Структура HTTP-запроса
Пример запроса от браузера к серверу
GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Ставь 👍 и забирай 📚 Базу знаний
🤔 За счёт чего достигается завершение пода с определённой скоростью и по таймингам?
Контролируется через:
- terminationGracePeriodSeconds — время ожидания graceful shutdown перед SIGKILL.
- PreStop Hook — команда, выполняемая перед остановкой.
- Liveness/Readiness Probes — позволяют избежать остановки здоровых подов.
- lifecycle хуки — логика перед/после завершения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- terminationGracePeriodSeconds — время ожидания graceful shutdown перед SIGKILL.
- PreStop Hook — команда, выполняемая перед остановкой.
- Liveness/Readiness Probes — позволяют избежать остановки здоровых подов.
- lifecycle хуки — логика перед/после завершения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как дебажить поды в Kubernetes?
Когда под (Pod) не работает или ведёт себя странно, нужно уметь его дебажить.
🟠Проверить статус пода
Сначала смотрим, работает ли под вообще
🟠Посмотреть логи контейнера
Если под запустился, но работает странно, смотрим логи:
Если в поде несколько контейнеров:
Если под перезапускается, а нам нужны старые логи:
🟠Проверить события (`describe`)
Смотрим подробную информацию о поде:
🟠Зайти внутрь контейнера (`exec`)
Если под запущен, можно подключиться внутрь и посмотреть файлы, процессы:
Если в контейнере есть только
Полезные команды внутри контейнера:
🟠Проверить манифест пода (`get pod -o yaml`)
Если под ведёт себя странно, можно посмотреть его полное описание:
🟠Проверить ресурсы (describe node)
Иногда под не запускается из-за нехватки CPU или памяти. Проверяем узел (
Если проблема с ресурсами, будет что-то вроде:
🟠Проверить сеть (`nslookup`, `ping`, `curl`)
Если под не может достучаться до сервиса, тестируем сеть:
🟠Дебажить с помощью `kubectl debug` (Kubernetes 1.23+)
Если под не стартует, можно запустить дебажный контейнер
Ставь 👍 и забирай 📚 Базу знаний
Когда под (Pod) не работает или ведёт себя странно, нужно уметь его дебажить.
🟠Проверить статус пода
Сначала смотрим, работает ли под вообще
kubectl get pods
🟠Посмотреть логи контейнера
Если под запустился, но работает странно, смотрим логи:
kubectl logs pod-name
Если в поде несколько контейнеров:
kubectl logs pod-name -c container-name
Если под перезапускается, а нам нужны старые логи:
kubectl logs pod-name --previous
🟠Проверить события (`describe`)
Смотрим подробную информацию о поде:
kubectl describe pod pod-name
🟠Зайти внутрь контейнера (`exec`)
Если под запущен, можно подключиться внутрь и посмотреть файлы, процессы:
kubectl exec -it pod-name -- /bin/sh
Если в контейнере есть только
bash: kubectl exec -it pod-name -- /bin/bash
Полезные команды внутри контейнера:
ps aux # Смотрим запущенные процессы
netstat -tulnp # Проверяем открытые порты
env # Проверяем переменные окружения
cat /etc/resolv.conf # Проверяем DNS
🟠Проверить манифест пода (`get pod -o yaml`)
Если под ведёт себя странно, можно посмотреть его полное описание:
kubectl get pod pod-name -o yaml
🟠Проверить ресурсы (describe node)
Иногда под не запускается из-за нехватки CPU или памяти. Проверяем узел (
node): kubectl describe node node-name
Если проблема с ресурсами, будет что-то вроде:
Warning FailedScheduling insufficient memory
🟠Проверить сеть (`nslookup`, `ping`, `curl`)
Если под не может достучаться до сервиса, тестируем сеть:
kubectl exec -it pod-name -- nslookup service-name
kubectl exec -it pod-name -- ping 8.8.8.8
kubectl exec -it pod-name -- curl http://service-name:8080
🟠Дебажить с помощью `kubectl debug` (Kubernetes 1.23+)
Если под не стартует, можно запустить дебажный контейнер
kubectl debug pod-name -it --image=busybox
Ставь 👍 и забирай 📚 Базу знаний
🔥4
🤔 Какие технологии написания есть?
Могут быть:
- Скриптовые: Python, Bash, PowerShell;
- Объектно-ориентированные: Java, C#, C++;
- Функциональные: Scala, Haskell, Elixir;
- Декларативные: YAML, JSON, Terraform, SQL.
Выбор зависит от задачи и среды исполнения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Могут быть:
- Скриптовые: Python, Bash, PowerShell;
- Объектно-ориентированные: Java, C#, C++;
- Функциональные: Scala, Haskell, Elixir;
- Декларативные: YAML, JSON, Terraform, SQL.
Выбор зависит от задачи и среды исполнения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊9
🤔 Как linux выбирает, какой из процессов завершить?
Она использует механизм, известный как OOM Killer (убийца процессов при нехватке памяти), для завершения процессов с целью освобождения памяти. Выбор процесса для завершения базируется на ряде критериев, чтобы минимизировать влияние на работу системы.
🚩Как работает OOM Killer?
🟠Очки OOM (OOM Score)
Каждому процессу присваиваются очки OOM, которые рассчитываются на основе нескольких факторов, таких как: Объем памяти, используемой процессом. Приоритет процесса. Важность процесса для системы (например, системные демоны имеют более низкие очки).
🟠Формула расчета OOM Score
Основной фактор при расчете очков - это объем потребляемой процессом памяти. Чем больше памяти потребляет процесс, тем выше его OOM Score. Операционная система также учитывает приоритет процесса (nice value) и некоторые другие параметры.
🟠Принудительное завершение
Процесс с наибольшим OOM Score считается наименее критичным для системы и завершается первым.
🚩Пример расчета OOM Score
🟠Вот пример того, как может быть рассчитан OOM Score (упрощенный)
Процесс A использует 1 ГБ памяти.
Процесс B использует 2 ГБ памяти.
Процесс C использует 500 МБ памяти, но это критический системный процесс.
🟠OOM Score для этих процессов может выглядеть так
Процесс A: 300
Процесс B: 600
Процесс C: 100 (низкий, так как процесс критический)
🚩Настройка OOM Killer
Администраторы могут влиять на работу OOM Killer, настраивая параметры OOM Score для конкретных процессов с помощью файлов в каталоге
🚩Логирование и мониторинг
При срабатывании OOM Killer соответствующие сообщения записываются в системный журнал (обычно
Ставь 👍 и забирай 📚 Базу знаний
Она использует механизм, известный как OOM Killer (убийца процессов при нехватке памяти), для завершения процессов с целью освобождения памяти. Выбор процесса для завершения базируется на ряде критериев, чтобы минимизировать влияние на работу системы.
🚩Как работает OOM Killer?
🟠Очки OOM (OOM Score)
Каждому процессу присваиваются очки OOM, которые рассчитываются на основе нескольких факторов, таких как: Объем памяти, используемой процессом. Приоритет процесса. Важность процесса для системы (например, системные демоны имеют более низкие очки).
🟠Формула расчета OOM Score
Основной фактор при расчете очков - это объем потребляемой процессом памяти. Чем больше памяти потребляет процесс, тем выше его OOM Score. Операционная система также учитывает приоритет процесса (nice value) и некоторые другие параметры.
🟠Принудительное завершение
Процесс с наибольшим OOM Score считается наименее критичным для системы и завершается первым.
🚩Пример расчета OOM Score
🟠Вот пример того, как может быть рассчитан OOM Score (упрощенный)
Процесс A использует 1 ГБ памяти.
Процесс B использует 2 ГБ памяти.
Процесс C использует 500 МБ памяти, но это критический системный процесс.
🟠OOM Score для этих процессов может выглядеть так
Процесс A: 300
Процесс B: 600
Процесс C: 100 (низкий, так как процесс критический)
🚩Настройка OOM Killer
Администраторы могут влиять на работу OOM Killer, настраивая параметры OOM Score для конкретных процессов с помощью файлов в каталоге
/proc. Например, для изменения приоритета процесса:echo -1000 > /proc/<PID>/oom_score_adj
🚩Логирование и мониторинг
При срабатывании OOM Killer соответствующие сообщения записываются в системный журнал (обычно
/var/log/syslog или /var/log/messages), что позволяет администраторам анализировать причины и предпринимать меры по предотвращению в будущем.Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Что такое SRE, чем отличается от DevOps?
- SRE (Site Reliability Engineering) — инженерная практика от Google.
- Фокус на доступности, стабильности, SLO, SLA.
- Работает с ошибками, алертами, инцидентами.
- DevOps — культурный подход, объединяющий разработку и эксплуатацию.
SRE — это инженерная реализация DevOps, с акцентом на метрики и надёжность.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- SRE (Site Reliability Engineering) — инженерная практика от Google.
- Фокус на доступности, стабильности, SLO, SLA.
- Работает с ошибками, алертами, инцидентами.
- DevOps — культурный подход, объединяющий разработку и эксплуатацию.
SRE — это инженерная реализация DevOps, с акцентом на метрики и надёжность.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3🔥3
🤔 Сколько часов живёт один вал Prometeus CICD?
Вал (или "валидность данных") в Prometheus определяется настройками временного диапазона хранения данных. Обычно данные в Prometheus живут столько, сколько задано в параметре
🟠По умолчанию
Если не указать параметр
🟠Как изменить время жизни данных
Вы можете настроить период хранения данных, передав значение параметра при запуске Prometheus:
CLI-параметр:
🟠Конфигурационный файл
Если Prometheus запускается как часть системы CI/CD через Docker Compose, Kubernetes или другой инструмент, параметр указывается в соответствующем разделе.
🚩Почему это важно?
🟠Оптимизация дискового пространства
Большие периоды хранения требуют больше дискового пространства. Если валидация данных больше не нужна, лучше очищать старые временные ряды.
🟠Баланс производительности
Длительное хранение может замедлить обработку запросов, особенно если используемые метрики застарелые или редко запрашиваются.
🟠Потребности CI/CD
Для CI/CD-пайплайнов обычно достаточно короткого периода (например, 7–15 дней), чтобы сохранять данные релевантными и свежими.
🟠Пример настройки в CI/CD контексте
Если вы хотите, чтобы метрики для CI/CD жили 12 часов (подходящий срок для проверки тестов и сборок), настройте
🚩Как проверить текущий срок хранения?
🟠В интерфейсе Prometheus
Перейдите на страницу
🟠Через командную строку
Проверьте журнал запуска Prometheus или конфигурационный файл.
Ставь 👍 и забирай 📚 Базу знаний
Вал (или "валидность данных") в Prometheus определяется настройками временного диапазона хранения данных. Обычно данные в Prometheus живут столько, сколько задано в параметре
--storage.tsdb.retention.time, который устанавливает период хранения временных рядов.🟠По умолчанию
Если не указать параметр
--storage.tsdb.retention.time, данные хранятся 15 дней. Это соответствует 360 часам.🟠Как изменить время жизни данных
Вы можете настроить период хранения данных, передав значение параметра при запуске Prometheus:
CLI-параметр:
prometheus --storage.tsdb.retention.time=30d
🟠Конфигурационный файл
Если Prometheus запускается как часть системы CI/CD через Docker Compose, Kubernetes или другой инструмент, параметр указывается в соответствующем разделе.
services:
prometheus:
image: prom/prometheus
command:
- '--storage.tsdb.retention.time=7d' # 7 дней (168 часов)
🚩Почему это важно?
🟠Оптимизация дискового пространства
Большие периоды хранения требуют больше дискового пространства. Если валидация данных больше не нужна, лучше очищать старые временные ряды.
🟠Баланс производительности
Длительное хранение может замедлить обработку запросов, особенно если используемые метрики застарелые или редко запрашиваются.
🟠Потребности CI/CD
Для CI/CD-пайплайнов обычно достаточно короткого периода (например, 7–15 дней), чтобы сохранять данные релевантными и свежими.
🟠Пример настройки в CI/CD контексте
Если вы хотите, чтобы метрики для CI/CD жили 12 часов (подходящий срок для проверки тестов и сборок), настройте
prometheus:
image: prom/prometheus
command:
- '--storage.tsdb.retention.time=12h'
🚩Как проверить текущий срок хранения?
🟠В интерфейсе Prometheus
Перейдите на страницу
/status → /status/flags, где можно увидеть значение параметра --storage.tsdb.retention.time.🟠Через командную строку
Проверьте журнал запуска Prometheus или конфигурационный файл.
Ставь 👍 и забирай 📚 Базу знаний
💊3🤔1
🤔 Что такое Continuous Deployment?
Это практика, при которой каждая успешная сборка автоматически разворачивается в прод, без ручного вмешательства. Подразумевает высокий уровень автоматизации, покрытие тестами и зрелость процессов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Это практика, при которой каждая успешная сборка автоматически разворачивается в прод, без ручного вмешательства. Подразумевает высокий уровень автоматизации, покрытие тестами и зрелость процессов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 В каких случаях используется multi stage?
Multi-stage (многоэтапная сборка) — это метод создания Docker-образов, позволяющий уменьшить их размер и повысить безопасность.
🚩Когда используется?
🟠Оптимизация размера образа
удаляем ненужные зависимости из финального образа.
🟠Безопасность
не включаем инструменты сборки в рабочий контейнер.
🟠Скорость деплоя
меньший образ быстрее скачивается и запускается.
🟠Кросс-компиляция
собираем приложение в одном окружении, а запускаем в другом.
🚩Пример использования Multi-stage в Docker
Допустим, у нас есть приложение на Go. Мы сначала компилируем его в одном контейнере, а затем создаем минимальный образ для запуска.
🚩Использование в React / Angular / Vue
При сборке фронтенда мы можем сначала установить зависимости и собрать проект, а затем развернуть его на
Ставь 👍 и забирай 📚 Базу знаний
Multi-stage (многоэтапная сборка) — это метод создания Docker-образов, позволяющий уменьшить их размер и повысить безопасность.
🚩Когда используется?
🟠Оптимизация размера образа
удаляем ненужные зависимости из финального образа.
🟠Безопасность
не включаем инструменты сборки в рабочий контейнер.
🟠Скорость деплоя
меньший образ быстрее скачивается и запускается.
🟠Кросс-компиляция
собираем приложение в одном окружении, а запускаем в другом.
🚩Пример использования Multi-stage в Docker
Допустим, у нас есть приложение на Go. Мы сначала компилируем его в одном контейнере, а затем создаем минимальный образ для запуска.
# Этап 1: сборка
FROM golang:1.20 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp
# Этап 2: минимальный образ для запуска
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /app/myapp .
CMD ["./myapp"]
🚩Использование в React / Angular / Vue
При сборке фронтенда мы можем сначала установить зависимости и собрать проект, а затем развернуть его на
nginx. # Этап 1: сборка приложения
FROM node:18 AS builder
WORKDIR /app
COPY package.json ./
RUN npm install
COPY . .
RUN npm run build
# Этап 2: деплой на nginx
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Какие элементы мониторинга вы знаете, из чего он состоит в большинстве своём?
Мониторинг включает:
- Сбор метрик (экспортёры, агенты, SNMP),
- Хранилище данных (TSDB: Prometheus, InfluxDB),
- Визуализацию (Grafana, Zabbix frontend),
- Алерты (Alertmanager, Email, Telegram),
- Логирование (ELK, Loki),
- Проверку доступности (Blackbox exporter, Pingdom),
- Систему трассировки (Jaeger, Zipkin).
Полноценный мониторинг — это не только метрики, но и трассировка, логи, алерты и дашборды.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Мониторинг включает:
- Сбор метрик (экспортёры, агенты, SNMP),
- Хранилище данных (TSDB: Prometheus, InfluxDB),
- Визуализацию (Grafana, Zabbix frontend),
- Алерты (Alertmanager, Email, Telegram),
- Логирование (ELK, Loki),
- Проверку доступности (Blackbox exporter, Pingdom),
- Систему трассировки (Jaeger, Zipkin).
Полноценный мониторинг — это не только метрики, но и трассировка, логи, алерты и дашборды.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1🔥1
🤔 Какой командой можно показать все работающие процессы на Linux?
Для отображения всех работающих процессов в Linux можно использовать несколько команд. Самые популярные из них:
🚩Команда `ps`
🟠`ps aux`
Показывает все процессы, запущенные в системе, включая пользователей и системные демоны.
🟠`ps -ef`
Альтернативный стиль вывода всех процессов с более детальной информацией.
🚩Команда `top`
Запуск
🚩Команда `htop`
Запуск
🚩Команда `pgrep`
Пример
🚩Команда `systemctl` (для сервисов)
Если вы хотите посмотреть системные службы
🚩Какую команду выбрать?
🟠Для быстрого снимка
🟠Для мониторинга в реальном времени
🟠Для поиска конкретного процесса
Ставь 👍 и забирай 📚 Базу знаний
Для отображения всех работающих процессов в Linux можно использовать несколько команд. Самые популярные из них:
ps, top, htop и pgrep. Каждая из них имеет свои особенности.🚩Команда `ps`
ps выводит снимок (snapshot) текущих процессов в момент выполнения команды.🟠`ps aux`
Показывает все процессы, запущенные в системе, включая пользователей и системные демоны.
ps aux
🟠`ps -ef`
Альтернативный стиль вывода всех процессов с более детальной информацией.
ps -ef
🚩Команда `top`
top — интерактивная утилита для отображения всех запущенных процессов в реальном времени. Вывод обновляется автоматически.Запуск
top
🚩Команда `htop`
htop — более современная и удобная версия top. Требуется предварительная установка:sudo apt install htop # Для Ubuntu/Debian
sudo yum install htop # Для CentOS/RHEL
Запуск
htop
🚩Команда `pgrep`
pgrep используется для поиска процессов по имени, но с дополнительными опциями можно вывести все процессы.Пример
pgrep -a ""
🚩Команда `systemctl` (для сервисов)
Если вы хотите посмотреть системные службы
systemctl list-units --type=service
🚩Какую команду выбрать?
🟠Для быстрого снимка
ps aux. 🟠Для мониторинга в реальном времени
top или htop. 🟠Для поиска конкретного процесса
pgrep <имя процесса>.Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что происходит в тот момент, когда вы набираете в браузере, например, google.com?
1. Выполняется DNS-запрос для получения IP-адреса сервера.
2. Устанавливается TCP-соединение с сервером.
3. При использовании HTTPS устанавливается TLS-соединение.
4. Браузер отправляет HTTP-запрос, сервер возвращает ответ.
5. Полученные данные рендерятся в браузере.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
2. Устанавливается TCP-соединение с сервером.
3. При использовании HTTPS устанавливается TLS-соединение.
4. Браузер отправляет HTTP-запрос, сервер возвращает ответ.
5. Полученные данные рендерятся в браузере.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍4🤔1
🤔 Как можно визуализировать логи?
Визуализация логов — это процесс представления лог-файлов в удобном графическом виде для более легкого анализа, поиска аномалий и устранения проблем. Для этого используются различные инструменты, которые собирают, агрегируют и отображают логи в виде графиков, дашбордов и диаграмм.
🚩Почему нужна визуализация логов?
🟠Упрощает анализ
вместо просмотра тысяч строк логов можно быстро увидеть тенденции и аномалии.
🟠Помогает в мониторинге
можно отслеживать изменения в режиме реального времени.
🟠Ускоряет диагностику проблем
легче выявить причину ошибки, если видеть всплески или изменения в логах.
🟠Облегчает работу с большими объемами данных
миллионы строк логов можно представить в виде сводных диаграмм.
🚩Какие инструменты используются?
🟠ELK Stack (Elasticsearch + Logstash + Kibana)
Logstash – собирает и обрабатывает логи.
Elasticsearch – хранит и индексирует логи для быстрого поиска.
Kibana – визуализирует данные, строит графики и дашборды.
Пример: Можно создать график с количеством ошибок 500 за последние 24 часа.
🟠Grafana + Loki (альтернатива ELK)
Loki – хранит и обрабатывает логи.
Grafana – строит красивые дашборды с логами и метриками.
Пример: Можно создать панель с последними логами приложений, используя
🟠Graylog
Обрабатывает логи, хранит их в Elasticsearch, строит графики и отправляет алерты.
Пример: Можно отфильтровать логи по уровню
🟠Datadog, Splunk, New Relic
Коммерческие решения с мощными инструментами аналитики логов.
Пример: Автоматическая корреляция логов с метриками системы.
🚩Простой пример работы с ELK
Logstash конфиг (сбор логов из файла)
Ставь 👍 и забирай 📚 Базу знаний
Визуализация логов — это процесс представления лог-файлов в удобном графическом виде для более легкого анализа, поиска аномалий и устранения проблем. Для этого используются различные инструменты, которые собирают, агрегируют и отображают логи в виде графиков, дашбордов и диаграмм.
🚩Почему нужна визуализация логов?
🟠Упрощает анализ
вместо просмотра тысяч строк логов можно быстро увидеть тенденции и аномалии.
🟠Помогает в мониторинге
можно отслеживать изменения в режиме реального времени.
🟠Ускоряет диагностику проблем
легче выявить причину ошибки, если видеть всплески или изменения в логах.
🟠Облегчает работу с большими объемами данных
миллионы строк логов можно представить в виде сводных диаграмм.
🚩Какие инструменты используются?
🟠ELK Stack (Elasticsearch + Logstash + Kibana)
Logstash – собирает и обрабатывает логи.
Elasticsearch – хранит и индексирует логи для быстрого поиска.
Kibana – визуализирует данные, строит графики и дашборды.
Пример: Можно создать график с количеством ошибок 500 за последние 24 часа.
🟠Grafana + Loki (альтернатива ELK)
Loki – хранит и обрабатывает логи.
Grafana – строит красивые дашборды с логами и метриками.
Пример: Можно создать панель с последними логами приложений, используя
tail-подобное обновление. 🟠Graylog
Обрабатывает логи, хранит их в Elasticsearch, строит графики и отправляет алерты.
Пример: Можно отфильтровать логи по уровню
ERROR и вывести их в виде диаграммы. 🟠Datadog, Splunk, New Relic
Коммерческие решения с мощными инструментами аналитики логов.
Пример: Автоматическая корреляция логов с метриками системы.
🚩Простой пример работы с ELK
Logstash конфиг (сбор логов из файла)
input {
file {
path => "/var/log/app.log"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
}
}Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Для чего нужны пробы в Kubernetes?
Пробы (probes) используются для определения состояния контейнера.
- Liveness — показывает, жив ли контейнер (если нет — будет перезапущен).
- Readiness — показывает, готов ли контейнер принимать трафик.
- Startup — определяет, когда приложение полностью загрузилось, особенно полезно при долгом старте.
Они помогают Kubernetes принимать решения о перезапуске, маршрутизации и health-чек.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- Liveness — показывает, жив ли контейнер (если нет — будет перезапущен).
- Readiness — показывает, готов ли контейнер принимать трафик.
- Startup — определяет, когда приложение полностью загрузилось, особенно полезно при долгом старте.
Они помогают Kubernetes принимать решения о перезапуске, маршрутизации и health-чек.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как сделать донастройку контейнера?
Донастройка контейнера может понадобиться, если:
Нужно изменить файлы конфигурации.
Установить дополнительные пакеты.
Задать переменные среды.
Подключить тома или сети.
Варианты донастройки: через Dockerfile, docker-compose, exec, тома и Entrypoint/CMD.
🟠Донастройка через Dockerfile (Лучший способ)
Если контейнер нужно модифицировать перед запуском, создаем свой
Собираем новый образ
🟠Донастройка через `docker-compose` (Гибкость)
Можно задать окружение, тома, команды.
Запуск
🟠Донастройка запущенного контейнера (`docker exec`)
Если контейнер уже работает, можно внести изменения прямо в него.
🟠Донастройка через тома (Volumes)
Если нужно изменять файлы без пересборки образа, подключаем тома.
🟠Использование `ENTRYPOINT` или `CMD`
Можно задать скрипт донастройки, который выполнится при старте контейнера.
В
Ставь 👍 и забирай 📚 Базу знаний
Донастройка контейнера может понадобиться, если:
Нужно изменить файлы конфигурации.
Установить дополнительные пакеты.
Задать переменные среды.
Подключить тома или сети.
Варианты донастройки: через Dockerfile, docker-compose, exec, тома и Entrypoint/CMD.
🟠Донастройка через Dockerfile (Лучший способ)
Если контейнер нужно модифицировать перед запуском, создаем свой
Dockerfile на основе существующего образа. FROM nginx:latest
COPY my-nginx.conf /etc/nginx/nginx.conf
CMD ["nginx", "-g", "daemon off;"]
Собираем новый образ
docker build -t my-nginx .
docker run -d -p 80:80 my-nginx
🟠Донастройка через `docker-compose` (Гибкость)
Можно задать окружение, тома, команды.
version: '3'
services:
db:
image: postgres:15
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: secret
POSTGRES_DB: mydb
volumes:
- ./custom-postgres.conf:/etc/postgresql/postgresql.conf
command: postgres -c config_file=/etc/postgresql/postgresql.conf
Запуск
docker-compose up -d
🟠Донастройка запущенного контейнера (`docker exec`)
Если контейнер уже работает, можно внести изменения прямо в него.
docker exec -it my-container bash
apt update && apt install -y vim
🟠Донастройка через тома (Volumes)
Если нужно изменять файлы без пересборки образа, подключаем тома.
docker run -d -p 80:80 -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf nginx
🟠Использование `ENTRYPOINT` или `CMD`
Можно задать скрипт донастройки, который выполнится при старте контейнера.
FROM postgres:15
COPY setup.sh /docker-entrypoint-initdb.d/setup.sh
RUN chmod +x /docker-entrypoint-initdb.d/setup.sh
В
setup.sh: #!/bin/bash
psql -U postgres -d mydb -c "CREATE TABLE test (id SERIAL PRIMARY KEY);"
Ставь 👍 и забирай 📚 Базу знаний