🤔 Как сделать так, чтобы клиенты отдавали метрики в 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)?
Они автоматизируют:
- настройку серверов;
- установку пакетов;
- деплой;
- управление инфраструктурой.
Позволяют описывать инфраструктуру как код, упрощают масштабирование и поддержание консистентности.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Они автоматизируют:
- настройку серверов;
- установку пакетов;
- деплой;
- управление инфраструктурой.
Позволяют описывать инфраструктуру как код, упрощают масштабирование и поддержание консистентности.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Зачем нужен OOM
OOM (Out Of Memory) — это механизм, срабатывающий, когда системе не хватает памяти для работы, что приводит к завершению процессов с высокой нагрузкой. Он защищает систему от полного исчерпания памяти, освобождая ресурсы, чтобы другие процессы могли продолжать работать. OOM-killer используется для выбора и завершения наименее критичных процессов, предотвращая полное зависание системы.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍4
🤔 Как посмотреть логи в уже работающем контейнере?
Чтобы посмотреть логи работающего контейнера в Docker, используйте команду:
или
🚩Основные флаги
🟠`-f` (follow)
следить за логами в реальном времени (как
🟠`--tail N`
показать только последние N строк:
🟠`-t` (timestamps)
добавить метки времени:
🚩Просмотр логов через `docker-compose`
Если контейнер запущен через
или для конкретного сервиса:
🚩Логи для контейнера с systemd (если Docker пишет в `journald`)
Ставь 👍 и забирай 📚 Базу знаний
Чтобы посмотреть логи работающего контейнера в Docker, используйте команду:
docker logs <container_id>
или
docker logs <container_name>
🚩Основные флаги
🟠`-f` (follow)
следить за логами в реальном времени (как
tail -f): docker logs -f <container_id>
🟠`--tail N`
показать только последние N строк:
docker logs --tail 100 <container_id>
🟠`-t` (timestamps)
добавить метки времени:
docker logs -t <container_id>
🚩Просмотр логов через `docker-compose`
Если контейнер запущен через
docker-compose, можно использовать: docker-compose logs -f
или для конкретного сервиса:
docker-compose logs -f <service_name>
🚩Логи для контейнера с systemd (если Docker пишет в `journald`)
journalctl -u docker -f
Ставь 👍 и забирай 📚 Базу знаний
👍3
🤔 Что такое Quality of Service (QoS) в Kubernetes?
QoS определяет приоритет пода в ситуации, когда не хватает ресурсов. Поды с лучшими ресурсными гарантиями (и явно указанными requests и limits) получают более высокий класс. Это влияет на поведение системы при давлении — в первую очередь удаляются те поды, у которых нет чётко заданных лимитов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
QoS определяет приоритет пода в ситуации, когда не хватает ресурсов. Поды с лучшими ресурсными гарантиями (и явно указанными requests и limits) получают более высокий класс. Это влияет на поведение системы при давлении — в первую очередь удаляются те поды, у которых нет чётко заданных лимитов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3💊1
🤔 Как проверить лимит SQL Database?
Используются команды или интерфейсы мониторинга, чтобы узнать:
- количество подключений;
- использование CPU/IO;
- количество операций на запись/чтение;
- объём занимаемого пространства;
- текущую нагрузку и лимиты по плану (если облако).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Используются команды или интерфейсы мониторинга, чтобы узнать:
- количество подключений;
- использование CPU/IO;
- количество операций на запись/чтение;
- объём занимаемого пространства;
- текущую нагрузку и лимиты по плану (если облако).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊3👍1