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

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

前往频道在 Telegram
5 510
订阅者
-224 小时
-47
-330
帖子存档
🤔 Какие процессы убивает long killer? Это системный механизм в Astra Linux (и некоторых других дистрибутивах на базе Debian), который убивает "долгоиграющие" процессы, потребляющие слишком много ресурсов. Он предотвращает зависания системы и защищает от неэффективного использования вычислительных мощностей. 🚩Какие процессы убивает Long Killer? Long Killer анализирует процессы и завершает те, которые: Запущены от обычного пользователя (не root). Работают слишком долго (по умолчанию >10 минут). Потребляют много CPU (по умолчанию >90% CPU). Используют много памяти (если система близка к OOM – Out of Memory). Не имеют активности (зависли, например, ожидание ввода). Он не убивает root-процессы. Системные службы (например, sshd, systemd) остаются нетронутыми. Если процесс выполняется интерактивно (например, работа в vim или nano), он обычно не трогает его. 🚩Как проверить, что процесс убит Long Killer? Если подозреваете, что ваш процесс завершился из-за Long Killer, посмотрите логи
journalctl -u long-killer.service --no-pager | tail -n 20
Также можно проверить dmesg
dmesg | grep "killed by Long Killer"
🚩Как отключить или настроить Long Killer? Файл конфигурации находится здесь
/etc/long-killer.conf
Пример настроек
MAX_CPU_USAGE=90     # Максимальная загрузка CPU (%)
MAX_EXEC_TIME=600    # Максимальное время выполнения (секунды)
EXCLUDE_USERS=root   # Не убивать процессы от root
После изменения перезапустите сервис
systemctl restart long-killer.service
Чтобы полностью отключить Long Killer
systemctl stop long-killer.service
systemctl disable long-killer.service
🚩Как избежать убийства процессов? Запуск от root (если это безопасно):
sudo my_long_process
Снижение приоритета процесса (nice/renice)
nice -n 10 my_process
renice -n 10 -p <PID>
Использование nohup или screen для фоновых задач
nohup my_script.sh &
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как посмотреть активные сессии других пользователей сервера? Для этого есть команды, показывающие детальную информацию о сессиях: кто подключён, откуда, чем занят и как долго. В системах с systemd можно использовать специальные утилиты для отображения сессий. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что сделать если зависает ssh? Если SSH завис, не стоит сразу закрывать терминал. Есть несколько причин и решений. 🚩Проверить, можно ли выйти без разрыва сессии Если SSH завис, но сессия не разорвана, попробуйте выйти без закрытия терминала:
~.
Переключение в режим управления SSH
~Ctrl+Z
🚩Проверить соединение с сервером Если SSH завис, причина может быть в разрыве соединения. Проверьте: Работает ли пинг до сервера:
ping server_ip
🔹 Открыт ли SSH-порт (22):
nc -zv server_ip 22
🚩Перезапустить SSH-клиент Если только один SSH-клиент завис, попробуйте:
pkill -9 ssh
или
killall -9 ssh
Затем переподключитесь
ssh user@server_ip
🚩Проверить SSH-сервер Если сервер доступен, но SSH зависает, войдите через консоль или другой метод (например, VNC, IPMI). Если SSH не отвечает, перезапустите его:
sudo systemctl restart ssh
или
service ssh restart
🚩Отключить TCP KeepAlive или изменить таймауты Иногда SSH зависает из-за разрыва соединения на роутере или файрволе. Добавьте в ~/.ssh/config на клиенте
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 5
Или в /etc/ssh/sshd_config на сервере
ClientAliveInterval 60
ClientAliveCountMax 5
Затем перезапустите SSH
sudo systemctl restart ssh
🚩Убить зависшую SSH-сессию на сервере Если осталось зависшее подключение, найдите его и завершите:
who  # Показывает активные пользователи
ps aux | grep ssh  # Показывает процессы SSH
pkill -9 -u username  # Завершает все сессии пользователя
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как сделать так, чтобы клиенты отдавали метрики в Prometheus? На клиенте должен быть установлен экспортёр, который поднимает HTTP endpoint. Prometheus опрашивает этот endpoint по расписанию и сохраняет данные в своей TSDB (базе данных временных рядов). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какой самый большой минус Ansible? Ansible – мощный инструмент для автоматизации, но у него есть серьезные недостатки, особенно при масштабировании. 🚩Основной минус – Медленная работа на больших инфраструктурах 🟠Нет агентов каждый раз Ansible подключается по SSH и выполняет задачи без предварительного кеширования что замедляет процесс. 🟠Ограничения Python на удаленных хостах если целевой сервер слабый или без Python, выполнение плейбуков будет медленным. 🟠Последовательное выполнение по умолчанию Ansible выполняет задачи последовательно, что дольше, чем параллельные методы (например, в SaltStack).
yaml  
- name: Установка Nginx  
  hosts: all  
  tasks:  
    - name: Установить Nginx  
      apt:  
        name: nginx  
        state: present  
