ru
Feedback
DevOps | Вопросы собесов

DevOps | Вопросы собесов

Открыть в Telegram
5 510
Подписчики
-224 часа
-47 дней
-330 день
Архив постов
🤔 Как в линуксе посмотреть список дескрипторов файлов? В Linux список дескрипторов файлов можно посмотреть, используя утилиты и команды, которые позволяют работать с процессами и их открытыми файлами. Основным методом является использование файловой системы /proc, которая содержит информацию о процессах, включая их открытые файловые дескрипторы. 🚩Основные способы 🟠Команда `ls` в каталоге `/proc/[PID]/fd` Каждый процесс в Linux имеет свой подкаталог в /proc с идентификатором процесса (PID). В подкаталоге fd хранятся ссылки на открытые дескрипторы файлов.
ls -l /proc/$(pidof <имя_процесса>)/fd
Вывод
lrwx------ 1 user user 64 Dec 23 12:00 0 -> /dev/pts/0
lrwx------ 1 user user 64 Dec 23 12:00 1 -> /dev/pts/0
lrwx------ 1 user user 64 Dec 23 12:00 2 -> /dev/pts/0
🟠Использование `lsof` Команда lsof (list open files) отображает список всех открытых файлов в системе.
lsof -p <PID>
Пример для всех процессов
lsof
Вывод
COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash      1234 user  cwd    DIR  8,1     4096  256 /home/user
bash      1234 user  rtd    DIR  8,1     4096    2 /
bash      1234 user    0u   CHR  136,0       0    3 /dev/pts/0
bash      1234 user    1u   CHR  136,0       0    3 /dev/pts/0
bash      1234 user    2u   CHR  136,0       0    3 /dev/pts/0
🟠Использование `lsfd` Утилита lsfd (из пакета util-linux) удобна для просмотра файловых дескрипторов.
lsfd
Вывод
PID    FD TTY      TYPE      DEVICE SIZE/OFF   NODE NAME
1234   0  /dev/pts/0 CHR      136,0       0      3 /dev/pts/0
1234   1  /dev/pts/0 CHR      136,0       0      3 /dev/pts/0
1234   2  /dev/pts/0 CHR      136,0       0      3 /dev/pts/0
🚩Полезные флаги и фильтрация Список дескрипторов определенного пользователя:
lsof -u <имя_пользователя>
Список файлов определенного типа (например, сокеты):
lsof -i
Фильтрация по определенному файлу или устройству:
lsof /path/to/file
🚩Почему важно знать про дескрипторы? 🟠Отладка приложений Определение, какие файлы, сокеты или устройства использует процесс. 🟠Устранение утечек Проверка, остаются ли ненужные дескрипторы открытыми. 🟠Администрирование Диагностика проблем, связанных с блокировкой файлов. Ставь 👍 и забирай 📚 Базу знаний

🤔 Куда идёт деплой из релизных веток? Из release-веток обычно: - деплой идёт в staging/QA окружение для тестирования; - после подтверждения — в master, что может инициировать production-деплой. Это даёт возможность проверить стабильность перед боевым запуском. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как и где посмотреть логи какого-нибудь сервиса? Обычно хранятся в каталоге /var/log. Также многие современные дистрибутивы используют систему журналирования systemd для управления и просмотра логов. 🚩Способы просмотра 🟠Просмотр логов в /var/log Каталог /var/log содержит логи большинства системных сервисов и приложений. Логи системных сообщений /var/log/syslog: Содержит общие системные логи. /var/log/messages: Содержит общие системные сообщения (не во всех дистрибутивах).
cat /var/log/syslog
less /var/log/syslog
tail -f /var/log/syslog
Логи конкретных сервисов Apache: /var/log/apache2/ или /var/log/httpd/ Логи доступа: /var/log/apache2/access.log или /var/log/httpd/access_log Логи ошибок: /var/log/apache2/error.log или /var/log/httpd/error_log
tail -f /var/log/apache2/access.log
tail -f /var/log/apache2/error.log  
Nginx: /var/log/nginx/ Логи доступа: /var/log/nginx/access.log Логи ошибок: /var/log/nginx/error.log
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log 
MySQL: /var/log/mysql/ или /var/log/mysqld.log
tail -f /var/log/mysql/error.log 
SSH: /var/log/auth.log или /var/log/secure
tail -f /var/log/auth.log 
🟠Использование `journalctl` для системных логов journalctl — это утилита для просмотра и управления журналами systemd. Она позволяет фильтровать логи по различным критериям, таким как время, сервис и уровень логирования. Основные команды journalctl Просмотр всех журналов
journalctl  
Логов конкретного сервиса
journalctl -u nginx.service  
Последних логов и продолжение просмотра в реальном времени
journalctl -f
journalctl -u nginx.service -f
Логов за определённый период
journalctl --since "2024-07-25 12:00:00" --until "2024-07-25 13:00:00" 
Логов с определённым уровнем логирования
journalctl -p err
journalctl -p warning  
🚩Примеры использования 🟠Просмотр логов Apache Логи доступа
tail -f /var/log/apache2/access.log  
Логи ошибок
tail -f /var/log/apache2/error.log 
🟠Просмотр логов Nginx Логи доступа
tail -f /var/log/nginx/access.log
Логи ошибок
tail -f /var/log/nginx/error.log  
🟠Использование `journalctl` для просмотра логов Nginx Все логи Nginx
journalctl -u nginx.service  
Последние логи Nginx в реальном времени
journalctl -u nginx.service -f
Ставь 👍 и забирай 📚 Базу знаний

