🤔 Какими средствами бэкапили виртуалки или куберовские сущности?
Для виртуалок — Veeam, Bacula, Proxmox Backup Server, VMware tools.
Для Kubernetes — Velero, Kasten K10, Restic, etcd backup. Также можно использовать kubectl get -o yaml для экспорта манифестов и pv snapshot-менеджеры.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Для виртуалок — Veeam, Bacula, Proxmox Backup Server, VMware tools.
Для Kubernetes — Velero, Kasten K10, Restic, etcd backup. Также можно использовать kubectl get -o yaml для экспорта манифестов и pv snapshot-менеджеры.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊2
🤔 Какие есть три вида монтирования в Docker?
1. Volumes — управляются самим Docker, хранятся в /var/lib/docker/volumes, удобны для долговременного хранения.
2. Bind mounts — указываются вручную, монтируют директорию с хоста, позволяют использовать локальные файлы.
3. tmpfs — размещаются в оперативной памяти, временные, очищаются после остановки контейнера.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
2. Bind mounts — указываются вручную, монтируют директорию с хоста, позволяют использовать локальные файлы.
3. tmpfs — размещаются в оперативной памяти, временные, очищаются после остановки контейнера.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3
🤔 Какие есть библиотеки для расширенного логирования на Python?
- loguru — очень удобная и расширяемая библиотека.
- structlog — для структурированного логирования (например, JSON-логи).
- logging + кастомные Handler и Formatter.
- Интеграция с sentry-sdk, graypy (Graylog), logstash_formatter.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- loguru — очень удобная и расширяемая библиотека.
- structlog — для структурированного логирования (например, JSON-логи).
- logging + кастомные Handler и Formatter.
- Интеграция с sentry-sdk, graypy (Graylog), logstash_formatter.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥3
🤔 Для чего используется ClickHouse?
ClickHouse — это колоночная база данных, оптимизированная для аналитических запросов на больших объёмах данных. Она отлично справляется с агрегациями, логированием, метриками и BI-отчётами. Применяется в системах мониторинга, аналитике событий, маркетинговых и финансовых системах.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
ClickHouse — это колоночная база данных, оптимизированная для аналитических запросов на больших объёмах данных. Она отлично справляется с агрегациями, логированием, метриками и BI-отчётами. Применяется в системах мониторинга, аналитике событий, маркетинговых и финансовых системах.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥5
🤔 Как сделать так, чтобы клиенты отдавали метрики в Prometheus?
На клиенте должен быть установлен экспортёр, который поднимает HTTP endpoint. Prometheus опрашивает этот endpoint по расписанию и сохраняет данные в своей TSDB (базе данных временных рядов).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
На клиенте должен быть установлен экспортёр, который поднимает HTTP endpoint. Prometheus опрашивает этот endpoint по расписанию и сохраняет данные в своей TSDB (базе данных временных рядов).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥2
🤔 Как посмотреть размер папки на диске?
Команда du -sh <путь к папке> показывает размер папки в человеко-читаемом формате.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍5
🤔 Как сделать rebase на main branch?
Это процесс перемещения текущей ветки поверх последних коммитов из main.
Нужно подтянуть свежую версию main, а затем переписать историю своей ветки, добавив свои коммиты поверх обновлённого main.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Это процесс перемещения текущей ветки поверх последних коммитов из main.
Нужно подтянуть свежую версию main, а затем переписать историю своей ветки, добавив свои коммиты поверх обновлённого main.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥3
🤔 Как убрать нагрузку с Database Server?
- Вынести кэш в Redis/Memcached;
- Реплицировать базу и направить SELECT-запросы на слейвы;
- Использовать шардинг;
- Оптимизировать запросы и индексы;
- Перевести тяжёлые отчёты в async-процессы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- Вынести кэш в Redis/Memcached;
- Реплицировать базу и направить SELECT-запросы на слейвы;
- Использовать шардинг;
- Оптимизировать запросы и индексы;
- Перевести тяжёлые отчёты в async-процессы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍6🤔1
🤔 С каким максимальным кол-ом адресов ОП может провзаимодействовать процессор?
Максимальное количество адресов оперативной памяти (ОП), с которыми может взаимодействовать процессор, зависит от ширины адресной шины процессора. Адресная шина определяет, сколько уникальных адресов памяти процессор может адресовать.
🚩Формула вычисления
Количество адресуемых ячеек памяти определяется по формуле:
\text{Максимальное количество адресов} = 2^{\text{ширина адресной шины (в битах)}}
🚩Примеры
🟠Процессор с 32-битной адресной шиной
Максимально возможное количество адресов:
2^{32} = 4,294,967,296 \, (\approx 4 \, \text{Гбайт})
🟠Процессор с 64-битной адресной шиной
Теоретический максимум
2^{64} = 18,446,744,073,709,551,616 \, (\approx 16 \, \text{эксабайт})
Однако современные процессоры обычно поддерживают меньше, например
Архитектура x86-64 (например, Intel и AMD): ограничена 48–57 битами для адресов памяти, что позволяет адресовать от 256 Тбайт до 128 Пбайт.
🚩Почему реальная адресуемая память меньше?
🟠Ограничения архитектуры
Производители процессоров могут использовать меньшее количество адресных линий, чтобы снизить сложность и стоимость. Например, современные 64-битные процессоры адресуют только часть 64-битного пространства (например, 48 бит).
🟠Ограничения ОЗУ
Даже если процессор поддерживает большое количество адресов, максимальная память ограничивается количеством слотов памяти и их емкостью на материнской плате.
🟠Системные резервы
Некоторые адреса зарезервированы для системных нужд (например, для ввода/вывода или BIOS).
Ставь 👍 и забирай 📚 Базу знаний
Максимальное количество адресов оперативной памяти (ОП), с которыми может взаимодействовать процессор, зависит от ширины адресной шины процессора. Адресная шина определяет, сколько уникальных адресов памяти процессор может адресовать.
🚩Формула вычисления
Количество адресуемых ячеек памяти определяется по формуле:
\text{Максимальное количество адресов} = 2^{\text{ширина адресной шины (в битах)}}
🚩Примеры
🟠Процессор с 32-битной адресной шиной
Максимально возможное количество адресов:
2^{32} = 4,294,967,296 \, (\approx 4 \, \text{Гбайт})
🟠Процессор с 64-битной адресной шиной
Теоретический максимум
2^{64} = 18,446,744,073,709,551,616 \, (\approx 16 \, \text{эксабайт})
Однако современные процессоры обычно поддерживают меньше, например
Архитектура x86-64 (например, Intel и AMD): ограничена 48–57 битами для адресов памяти, что позволяет адресовать от 256 Тбайт до 128 Пбайт.
🚩Почему реальная адресуемая память меньше?
🟠Ограничения архитектуры
Производители процессоров могут использовать меньшее количество адресных линий, чтобы снизить сложность и стоимость. Например, современные 64-битные процессоры адресуют только часть 64-битного пространства (например, 48 бит).
🟠Ограничения ОЗУ
Даже если процессор поддерживает большое количество адресов, максимальная память ограничивается количеством слотов памяти и их емкостью на материнской плате.
🟠Системные резервы
Некоторые адреса зарезервированы для системных нужд (например, для ввода/вывода или BIOS).
Ставь 👍 и забирай 📚 Базу знаний
🤔 Как понять, что это за ветка завалилась, если нет buildinfo?
- Использовать переменные CI/CD (CI_COMMIT_REF_NAME).
- Посмотреть в git log последнюю ветку.
- Вручную извлечь информацию из репозитория:
- git reflog
- git branch -r --contains <commit>
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- Использовать переменные CI/CD (CI_COMMIT_REF_NAME).
- Посмотреть в git log последнюю ветку.
- Вручную извлечь информацию из репозитория:
- git reflog
- git branch -r --contains <commit>
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие есть лучшие практики в использовании инструкции add и copy?
🚩Лучшие практики по использованию `COPY` и `ADD`
🟠Используйте `COPY` вместо `ADD`, если не нужно распаковывать архивы
Плохо (избыточное использование
Хорошо (явное распаковывание в
🟠Минимизируйте число `COPY` и `ADD`, чтобы уменьшить размер образа
Плохо (копируем всё без исключений)
Хорошо (копируем только нужные файлы)
Добавьте
🟠Копируйте только изменяемые файлы, чтобы ускорить кэширование
Плохо (изменение кода приводит к пересборке зависимостей)**
Хорошо (сначала зависимости, потом код)
🟠Не используйте `ADD` для загрузки файлов из интернета
Плохо (
🟠Хорошо (используем
Ставь 👍 и забирай 📚 Базу знаний
ADD и COPY — это инструкции Dockerfile, которые копируют файлы в контейнер. Их использование влияет на размер образа, безопасность и производительность сборки. 🚩Лучшие практики по использованию `COPY` и `ADD`
🟠Используйте `COPY` вместо `ADD`, если не нужно распаковывать архивы
Плохо (избыточное использование
ADD) ADD app.tar.gz /app/
Хорошо (явное распаковывание в
RUN) COPY app.tar.gz /tmp/
RUN tar -xzf /tmp/app.tar.gz -C /app && rm /tmp/app.tar.gz
🟠Минимизируйте число `COPY` и `ADD`, чтобы уменьшить размер образа
Плохо (копируем всё без исключений)
COPY . /app
Хорошо (копируем только нужные файлы)
COPY src/ /app/src/
COPY requirements.txt /app/
Добавьте
.dockerignore.git
node_modules
__pycache__
*.log
🟠Копируйте только изменяемые файлы, чтобы ускорить кэширование
Плохо (изменение кода приводит к пересборке зависимостей)**
COPY . /app
RUN pip install -r /app/requirements.txt
Хорошо (сначала зависимости, потом код)
COPY requirements.txt /app/
RUN pip install -r /app/requirements.txt
COPY src/ /app/src/
🟠Не используйте `ADD` для загрузки файлов из интернета
Плохо (
ADD загружает файл, но не кэшируется) ADD https://example.com/file.tar.gz /tmp/
🟠Хорошо (используем
RUN curl + COPY) RUN curl -L -o /tmp/file.tar.gz https://example.com/file.tar.gz
COPY file.tar.gz /app/
Ставь 👍 и забирай 📚 Базу знаний
👍5
🤔 Как получить секреты?
- Через CI/CD Secret Store (GitLab, Jenkins, ArgoCD).
- Через vault или doppler.
- Через Kubernetes Secrets (kubectl get secret + decode).
- Локально — из .env, dotenv, или переменных окружения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- Через CI/CD Secret Store (GitLab, Jenkins, ArgoCD).
- Через vault или doppler.
- Через Kubernetes Secrets (kubectl get secret + decode).
- Локально — из .env, dotenv, или переменных окружения.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥3👍2
🤔 Зачем нужны теги в Ansible?
Теги в Ansible позволяют запускать только определенные задачи или роли, а не весь плейбук. Это ускоряет выполнение и упрощает управление конфигурацией.
🚩Когда использовать теги?
🟠Запуск только нужных задач
если плейбук содержит много шагов, можно выполнить только нужные.
🟠Разделение задач по категориям
например, отдельно установка, обновление, настройка сервиса.
🟠Оптимизация CI/CD
ускорение развертывания, выполняя только измененные задачи.
🚩Как использовать теги?
🟠Теги в задачах (`tasks`)
Простой пример – установка и перезапуск Nginx
Запуск только установки (
Запуск только перезапуска (
🟠Теги в ролях (`roles`)
Если у вас несколько ролей, можно запускать только нужную:
Запуск только роли
🟠Исключение тегов (`--skip-tags`)
Можно пропустить выполнение определенных задач
Ставь 👍 и забирай 📚 Базу знаний
Теги в Ansible позволяют запускать только определенные задачи или роли, а не весь плейбук. Это ускоряет выполнение и упрощает управление конфигурацией.
🚩Когда использовать теги?
🟠Запуск только нужных задач
если плейбук содержит много шагов, можно выполнить только нужные.
🟠Разделение задач по категориям
например, отдельно установка, обновление, настройка сервиса.
🟠Оптимизация CI/CD
ускорение развертывания, выполняя только измененные задачи.
🚩Как использовать теги?
🟠Теги в задачах (`tasks`)
Простой пример – установка и перезапуск Nginx
yaml
- name: Установить Nginx
apt:
name: nginx
state: present
tags: install
- name: Перезапустить Nginx
service:
name: nginx
state: restarted
tags: restart
Запуск только установки (
install) sh
ansible-playbook playbook.yml --tags install
Запуск только перезапуска (
restart) sh
ansible-playbook playbook.yml --tags restart
🟠Теги в ролях (`roles`)
Если у вас несколько ролей, можно запускать только нужную:
yaml
- hosts: all
roles:
- { role: nginx, tags: web }
- { role: database, tags: db }
Запуск только роли
database sh
ansible-playbook playbook.yml --tags db
🟠Исключение тегов (`--skip-tags`)
Можно пропустить выполнение определенных задач
sh
ansible-playbook playbook.yml --skip-tags restart
Ставь 👍 и забирай 📚 Базу знаний
👍7💊1
🤔 Что такое init-контейнер?
Init-контейнер запускается перед основным контейнером в поде.
1. Используется для выполнения подготовительных задач, таких как загрузка данных или настройка окружения.
2. Гарантирует, что основное приложение начнёт работу в подготовленном состоянии.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Init-контейнер запускается перед основным контейнером в поде.
1. Используется для выполнения подготовительных задач, таких как загрузка данных или настройка окружения.
2. Гарантирует, что основное приложение начнёт работу в подготовленном состоянии.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3🔥3
🤔 Как примонтировать диск?
Чтобы использовать новый диск в Linux, его нужно разметить, создать файловую систему и примонтировать.
🚩Разметить диск (`fdisk`)
Запустить
🚩Создать файловую систему (`mkfs`)
Форматировать раздел в
Если нужен
🚩Автоматическое монтирование при загрузке (`/etc/fstab`)
Найти
Вывод
Добавить в
Применить изменения
Ставь 👍 и забирай 📚 Базу знаний
Чтобы использовать новый диск в Linux, его нужно разметить, создать файловую систему и примонтировать.
🚩Разметить диск (`fdisk`)
Запустить
fdisk для диска sdb sudo fdisk /dev/sdb
🚩Создать файловую систему (`mkfs`)
Форматировать раздел в
ext4sudo mkfs.ext4 /dev/sdb1
Если нужен
xfssudo mkfs.xfs /dev/sdb1
🚩Автоматическое монтирование при загрузке (`/etc/fstab`)
Найти
UUID дискаblkid /dev/sdb1
Вывод
/dev/sdb1: UUID="12345678-abcd-1234-efgh-56789abcdef0" TYPE="ext4"
Добавить в
/etc/fstab echo 'UUID=12345678-abcd-1234-efgh-56789abcdef0 /mnt/data ext4 defaults 0 2' | sudo tee -a /etc/fstab
Применить изменения
sudo mount -a
Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Что лучше: Fluentd или Logstash?
Выбор зависит от контекста. В Kubernetes-средах чаще выбирают Fluentd из-за лёгкости и нативной поддержки логов. Logstash лучше подходит для централизованной обработки сложных логов в инфраструктурах, где важны мощные фильтры и grok-парсеры.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Выбор зависит от контекста. В Kubernetes-средах чаще выбирают Fluentd из-за лёгкости и нативной поддержки логов. Logstash лучше подходит для централизованной обработки сложных логов в инфраструктурах, где важны мощные фильтры и grok-парсеры.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Что такое шебанг?
Это спецсимволы в начале скрипта, указывающие, каким интерпретатором следует запускать файл. Он необходим для правильного исполнения скрипта в UNIX-подобных системах.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Это спецсимволы в начале скрипта, указывающие, каким интерпретатором следует запускать файл. Он необходим для правильного исполнения скрипта в UNIX-подобных системах.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍5🔥2
🤔 Можно ли на лету изменить настройки dns контейнре через cli?
Нет, нельзя изменить DNS у уже запущенного контейнера напрямую через CLI. Но есть обходные способы!
🚩Остановка и перезапуск контейнера с новыми DNS
Самый надежный способ — перезапустить контейнер с нужными DNS-серверами
Или задать DNS через
🚩Изменение `/etc/resolv.conf` внутри контейнера (может сработать)
Можно изменить DNS вручную внутри работающего контейнера
🚩Использование `network connect` (только для user-defined сетей)
Можно подключить контейнер к другой сети с нужными DNS:
🚩Изменение настроек `systemd-resolved` (для контейнеров с `host`-сетью)
Если контейнер использует сеть хоста (
Ставь 👍 и забирай 📚 Базу знаний
Нет, нельзя изменить DNS у уже запущенного контейнера напрямую через CLI. Но есть обходные способы!
🚩Остановка и перезапуск контейнера с новыми DNS
Самый надежный способ — перезапустить контейнер с нужными DNS-серверами
docker run --dns 8.8.8.8 --dns 8.8.4.4 -d my_container
Или задать DNS через
docker network docker network create mynet --dns=1.1.1.1
docker run --net=mynet -d my_container
🚩Изменение `/etc/resolv.conf` внутри контейнера (может сработать)
Можно изменить DNS вручную внутри работающего контейнера
docker exec -it my_container sh
echo "nameserver 1.1.1.1" > /etc/resolv.conf
🚩Использование `network connect` (только для user-defined сетей)
Можно подключить контейнер к другой сети с нужными DNS:
docker network create mynewnet --dns=8.8.8.8
docker network connect mynewnet my_container
🚩Изменение настроек `systemd-resolved` (для контейнеров с `host`-сетью)
Если контейнер использует сеть хоста (
--network host), можно поменять DNS на хосте: resolvectl dns eth0 8.8.8.8
Ставь 👍 и забирай 📚 Базу знаний
👍3
🤔 Как понять, что микросервисы работают исправно?
Это определяется по:
- метрикам и мониторингу (нагрузка, количество ошибок, время отклика);
- health-check endpoint (возвращает статус);
- логам (отслеживание ошибок и предупреждений);
- тестам в проде (canary, smoke-тесты);
- трассировке запросов (end-to-end следование пути данных).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Это определяется по:
- метрикам и мониторингу (нагрузка, количество ошибок, время отклика);
- health-check endpoint (возвращает статус);
- логам (отслеживание ошибок и предупреждений);
- тестам в проде (canary, smoke-тесты);
- трассировке запросов (end-to-end следование пути данных).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥3
🤔 Чем отличаются друг от друга GET и POST?
- GET передаёт данные через URL, ограничен по длине, используется для чтения, кэшируется.
- POST передаёт данные в теле запроса, не кэшируется, подходит для создания и отправки чувствительных данных (форм, файлов).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
- GET передаёт данные через URL, ограничен по длине, используется для чтения, кэшируется.
- POST передаёт данные в теле запроса, не кэшируется, подходит для создания и отправки чувствительных данных (форм, файлов).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥2
🤔 Для чего нужны инструменты управления конфигурацией (Ansible / Puppet / Chef / Salt)?
Они автоматизируют:
- настройку серверов;
- установку пакетов;
- деплой;
- управление инфраструктурой.
Позволяют описывать инфраструктуру как код, упрощают масштабирование и поддержание консистентности.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Они автоматизируют:
- настройку серверов;
- установку пакетов;
- деплой;
- управление инфраструктурой.
Позволяют описывать инфраструктуру как код, упрощают масштабирование и поддержание консистентности.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний