Загрузка…
Загрузка…
devops / middle / tech_deep
Формат
online
Стадия
tech_deep
Когда
within_quarter
Длительность
52 мин
01
Поведенческий
Чем сейчас в основном приходится заниматься на текущем месте работы и что больше всего интересного?
Вводный вопрос от начальника отдела про текущий опыт.
02
Теория
Расскажите, как вы разворачивали и администрировали PostgreSQL (какой инструмент, как именно).
Кандидат: ansible-ролью, форкнутая публичная роль.
03
Теория
Какую роль Ansible вы использовали для разворачивания PostgreSQL и как она называется?
04
Теория
Какая конфигурация PostgreSQL разворачивается? Что значит отказоустойчивый кластер, какие там компоненты?
Заметки
Собеседование на DevOps-инженера в инфраструктурный отдел сопровождения Альфабанка. Стек команды: микросервисы в Kubernetes, часть в Mesos, stateful-приложения (RabbitMQ, Kafka, Hazelcast, Redis, MinIO) под Docker/systemd на выделенных хостах; Ansible (роли и плейбуки), инфраструктура в Git, без публичных облаков (виртуалки), CI/CD преимущественно Jenkins/Groovy. Интервью вели несколько человек: начальник отдела сопровождения (глубокий разбор опыта кандидата — PostgreSQL/Patroni/PgBouncer, Terraform/Proxmox, Python-автоматизация, Zabbix, перенос проектов GitLab) и инженер Ваня (чек-лист по Linux, сетям, Ansible, Git, контейнеризации, Kubernetes). Длительность ~52 минуты. По ходу собеседования были проблемы со связью у кандидата. Несколько ответов кандидата были неточными/неуверенными (хэши паролей в PgBouncer, поиск файлов через /proc, организация командной работы в Git).
Подготовка
Подтянуть: PostgreSQL HA (Patroni, Consul/etcd), PgBouncer и форматы аутентификации (MD5/SCRAM), procfs (/proc/<pid>) как источник данных lsof, основы IP/CIDR и масок подсетей, git-flow и работа команды в общих ветках, бинарные компоненты Kubernetes, scheduling (DaemonSet, node/pod affinity и antiaffinity, soft/hard правила), RBAC (Role/RoleBinding vs ClusterRole/ClusterRoleBinding), NetworkPolicy и роль CNI, service mesh (Istio: blue-green/canary).
Стиль интервьюера
Два стиля. Начальник отдела — давящий, «проваливающий» формат с уточнениями вглубь («а где посмотреть?», «а что дальше?»), ловит на неточностях, иногда формулирует вопрос так, что кандидат не сразу понимает суть (история с Git-workflow). Инженер Ваня — доброжелательный, базовые вопросы по чек-листу, начинает с простого и постепенно усложняет, подсказывает и наводит на нужный ответ.
Ответ: мастер, реплика, Patroni для управления состоянием нод.
05
Теория
Что используется в качестве key-value хранилища для Patroni?
Ответ: Consul (есть варианты etcd или consul).
06
Теория
Поднимали PostgreSQL в контейнерах или standalone-экземпляры на хостах?
Ответ: standalone на хостах без контейнеров.
07
Теория
Что использовалось в виде пулера соединений к базе данных и как он поднимался?
Ответ: PgBouncer, standalone.
08
Кейс
Что нужно сделать, чтобы добавить новую базу данных в этой инфраструктуре?
Уточнения: где хранится конфиг, где его посмотреть на сервере.
09
Теория
Где на сервере располагается конфиг PgBouncer и как он называется?
Ожидался путь /etc/pgbouncer.
10
Кейс
В каком формате (шифровании) хранится пароль в базе и где это устанавливается? Если в PgBouncer прописан MD5, а в базе другой хэш — будет ли работать PgBouncer и что нужно сделать?
Интервьюер указал, что правильно — изменить хэш в базе, т.к. по дефолту в новых версиях Postgres не MD5.
11
Поведенческий
Чем вы занимались на проекте «Невосход» и на каких компонентах он был собран? Какая была ваша роль?
Ответ: сопровождение разработки, виртуализация, docker-контейнеры на Docker Compose.
12
Теория
В каком варианте вы используете Terraform и на какой платформе виртуализации применяете скрипты?
Ответ: управление виртуальными машинами в Proxmox.
13
Поведенческий
Использовали ли вы Python-скрипты для разворачивания или писали какие-то программы? Приведите пример.
Кейс с Zabbix: сначала автоматизация через Zabbix API на Python, потом перешли на декларативное описание через модуль Ansible.
14
Поведенческий
Расскажите про задачу переноса проектов из одного экземпляра GitLab в другой при помощи Python.
Использовалась библиотека python-gitlab, подключение к двум инстансам, циклы for, перенос проектов.
15
Теория
Как посмотреть, сколько суммарно занимает конкретная директория на диске (например /home/ruslan/mb)?
du -sh /home/ruslan/mbОтвет: du -sh.
16
Теория
Есть сервер A (есть SSH) и сервер B (доступа нет), на B поднят сервис на порту 30080. Как с сервера A убедиться, что сервис на сервере B доступен (без графического интерфейса)?
nc -zv <ip> 30080Ответ: netcat -zv <ip> 30080.
17
Теория
Есть процесс, который читает файлы. Как узнать, какие файлы он читает в данный момент?
lsof -n | grep <pid>Ответ: lsof -n + grep по pid.
18
Теория
Как найти открытые файлы процесса, не используя lsof? Откуда lsof берёт эту информацию?
Ожидалось /proc/<pid>. Кандидат ответил неуверенно.
19
Теория
Что означает запись CIDR с маской /22 и сколько в ней примерно адресов?
Серия вопросов по разбору IP/масок присланных в чат.
20
Теория
Сравните две маски: где количество хостов будет меньше, а где больше?
255.255.255.x — меньше хостов.
21
Теория
Корректна ли запись IP-адреса вида 10.2.7.5/275 (с октетом 275)? Почему?
Некорректна — октет не может быть больше 255.
22
Теория
В каком случае можно увидеть запись 0.0.0.0/0?
Ответ: открыть доступ ко всему (любой IP) на файрволе.
23
Теория
Что означает понятие идемпотентность (в контексте Ansible)?
24
Теория
Как сделать так, чтобы выполнялись не все таски из плейбука, а только определённые?
Ответ: теги, а также управление через факты/условия.
25
Теория
Можно ли ограничить набор хостов, на которых будет выполняться плейбук, и как?
Ответ: группы, --limit, условия на группы хостов.
26
Теория
Удавалось ли писать шаблоны (Jinja) самостоятельно? Приведите пример.
Пример: шаблонизация конфигурационных файлов со значениями, зависящими от хоста.
27
Поведенческий
Удавалось ли писать роли Ansible самостоятельно?
28
Поведенческий
Удавалось ли использовать внешние роли (Galaxy/GitHub)?
29
Кейс
Если вы копируете чужую роль к себе и дорабатываете, то берёте ответственность за её сопровождение. Как вы будете поступать, когда через пару лет ваша форкнутая репа сильно разъедется с оригиналом?
Вопрос про стратегию поддержки форкнутых ролей и документирование изменений.
30
Теория
Как объединить несколько последних коммитов в один, не мержа в другую ветку?
git rebase -i HEAD~3Ответ: git rebase HEAD~N; пример с удалением закоммиченного секрета.
31
Теория
Вы отбранчевались от master, а в master влили изменения в те же файлы, что правили вы. Как избежать проблем при подтягивании master в свою ветку?
Ответ: смержить master в свою ветку, разрешить конфликты.
32
Кейс
Как организовать работу команды разработчиков в одной ветке (dev), чтобы все держали актуальный код, без копирования, и как поддерживать ветку в актуальном состоянии относительно master?
Интервьюер подводил к git-flow / rebase из master; диалог был с разночтениями в понимании вопроса.
33
Теория
В чём концептуальная (принципиальная) разница между виртуализацией и контейнеризацией?
34
Теория
За счёт каких технологий происходит разграничение процессов в одном контейнере от процессов в другом?
Ответ: namespaces ядра.
35
Теория
За счёт чего можно задать ограничение по потреблению ресурсов контейнера (например не более 2 ГБ RAM)?
Ответ: cgroups.
36
Теория
Можно ли посмотреть запущенные в контейнере процессы, не выполняя docker exec?
Ответ: процессы видны на хосте, где запущены контейнеры.
37
Теория
Где найти логи контейнера, если это необходимо?
docker logs <container>Ответ: docker logs <container>, хорошая практика — вывод в stdout.
38
Кейс
У кластера Kubernetes не запускается etcd. Где найти логи etcd?
etcd контейнеризирован на мастерах, не docker; искать в journald или через runtime (containerd, crictl).
39
Теория
Какие бинарные компоненты есть в Kubernetes (control plane и воркеры)?
Ответ: controller-manager, kube-apiserver, scheduler, kubelet, kube-proxy, etcd.
40
Теория
Как сделать так, чтобы на каждом воркере поднимался экземпляр приложения (например сборщик логов)? Решать через шедулер или абстракцию Kubernetes?
Ответ: DaemonSet.
41
Теория
Как сделать так, чтобы под поднимался только на определённом воркере?
Ответ: лейблы на ноде + nodeSelector/affinity; упомянул affinity/antiaffinity.
42
Теория
Как настроить так, чтобы у приложения с 20 репликами по возможности не было двух реплик одного деплоймента на одной ноде (мягкое правило)?
Ответ: pod antiaffinity с preferredDuringScheduling (мягкое правило).
43
Теория
Какие типы affinity бывают и какой из них нужен в этом случае?
node affinity, pod affinity, pod antiaffinity — нужен pod antiaffinity.
44
System design
Есть CI/CD (GitLab) и команда разработчиков. Нужно дать GitLab полный контроль над приложениями в неймспейсах (деплой, удаление, rollout), а разработчикам — только просмотр (статус подов, логи, число реплик) без права деплоить/удалять. Как это сделать?
Ответ: RBAC (Role + RoleBinding, service accounts); также упомянут подход GitOps с ArgoCD.
45
Теория
Если GitLab нужен доступ к деплою во все неймспейсы кластера — будете использовать Role и RoleBinding или что-то другое?
Ответ: ClusterRole / ClusterRoleBinding.
46
Теория
Есть два неймспейса (green и blue), по умолчанию доступ из любого неймспейса в любой. Как разграничить, чтобы трафик из blue в green (и наоборот) был запрещён?
Ответ: NetworkPolicy.
47
Теория
Что обеспечивает работу Network Policy в кластере?
Ответ: CNI.
48
Поведенческий
С какими CNI приходилось работать?
Ответ: Calico.
49
Поведенческий
Приходилось ли как-либо кастомизировать Calico?
Ответ: нет.
50
Поведенческий
Приходилось ли работать с какими-нибудь service mesh решениями?
Ответ: Istio, Cilium (силиум).