🔥 OTUS запускает курс «DevOps-инженер: практики и инструменты» — тестирование уже открыто! Готовы к настоящему DevOps в прод
🔥 OTUS запускает курс «DevOps-инженер: практики и инструменты» — тестирование уже открыто! Готовы к настоящему DevOps в продакшене + максимальная скидка? Пройдите бесплатный тест и зафиксируйте спеццену и место в группе! За 5 месяцев вы получите: - Боевой стек 2025–2026: Docker → K8s → Terraform → Ansible → GitLab CI/CD → Prometheus + Grafana - Бесплатный Yandex Cloud + большой финальный проект с защитой - Демки в прямом эфире + код-ревью от менторов из Сбера, IBM, Касперского - Только то, что реально юзают в проде Научитесь: - Делать CI/CD, который не падает в 3 ночи - Управлять инфраструктурой как кодом - Запускать отказоустойчивый Kubernetes - Настраивать полный мониторинг и спать спокойно Старт: 29 января 2026 г. 👉 Пройти тест и забронировать место: https://otus.pw/Ik13/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

🤔 На каком шаге заканчивается Continuous Integration? CI заканчивается после: - успешной сборки, - прохождения тестов, - публикации артефактов. Далее идёт этап доставки (delivery) или развёртывания (deployment) — это уже CD. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Почему выстрелил terraform а не salt? Terraform стал популярнее, чем SaltStack, потому что он лучше решает задачи управления инфраструктурой как кодом (IaC) и обеспечивает декларативный и удобный подход. 🟠Разделение инфраструктуры и конфигурации Terraform = управление инфраструктурой (создание виртуальных машин, баз данных, сетей и т. д.). SaltStack = управление конфигурацией (разворачивание ПО, управление пользователями, файлами и т. д.). 🚩Почему Terraform выстрелил? В современном DevOps важнее быстро и гибко создавать инфраструктуру (AWS, Kubernetes, облака). Salt же больше заточен под настройку серверов, но это стало второстепенным. 🟠Декларативный подход Terraform = декларативный язык HCL (HashiCorp Configuration Language)
  resource "aws_instance" "web" {
    ami           = "ami-123456"
    instance_type = "t2.micro"
  }
  
🟠Лёгкость и отсутствие агентов Terraform = не требует агентов, просто вызывает API облачных провайдеров. Salt = требует установки Salt Master и Minion'ов на серверах. 🟠Популярность облаков (AWS, Azure, GCP, Kubernetes) Terraform нативно интегрируется с облаками (AWS, GCP, Azure, Kubernetes). Salt тоже умеет работать с облаками, но его основное применение – настройка серверов. 🟠Лучшая экосистема и поддержка сообщества - У Terraform больше модулей и провайдеров. - Salt – сложнее настроить для облаков, и сообщество у него меньше. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как работает DNS? DNS (Domain Name System) преобразует читаемые доменные имена (например, google.com) в IP-адреса. Процесс включает: - запрос к локальному кешу; - обращение к DNS-рекурсору; - переход к корневым серверам, затем к серверам доменов верхнего уровня (TLD), затем к авторитетным серверам; - возврат IP-адреса клиенту. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие есть правила которые запрещают запускаться какой-либо ноде? В Kubernetes есть несколько механизмов, которые могут запретить или ограничить запуск подов на определенных нодах. 🚩Taints & Tolerations (Метки и допуска) Taints – метки на нодах, запрещающие размещение подов, если у них нет соответствующего допуска (Toleration). Используется для изоляции, приоритизации узлов или резервирования ресурсов.
kubectl taint nodes my-node key=value:NoSchedule
Разрешить конкретному поду запускаться на этой ноде
tolerations:
  - key: "key"
    operator: "Equal"
    value: "value"
    effect: "NoSchedule"
