DevOps | Вопросы собесов
5.54K subscribers
40 photos
1.44K links
Сайт: https://easyoffer.ru/
Все каналы: t.me/+xGeAw6ckJ4liYzQy

Контакт для рекламы: @easyoffer_adv
Download Telegram
🤔 Как сделать так, чтобы клиенты отдавали метрики в Prometheus?

На клиенте должен быть установлен экспортёр, который поднимает HTTP endpoint. Prometheus опрашивает этот endpoint по расписанию и сохраняет данные в своей TSDB (базе данных временных рядов).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥2
🤔 Как посмотреть размер папки на диске?

Команда du -sh <путь к папке> показывает размер папки в человеко-читаемом формате.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍5
🤔 Как сделать rebase на main branch?

Это процесс перемещения текущей ветки поверх последних коммитов из main.
Нужно подтянуть свежую версию main, а затем переписать историю своей ветки, добавив свои коммиты поверх обновлённого main.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥3
🤔 Как убрать нагрузку с Database Server?

- Вынести кэш в 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).

Ставь 👍 и забирай 📚 Базу знаний
🤔 Как понять, что это за ветка завалилась, если нет buildinfo?

- Использовать переменные CI/CD (CI_COMMIT_REF_NAME).
- Посмотреть в git log последнюю ветку.
- Вручную извлечь информацию из репозитория:
- git reflog
- git branch -r --contains <commit>


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Какие есть лучшие практики в использовании инструкции add и copy?

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, или переменных окружения.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥3👍2
🤔 Зачем нужны теги в Ansible?

Теги в 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. Гарантирует, что основное приложение начнёт работу в подготовленном состоянии.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3🔥3
🤔 Как примонтировать диск?

Чтобы использовать новый диск в Linux, его нужно разметить, создать файловую систему и примонтировать.

🚩Разметить диск (`fdisk`)

Запустить fdisk для диска sdb
sudo fdisk /dev/sdb


🚩Создать файловую систему (`mkfs`)

Форматировать раздел в ext4
sudo mkfs.ext4 /dev/sdb1


Если нужен xfs
sudo 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-парсеры.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Что такое шебанг?

Это спецсимволы в начале скрипта, указывающие, каким интерпретатором следует запускать файл. Он необходим для правильного исполнения скрипта в UNIX-подобных системах.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍5🔥2
🤔 Можно ли на лету изменить настройки dns контейнре через cli?

Нет, нельзя изменить 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 следование пути данных).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥3
🤔 Чем отличаются друг от друга GET и POST?

- GET передаёт данные через URL, ограничен по длине, используется для чтения, кэшируется.
- POST передаёт данные в теле запроса, не кэшируется, подходит для создания и отправки чувствительных данных (форм, файлов).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥2
🤔 Для чего нужны инструменты управления конфигурацией (Ansible / Puppet / Chef / Salt)?

Они автоматизируют:
- настройку серверов;
- установку пакетов;
- деплой;
- управление инфраструктурой.
Позволяют описывать инфраструктуру как код, упрощают масштабирование и поддержание консистентности.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Зачем нужен OOM

OOM (Out Of Memory) — это механизм, срабатывающий, когда системе не хватает памяти для работы, что приводит к завершению процессов с высокой нагрузкой. Он защищает систему от полного исчерпания памяти, освобождая ресурсы, чтобы другие процессы могли продолжать работать. OOM-killer используется для выбора и завершения наименее критичных процессов, предотвращая полное зависание системы.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍4
🤔 Как посмотреть логи в уже работающем контейнере?

Чтобы посмотреть логи работающего контейнера в 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) получают более высокий класс. Это влияет на поведение системы при давлении — в первую очередь удаляются те поды, у которых нет чётко заданных лимитов.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍3💊1
🤔 Как проверить лимит SQL Database?

Используются команды или интерфейсы мониторинга, чтобы узнать:
- количество подключений;
- использование CPU/IO;
- количество операций на запись/чтение;
- объём занимаемого пространства;
- текущую нагрузку и лимиты по плану (если облако).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊3👍1