Запуск задач параллельно (-f 50)
sh  
ansible-playbook playbook.yml -f 50  
🚩Другие минусы Ansible 🟠Высокая нагрузка на управляющий узел Если 1000+ серверов, главный Ansible-узел может быстро перегрузиться. 🟠Сложное управление зависимостями Роли могут конфликтовать, если версии не совпадают. Ansible Galaxy не такой удобный, как Terraform Registry 🟠Ограниченная идемпотентность Некоторые модули (особенно shell и command) не всегда понимают, применялась ли конфигурация раньше. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как свалидировать ошибку заранее и предупредить разработчиков до того, как приложение упадёт на проде? Для этого используются статический анализ кода, линтеры, pre-commit хуки, юнит- и интеграционные тесты, а также stage/test окружения с автотестами. Также помогают CI-пайплайны, которые запрещают мердж без прохождения всех проверок Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Стажировки и вакансии для DevOps - Вакансии которых нет на джоб-агрегаторах - Только прямые контакты HR в Telegram 👉 @jobs_d
Стажировки и вакансии для DevOps - Вакансии которых нет на джоб-агрегаторах - Только прямые контакты HR в Telegram 👉 @jobs_devops 🤖 ML & DS 👩‍💻 DevOps 👨‍✈️ ИБ & OSINT 👣 Go 👩‍💻 Mobile 👩‍💻 C# 👩‍💻 Node.js 👩‍💻 Python 🔎 QA 👩‍💻 Java 👩‍💻 UX/UI 👩‍💻 Frontend 🖼️ PHP 📋 Analyst 💼 1C 🖥 SQL 👩‍💻 IT HR Пока другие листают джоб-сайты — ты уже пишешь HR в Telegram.

🤔 Какие микросервисы можно масштабировать горизонтально? Горизонтальное масштабирование – это добавление новых экземпляров (реплик) сервиса для увеличения производительности. Оно хорошо работает для статeless (без состояния) микросервисов, где нет привязки к конкретному серверу. 🚩Какие микросервисы можно масштабировать горизонтально? 🟠Веб-серверы и API-шлюзы Примеры: Nginx, Traefik, Kong, API Gateway (AWS, GCP) Почему можно масштабировать? - Обрабатывают независимые запросы - Не требуют сохранения состояния между запросами - Легко распределяются через Load Balancer
yaml  
apiVersion: apps/v1  
kind: Deployment  
metadata:  
  name: my-api  
spec:  
  replicas: 5  
  selector:  
    matchLabels:  
      app: my-api  
  template:  
    metadata:  
      labels:  
        app: my-api  
    spec:  
      containers:  
      - name: api-container  
        image: my-api:latest  