🚩Node Selectors (Выбор ноды по меткам) Запрещает запускаться на всех нодах, кроме указанных. Используется для привязки подов к определенным серверам.
spec:
  nodeSelector:
    disktype: ssd
🚩Node Affinity (Расширенные правила выбора ноды) Позволяет задать гибкие условия (обязательные и предпочтительные).
affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
        - matchExpressions:
            - key: region
              operator: In
              values:
                - us-east-1
🚩Pod Disruption Budget (Ограничение количества перезапусков) Запрещает запуск новых подов, если их уже запущено определенное количество.
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: my-pdb
spec:
  maxUnavailable: 3
  selector:
    matchLabels:
      app: my-app
Ставь 👍 и забирай 📚 Базу знаний

🤔 Пример асимметричного шифрования? - RSA — самый популярный алгоритм. - Пример: клиент шифрует данные публичным ключом сервера, а сервер расшифровывает их своим приватным. Также используется в TLS-сертификатах, PGP, SSH. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Из чего состоит control plane? В Kubernetes Control Plane — это набор компонентов, которые управляют всей кластерной системой. Он отвечает за контроль над состоянием кластера, управлением узлами (nodes) и развертыванием приложений. 🟠kube-apiserver Что делает: Это центральный компонент, предоставляющий API для управления кластером. Почему нужен: Все взаимодействия, включая добавление/удаление узлов, создание подов и настройку сетей, проходят через API-сервер. Как работает: Принимает запросы от пользователей, kubectl, и других компонентов. Проверяет подлинность запросов и валидирует данные. Передает команды другим компонентам через REST API. 🟠etcd Что делает: Это распределённое key-value хранилище, которое сохраняет все данные о состоянии кластера. Почему нужен: Все данные о конфигурации, статусе и метаданных кластера сохраняются в etcd. Если etcd выходит из строя, кластер теряет свою управляемость. Как работает: Хранит информацию о подах, конфигурации сетей и статусе всех компонентов. Поддерживает консенсус между узлами, обеспечивая надёжность данных. 🟠kube-scheduler Что делает: Назначает поды на доступные узлы. Почему нужен: Без планировщика поды не смогут быть развернуты на узлах. Как работает: Считывает незапланированные поды из API-сервера. Анализирует доступные узлы на основе их ресурсов (CPU, память и т.д.). Назначает узел для каждого пода на основе алгоритмов (например, минимальная загрузка). 🟠kube-controller-manager Что делает: Управляет контроллерами, которые следят за состоянием ресурсов в кластере. Почему нужен: Контроллеры — это "надсмотрщики", которые автоматически исправляют отклонения от желаемого состояния. Как работает: Включает несколько встроенных контроллеров: Node Controller: Следит за доступностью узлов. Replication Controller: Поддерживает нужное количество реплик подов. Endpoint Controller: Обновляет Endpoints-объекты. Service Account Controller: Создает учетные записи для сервисов. 🟠cloud-controller-manager Что делает: Управляет интеграцией с облачными провайдерами (например, AWS, GCP). Почему нужен: Позволяет использовать облачные функции, такие как балансировка нагрузки, управление дисками и маршрутизацией. Как работает: Отвечает за создание LoadBalancer. Управляет постоянными томами (Persistent Volumes), связанными с облачными хранилищами. Ставь 👍 и забирай 📚 Базу знаний

❕ Бесплатный вебинар: «GitOps + Flux — ваш путь к автоматизированному деплою в Kubernetes»! Вы хотите развернуть приложение в
Бесплатный вебинар: «GitOps + Flux — ваш путь к автоматизированному деплою в Kubernetes»! Вы хотите развернуть приложение в Kubernetes без тонны ручных команд и нервов? Мечтаете о системе, где код сам «доставляется» в прод по принципу «закоммитил — заработало»? Приглашаем вас на открытый урок в рамках курса «Инфраструктурная платформа на основе Kubernetes , где разберём»: - как перестать вручную деплоить приложения; - как добиться стабильного состояния кластера; - как сделать процессы прозрачными и контролируемыми. 🗓 Когда: 23.12, в 20-00 Для кого: DevOps‑инженеры, разработчики, администраторы Kubernetes, все, кто хочет автоматизировать деплой. На уроке вы узнаете: 💚 Что такое GitOps и почему это новый стандарт работы с Kubernetes. 💚 Как Flux автоматизирует синхронизацию кластера с Git‑репозиторием. 💚Практические примеры настройки Flux для реальных сценариев. 💚Как избежать типичных ошибок при внедрении GitOps. 💚Какие преимущества даёт подход «конфигурация как код». После урока вы сможете: - настроить базовый пайплайн GitOps с Flux; - понять, как интегрировать Flux в существующую инфраструктуру; - оценить, подходит ли GitOps для вашего проекта. ➡️ Регистрирация: https://otus.pw/LUdW/ Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

🤔 Как Kafka записывает сообщения и как их отдаёт? - Producer отправляет сообщение в топик, который разбит на партиции. - Kafka записывает в лог-файл на диск. - Consumer читает сообщения, обращаясь к нужной партиции. - Каждый consumer хранит offset, Kafka ничего не удаляет, пока не истечёт retention. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Можно ли на лету изменить настройки 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
Ставь 👍 и забирай 📚 Базу знаний

🤔 Во сколько зонах можно включить репликацию в RDS Aurora? Aurora поддерживает до 5 read-replicas в разных зонах/регионах с высокой доступностью и кросс-региональным фейловером. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как оптимизировать имедж? Оптимизация Docker-имеджа (или другого контейнерного имеджа) необходима для уменьшения его размера, ускорения сборки, повышения безопасности и повышения производительности контейнеров. 🟠Используйте минимальную базовую ОС Почему: Базовый образ сильно влияет на размер. Например, alpine занимает ~5 МБ, в то время как ubuntu или debian могут превышать сотни мегабайт. Как: Замените базовый образ:
FROM alpine:latest
🟠Удаляйте ненужные файлы Почему: Временные файлы, кэш или артефакты сборки занимают место. Как: Добавьте команды для очистки временных данных:
RUN apt-get update && apt-get install -y curl \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*
🟠Используйте многоэтапную сборку (multi-stage builds) Почему: Стадия сборки может содержать инструменты, которые не нужны в финальном образе. Как
# Стадия сборки
FROM golang:1.20 as builder
WORKDIR /app
COPY . .
RUN go build -o app .