🟠Backend-сервисы (Stateless) Примеры: REST API (FastAPI, Express, Spring Boot), gRPC-сервисы Почему можно масштабировать? Каждый запрос обрабатывается независимо Нет привязки к конкретному серверу Можно использовать Load Balancer (например, AWS ALB, Nginx)
nginx  
upstream backend {  
  server backend1:5000;  
  server backend2:5000;  
  server backend3:5000;  
}  
server {  
  listen 80;  
  location / {  
    proxy_pass http://backend;  
  }  
}  
🟠Очереди сообщений и брокеры событий Примеры: RabbitMQ, Kafka, NATS, Redis Streams Почему можно масштабировать? Сообщения разбираются разными нодами Можно увеличивать число консьюмеров Поддерживают partitioning (разделение нагрузки)
python  
from kafka import KafkaConsumer  
consumer = KafkaConsumer('my_topic', group_id='workers', bootstrap_servers='kafka:9092')  
for message in consumer:  
    process_message(message)  
🟠Кэш-сервисы (Stateless) Примеры: Redis (в режиме Cluster), Memcached Почему можно масштабировать? Каждый узел хранит часть данных Можно распределять кэш по нескольким инстансам Redis поддерживает Sharding (разбиение данных на ноды)
sh  
redis-cli --cluster create 192.168.1.1:6379 192.168.1.2:6379 192.168.1.3:6379 --cluster-replicas 1  
🚩Какие микросервисы **нельзя просто так масштабировать горизонтально?** Некоторые сервисы сохраняют состояние (stateful) и сложны в горизонтальном масштабировании: Базы данных → MySQL, PostgreSQL (нужны реплики или шардирование) Сервисы с сессиями → Например, если пользователь всегда должен попасть на тот же сервер Хранилища файлов → Например, локальное хранение логов на сервере Ставь 👍 и забирай 📚 Базу знаний

🤔 Как ставить Kubernetes на bare metal и в облако? На bare metal — чаще всего через kubeadm, k3s, Rancher, MicroK8s, либо с помощью Ansible (kubespray). В облаке — через сервисы провайдеров (EKS, GKE, AKS) или вручную на облачные ВМ, с теми же инструментами. Отличие — в настройках сети, балансировке и подключении хранилищ. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как бы организовал хранение и доступ к секретам? В DevOps и Kubernetes важно безопасно хранить секретные данные (пароли, API-ключи, токены). Нельзя хранить их в коде, в Git, в .env файлах без шифрования. 🚩HashiCorp Vault (лучший вариант для масштабных проектов) Полностью управляемое решение для хранения и динамической ротации секретов. Шифрование с поддержкой KMS. API-доступ и интеграция с CI/CD. Как получить секрет через CLI?
vault kv put secret/db password="SuperSecret123"
vault kv get secret/db
Как использовать в Jenkins?
withVault([vaultSecrets: [[path: 'secret/db', secretValues: [['envVar': 'DB_PASS', 'vaultKey': 'password']]]]]) {
    sh 'echo $DB_PASS'  # Переменная доступна только внутри блока
}
🚩Kubernetes Secrets (если приложение в K8s) Интеграция с Kubernetes, управление через kubectl. Доступ через переменные окружения или монтирование в файл. Можно использовать Sealed Secrets или SOPS для шифрования. Как создать секрет?
kubectl create secret generic db-secret --from-literal=password='SuperSecret123'
Как использовать в Deployment?
env:
  - name: DB_PASS
    valueFrom:
      secretKeyRef:
        name: db-secret
        key: password
🚩AWS Secrets Manager / Azure Key Vault / GCP Secret Manager Интеграция с облачными сервисами (IAM, Lambda, RDS). Автоматическая ротация ключей. Как получить секрет в AWS?
aws secretsmanager get-secret-value --secret-id my-secret
Как подключить к Kubernetes? Используем External Secrets Operator:
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
  name: db-secret
spec:
  secretStoreRef:
    name: aws-secrets
    kind: SecretStore
  target:
    name: db-secret
  data:
  - secretKey: password
    remoteRef:
      key: my-db-password
🚩SOPS + GitOps (для хранения в Git, но зашифрованно) Позволяет хранить секреты в Git без утечек. Работает с KMS, PGP, age. Как зашифровать секрет?
sops --encrypt --age YOUR_PUBLIC_KEY secrets.yaml > secrets.enc.yaml
Как расшифровать?
sops --decrypt secrets.enc.yaml
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое SNS и что делает? SNS (Simple Notification Service) — это сервис для рассылки уведомлений и сообщений. Поддерживает два типа взаимодействия: - Публикация/подписка (Pub/Sub) — рассылает сообщения на подписчиков (SQS, email, HTTP endpoints). - Push-уведомления — на мобильные устройства. Используется для оповещений, триггеров автоматизации и системных событий. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какая компонента запускает под на ноде, какая отвечает за сеть? В Kubernetes разные компоненты отвечают за запуск подов и сетевые настройки. 🚩Какая компонента запускает под на ноде? (`kubelet`) Получает команды от kube-scheduler (назначение подов) Запускает контейнеры через Container Runtime (Docker, containerd, CRI-O) Следит за состоянием подов и перезапускает их при сбоях
systemctl status kubelet
Посмотреть логи kubelet
journalctl -u kubelet -f
🚩Какая компонента отвечает за сеть? (CNI) Назначает IP-адреса подам Организует маршрутизацию трафика между подами и нодами Настраивает Network Policies (безопасность сети) Проверить работающие сетевые плагины
kubectl get pods -n kube-system
Вывод (если CNI работает нормально)
NAME               READY   STATUS    RESTARTS   AGE
calico-node-xyz   1/1     Running   2          3d
Если CNI не работает, поды могут застрять в ContainerCreating
kubectl get pods
NAME          READY   STATUS              RESTARTS   AGE
web-server    0/1     ContainerCreating   0          10m
Ставь 👍 и забирай 📚 Базу знаний

Не грузится? Понимаем. Бесплатный мессенджер для вашей компании - Битрикс24. Личные и групповые чаты, видеозвонки, каналы и н
Не грузится? Понимаем. Бесплатный мессенджер для вашей компании - Битрикс24. Личные и групповые чаты, видеозвонки, каналы и нейросеть. Всё привычно и удобно. Начните работать на бесплатном тарифе уже сейчас. Узнать больше #реклама 16+ bitrix24.ru О рекламодателе

🤔 Как посмотреть, с какими файлами работает программа на Linux в данный момент? Для этого используют системные утилиты, которые показывают открытые файлы по PID или по имени процесса. Это полезно для диагностики блокировок и утечек. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как заставить процесс отпустить файловые дескрипторы? Если процесс удерживает файловые дескрипторы и вам нужно их освободить, то есть несколько способов это сделать. 🟠Завершение процесса Самый простой способ — завершить процесс, который удерживает файловые дескрипторы.
kill <PID>
или принудительно
kill -9 <PID>
Чтобы найти процессы, удерживающие файлы
lsof | grep <filename>
или
fuser <filename>
🟠Закрытие дескриптора вручную Если вы хотите закрыть файловый дескриптор, не завершая процесс, можно использовать lsof и /proc 1⃣Найдите открытые дескрипторы процесса:
ls -l /proc/<PID>/fd/
2⃣Закройте конкретный дескриптор:
exec 3>&-
🟠Использование `gdb` для вмешательства в процесс Если процесс нельзя перезапустить, но вы имеете к нему доступ, можно закрыть дескриптор через gdb:
gdb -p <PID>
(gdb) call close(<FD>)
(gdb) detach
(gdb) quit
🟠Перемонтирование файловой системы Если файл удален, но все еще удерживается процессом, можно принудительно перемонтировать файловую систему:
mount -o remount /
Или использовать lsof для очистки удаленных файлов
lsof | grep deleted
🟠Использование `systemctl restart` для сервисов Если файлы удерживаются службой (например, Nginx, Apache, MySQL), можно перезапустить службу
systemctl restart <service>
или
service <service> restart
Ставь 👍 и забирай 📚 Базу знаний