# Финальный образ
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/app .
CMD ["./app"]
🟠Минимизируйте количество слоёв Почему: Каждый RUN, COPY, ADD создаёт новый слой. Слишком много слоёв увеличивают размер образа. Как: Объединяйте команды:
RUN apt-get update && apt-get install -y curl wget \
    && apt-get clean && rm -rf /var/lib/apt/lists/*
🟠Не сохраняйте секреты Почему: Переменные окружения с паролями или токенами могут быть случайно унаследованы. Как: Используйте Docker secrets или .env-файлы и исключайте их из COPY
ENV APP_ENV=production
🟠Кэшируйте зависимости Почему: Частое скачивание зависимостей замедляет сборку. Как: Переносите команды загрузки зависимостей ближе к началу:
COPY go.mod go.sum ./
RUN go mod download
🟠Проверяйте зависимости Почему: Устаревшие или ненужные зависимости увеличивают размер и могут содержать уязвимости. Как: Используйте сканеры вроде Trivy или Docker Scan для анализа.
trivy image myimage:latest
🚩Пример полного Dockerfile
# 1. Используем минимальный базовый образ
FROM node:20-alpine as builder

# 2. Устанавливаем зависимости
WORKDIR /app
COPY package*.json ./
RUN npm install

# 3. Копируем код
COPY . .

# 4. Собираем проект
RUN npm run build

# Финальный минимальный образ
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
Ставь 👍 и забирай 📚 Базу знаний

Пост для тех, кто устал от бесконечных отказов на собеседованиях. Все говорят: «Войти в IT легко!» Но на практике собеседован
Пост для тех, кто устал от бесконечных отказов на собеседованиях. Все говорят: «Войти в IT легко!» Но на практике собеседования валятся одно за другим. И это не потому что вы «не подходите». А потому что на джуна смотрят не по сертификатам и не по словам «ничего не знаю, но легко обучаем!», а по конкретным хард-скиллам. К сожалению или счастью, но это именно так. Эти хард-скиллы ждут уже на входе: • умение работать с логами • понимание, как работает API и авторизация • базовый SQL • умение разобрать ошибку, а не гадать • техническое мышление хоть на уровне основ Без этого кандидат теряется, и это чаще всего видно сразу. В канале Кирилла, руководителя технической поддержки T-Банка – эти навыки разбираются простыми, рабочими примерами: что спрашивают на собесах, что проверяют в тестовых, какие ошибки чаще всего допускают новички. Если хотите подготовиться, а не просто смотреть курсы ради мнимой уверенности на собесе – начните отсюда: 🔥@openstudyiteng

🤔 Какой номер порта используется для ping-коммуникации? Ping не использует порты, так как работает на уровне ICMP, а не TCP или UDP. ICMP — это протокол сетевого уровня, используемый для диагностики (например, ping, traceroute). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Для чего используется clickhouse? ClickHouse – это высокопроизводительная колоночная база данных для аналитики. Она предназначена для быстрого выполнения аналитических запросов на больших объемах данных (миллиарды строк). Используется в BI-системах, логировании, мониторинге и обработке событий. 🚩Основные возможности 🟠Очень быстрые запросы за счёт хранения данных по колонкам и сжатия. 🟠Отлично масштабируется работает на одной машине или в кластере. 🟠Поддержка SQL работает с привычными SQL-запросами. 🟠Хорош для real-time аналитики обработка миллионов событий в секунду. 🟠Без индексов использует Primary Key + MergeTree, что упрощает оптимизацию. 🟠Хорошее сжатие данных благодаря специальным алгоритмам хранения. 🚩Где используется? 🟠Аналитика и отчёты BI-системы (анализ продаж, маркетинга, поведения пользователей). Агрегация данных по времени (финансы, реклама, ретеншн). 🟠Логирование и мониторинг Хранение логов (NGINX, Kubernetes, Clickstream). Аналитика событий в реальном времени. 🟠IoT и Big Data Обработка телеметрии с датчиков. Анализ поведения пользователей в приложениях. 🟠Пример работы с ClickHouse 1⃣Создание таблицы
CREATE TABLE visits (
    user_id UInt32,
    url String,
    duration UInt32,
    event_time DateTime
) ENGINE = MergeTree()
ORDER BY event_time;
2⃣Вставка данных
INSERT INTO visits VALUES (1, 'https://example.com', 30, now());
3⃣Аналитический запрос (например, среднее время посещения сайта)
SELECT url, AVG(duration) 
FROM visits 
GROUP BY url 
ORDER BY AVG(duration) DESC;
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие есть сущности в Kubernetes, минимальные и далее по возрастанию? - Pod — минимальная сущность, может содержать один или несколько контейнеров. - ReplicaSet — управляет количеством pod'ов. - Deployment — управляет ReplicaSet'ами, обновлениями и откатами. - Service — обеспечивает доступ к pod'ам. - Namespace — логическое разделение ресурсов. - Node — физическая или виртуальная машина. - Cluster — объединение всех вышеуказанных компонентов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как определить опции запуска пайплайна при редактировании определенных ресурсов в гите? При работе с CI/CD (GitHub Actions, GitLab CI, Jenkins) часто нужно запускать пайплайн только при изменении определенных файлов. Это помогает оптимизировать сборку, экономить ресурсы и время. 🚩В GitHub Actions (on: push, paths) В GitHub Actions можно указать файлы, изменения в которых запустят пайплайн.
name: Infra Pipeline
on:
  push:
    paths:
      - 'infra/**'
      - 'k8s/**'
  pull_request:
    paths:
      - 'infra/**'
      - 'k8s/**'
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      - name: Deploy Infrastructure
        run: ./deploy.sh
🚩В GitLab CI/CD (only: changes) В GitLab можно настроить запуск пайплайна по изменению файлов с помощью only: changes.
stages:
  - deploy

terraform:
  stage: deploy
  script:
    - terraform apply -auto-approve
  only:
    changes:
      - terraform/**
🚩В Jenkins (when { changes }) В Jenkins Declarative Pipeline можно использовать when { changes } для проверки измененных файлов.
pipeline {
    agent any
    stages {
        stage('Deploy Ansible') {
            when { changes path: 'ansible/**' }
            steps {
                sh './deploy_ansible.sh'
            }
        }
        stage('Deploy Helm') {
            when { changes path: 'helm/**' }
            steps {
                sh './deploy_helm.sh'
            }
        }
    }
}
Ставь 👍 и забирай 📚 Базу знаний

DevOps | Вопросы собесов - Статистика и аналитика Telegram-канала @easy_devops