🤔 Как попасть в запущенный в Docker контейнер? Возможно подключиться к работающему контейнеру в интерактивном режиме через оболочку (например, sh или bash). Это позволяет выполнять команды прямо внутри контейнера, как в обычной системе. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что слышали про rancher kubernetes? Это платформа для управления Kubernetes-кластерами. Она позволяет развертывать, настраивать, мониторить и управлять несколькими кластерами Kubernetes из единой панели управления. Rancher упрощает работу с Kubernetes, предоставляя удобный UI, API и инструменты автоматизации. 🚩Зачем нужен Rancher? 🟠Управление несколькими кластерами Rancher позволяет управлять кластерами Kubernetes, развернутыми в различных облаках (AWS, GCP, Azure) и на локальной инфраструктуре. 🟠Упрощенная установка и настройка С помощью Rancher можно быстро развернуть Kubernetes-кластеры с минимальными усилиями. 🟠Безопасность и контроль доступа Поддерживает аутентификацию через LDAP, Active Directory, GitHub и другие методы. 🟠Мониторинг и логирование Встроенная поддержка Prometheus, Grafana и Fluentd для мониторинга и логов. 🟠Развертывание приложений Поддерживает Helm-чарты и стандартные манифесты Kubernetes. 🚩Как работает Rancher? 🟠Rancher Server центральный компонент, управляющий кластерами и предоставляющий UI/API. 🟠Kubernetes-кластеры могут быть развернуты с помощью Rancher (RKE, RKE2) или добавлены вручную (например, EKS, AKS, GKE). 🟠Rancher Agents агенты, установленные в кластерах для обеспечения связи с сервером Rancher. 🚩Пример развертывания Rancher Для развертывания Rancher можно использовать Docker
docker run -d --name=rancher --restart=unless-stopped \
  -p 80:80 -p 443:443 \
  rancher/rancher:latest
Ставь 👍 и забирай 📚 Базу знаний

🤔 Какие есть опции монтирования? Примеры: - ro / rw — только чтение или чтение/запись; - noexec — запрет запуска файлов; - nosuid, nodev — отключение SUID/девайсов; - defaults — набор стандартных флагов; - uid, gid — владельцы монтированной ФС; - relatime, noatime — управление обновлением временных меток. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что возвращает функция в bash? В Bash функция возвращает код завершения (exit status), который представляет собой числовое значение от 0 до 255. Это значение используется для указания успешного или неуспешного выполнения функции. По умолчанию, если явно не указано возвращаемое значение, функция возвращает код завершения последней выполненной команды внутри нее. 🚩Как возвращать значения из функции? 🟠Код завершения (exit status) Чтобы явно задать код завершения функции, используется команда return.
my_function() {
    if [[ $1 -gt 0 ]]; then
        return 0  # Успех
    else
        return 1  # Ошибка
    fi
}

my_function 5
echo $?  # Выведет 0 (успех)
🟠Вывод данных через `echo` Для передачи данных из функции (например, строки или числа) можно использовать echo. Вывод можно перехватить через подстановку команд $()
my_function() {
    echo "Hello, $1!"
}

result=$(my_function "world")
echo "$result"  # Выведет "Hello, world!"
🟠Изменение глобальных переменных Функция может менять значения глобальных переменных, которые затем используются за ее пределами
my_function() {
    result=$(( $1 + $2 ))
}

my_function 3 7
echo $result  # Выведет 10
🚩Почему это важно? 🟠Код завершения Используется в сценариях для проверки, выполнилась ли функция успешно. Значение 0 обычно означает успех, а любое другое число — ошибку. 🟠Вывод через `echo` Удобен для передачи данных из функции. 🟠Изменение переменных Полезно, если функция должна сохранять данные для дальнейшей обработки.
# Функция проверки файла
check_file() {
    if [[ -f $1 ]]; then
        echo "Файл $1 существует."
        return 0
    else
        echo "Файл $1 не найден."
        return 1
    fi
}

# Вызов функции
check_file "/etc/passwd"
status=$?  # Сохраняем код завершения
if [[ $status -eq 0 ]]; then
    echo "Продолжаем работу..."
else
    echo "Останавливаемся из-за ошибки."
fi
Ставь 👍 и забирай 📚 Базу знаний

🤔 С помощью какого файла можно вывести данные после применения Terraform? Используется файл outputs.tf, где описываются выходные значения Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний