DevOps | Вопросы собесов
5.28K subscribers
27 photos
887 links
Download Telegram
🤔 Что такое replica count?

В Kafka replica count (replication factor) — это количество копий партиции, хранящихся на разных брокерах.
- Повышает отказоустойчивость.
- Один из брокеров — лидер, остальные — фолловеры.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
🤔 Как работает DRCP?

DRCP (Database Resident Connection Pooling) — это механизм в Oracle Database, который уменьшает нагрузку на базу данных за счет повторного использования соединений между клиентами и сервером. DRCP полезен для сред с большим количеством краткоживущих соединений, например, веб-приложений.

🚩Почему нужен DRCP?

Экономит ресурсы – вместо создания новых соединений база использует пул уже существующих.
Снижает нагрузку на сервер – меньше процессов, меньше потребления памяти и CPU.
Ускоряет работу – повторное использование соединений сокращает время на установку нового подключения.
Идеально для многопоточных сред – например, PHP-приложений, где соединения краткосрочные.

🚩Как DRCP работает?

🟠Клиент делает запрос на подключение
Клиент (например, веб-приложение) отправляет запрос на подключение к базе. Вместо создания нового процесса сервер ищет свободное соединение в пуле DRCP.

🟠DRCP предоставляет соединение
Если в пуле есть свободное соединение, оно передается клиенту. Если нет – создается новое (если не превышен лимит).

🟠Клиент выполняет SQL-запрос
После завершения работы клиент "освобождает" соединение. Вместо закрытия соединение возвращается в пул, чтобы быть использованным другим клиентом.

🟠Диспетчер соединений управляет пулом
Connection Broker (диспетчер соединений) следит за балансировкой нагрузки и распределяет соединения между клиентами.

🚩Как включить DRCP?

Включаем DRCP на сервере
EXEC DBMS_CONNECTION_POOL.START_POOL();


Проверяем статус пула
SELECT * FROM V$CPOOL_STATS;


Подключаем клиента с использованием DRCP
CONNECT user/password@database:pooled


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Как сделать доступ из дома к серверу в Private Subnet в Data Center?

- Использовать VPN (OpenVPN, WireGuard);
- Настроить Bastion Host;
- Применить SSH-туннелирование;
- Использовать прокси или zero-trust платформы (например, Tailscale).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊1
🤔 Как бы вы настроили уведомления для сервисов которые находятся без интернета полностью локализованы закрыты от всего извне?

Для настройки уведомлений в изолированной сети без доступа к интернету используйте локальные инструменты и системы. Основные методы включают локальные почтовые серверы, мессенджеры и системы управления инцидентами.

🚩Локальный почтовый сервер (SMTP)

1⃣Установка
sudo apt update
sudo apt install postfix


2⃣Настройка
Отредактируйте /etc/postfix/main.cf
myhostname = local.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
relay_domains = $mydestination


3⃣Перезапуск Postfix
sudo systemctl restart postfix   


4⃣Проверка
echo "Test email" | mail -s "Test Subject" [email protected]


🚩Локальный мессенджер (Mattermost)

1⃣Установка Mattermost
Следуйте [документации](https://docs.mattermost.com/install/self-managed-install.html).

2⃣Настройка
Создайте каналы и пользователей.

3⃣Интеграция с мониторингом
Используйте веб-хуки Mattermost для уведомлений.

🚩Системы управления инцидентами (Zabbix)

1⃣Установка Zabbix
Следуйте [документации](https://www.zabbix.com/download).

2⃣Настройка
Настройте хосты, триггеры и действия.

3⃣Настройка уведомлений
Медиатипы: Настройте Email и SMS. Пользователи: Создайте пользователей и уведомления.

🚩Локальный стек мониторинга (Prometheus, Alertmanager)

1⃣Установка Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz
tar xvf prometheus-2.26.0.linux-amd64.tar.gz
cd prometheus-2.26.0.linux-amd64
./prometheus --config.file=prometheus.yml


2⃣Установка Alertmanager
wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
tar xvf alertmanager-0.21.0.linux-amd64.tar.gz
cd alertmanager-0.21.0.linux-amd64
./alertmanager --config.file=alertmanager.yml


3⃣Настройка алертинга в Prometheus
groups:
- name: example-alerts
rules:
- alert: HighCPUUsage
expr: avg_over_time(node_cpu_seconds_total{mode="idle"}[5m]) < 20
for: 2m
labels:
severity: critical
annotations:
summary: "High CPU usage detected"
description: "CPU usage is above 80% for more than 2 minutes"


4⃣Настройка Alertmanager
global:
smtp_smarthost: 'localhost:25'
smtp_from: '[email protected]'
route:
receiver: 'email-notifications'
receivers:
- name: 'email-notifications'
email_configs:
- to: '[email protected]'
send_resolved: true


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
🤔 Где хранятся данные о пользователях системы?

Пользователи описаны в системном файле, содержащем имя, ID, домашний каталог и shell. Это основной источник данных о локальных пользователях.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊6👍1🔥1
🤔 Если запустить любой плейбук через консоль какая там появится первая надпись?

При запуске Ansible-плейбука через консоль командой
ansible-playbook playbook.yml


Первая строка, которая появится в консоли
PLAY [имя_плейбука] *****************************************************


Пример запуска
ansible-playbook site.yml


Вывод в консоли:
PLAY [Install and configure web server] *********************************


Если name: не указан в плейбуке, будет:
PLAY [Unnamed Play] ****************************************************


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4💊4👍1
🤔 Что такое Kubernetes?

Kubernetes — это открытая платформа для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями. Она организует контейнеры, работающие на физических или виртуальных машинах, в логические единицы для более удобного управления и открытия сервисов.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊6
🤔 Если мы запускаем приложение в контейнере какой-то микросервис чем будет отличаться под в данном случае?

Если запустить микросервис просто в контейнере (например, через docker run), он будет работать как отдельный процесс, без встроенной системы управления и оркестрации.
Но если запустить его в Kubernetes, он будет работать в поде (Pod).

🚩Когда использовать контейнер, а когда под?

Если нужен просто контейнер → docker run my-app.
Если нужен отказоустойчивый микросервис → Kubernetes Pod.
Если несколько контейнеров должны работать вместе (например, приложение + sidecar) → Pod.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊9👍1
🤔 Каким сервисом пользуешься для настройки безопасности и доступа к кластеру?

- RBAC (Role-Based Access Control) — основной встроенный механизм.
- OPA (Open Policy Agent) и Gatekeeper — для политик доступа на уровне объектов.
- kube-apiserver + Authentication + Authorization + Admission controllers.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что означают DNS records?

DNS Records – это записи, которые управляют маршрутизацией домена в интернете. Они определяют, куда направлять запросы, какие IP-адреса использовать и какие сервисы подключены к домену.

🚩Примеры использования

A-запись (IP-адрес домена)
example.com.   IN  A   192.168.1.1


CNAME-запись (псевдоним)
www.example.com.  IN  CNAME  example.com.


MX-запись (почтовый сервер)
example.com.  IN  MX  10 mail.example.com.


TXT-запись (SPF, верификация)
example.com.  IN  TXT  "v=spf1 include:_spf.google.com ~all"


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Как сделать так, чтобы наряду с облачным кубером некоторые поды сохранять на физических серверах?

Необходимо настроить планировщик Kubernetes так, чтобы он размещал часть подов на конкретных физических узлах. Для этого используются механизмы node affinity, taints/tolerations или nodeSelector.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊1
🤔 Как сделать rebase на main branch?

Выполнить rebase на main в Git означает "перенести" ваши изменения поверх актуального состояния основной ветки (main).

🟠Переключаемся на вашу текущую ветку
Допустим, вы работаете в ветке feature-branch:
git checkout feature-branch


🟠Выполняем rebase на `main`
Сначала убедимся, что main обновлена:
git checkout main
git pull origin main


Теперь выполняем сам rebase:
git checkout feature-branch
git rebase main


🟠Разрешение конфликтов (если есть)
Если у вас есть конфликты, Git остановит процесс и попросит их решить.
Откройте файлы с конфликтами, исправьте их.
Добавьте исправленные файлы:

   git add <файл>


Продолжите rebase:

   git rebase --continue


🟠Обновление удалённого репозитория
Если rebase прошёл успешно, вам нужно форсированно обновить удалённую ветку (так как история изменилась):
git push origin feature-branch --force


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊1
🤔 Как понять с кем коммуницирует сервер?

Сервер может устанавливать сетевые соединения с другими устройствами. Чтобы это отследить, применяются утилиты, которые показывают IP-адреса, порты и процессы, участвующие в сетевой коммуникации. Это помогает выявить входящие и исходящие подключения.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊12👍1
🤔 Поды висят в pending, в чем проблема?

Pod в Pending означает, что он не может быть запущен, потому что Kubernetes не может его назначить (schedule) на ноду.
Нет свободных ресурсов на нодах (CPU, RAM)
Неподходящие nodeSelector, affinity или taints
Нет доступных узлов (все NotReady)
Проблемы с PersistentVolume (PVC не привязан)
Ошибки в CNI (сеть Kubernetes)

🚩Проверяем статус подов (`kubectl get pods`)

Команда
kubectl get pods -A


🚩Нет свободных ресурсов на нодах

Команда:
kubectl describe pod my-app-1


🚩Проблема с `nodeSelector`, `affinity`, `taints`

Если под настроен только на определенные ноды, он может не найти подходящую.
kubectl describe pod my-app-1


Вывод:
0/3 nodes are available: 3 node(s) didn't match pod affinity/selector.


🚩Все ноды в состоянии `NotReady`

Проверяем статус нод
kubectl get nodes


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤔 Что такое ресурс в Terraform?

Ресурс — это основная строительная единица, которая описывает один объект инфраструктуры: например, виртуальная машина, сеть, база данных.
Ресурсы объявляются в *.tf файлах и управляются через провайдеры (aws_instance, google_storage_bucket и т.д.).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 С каким максимальным кол-ом адресов ОП может провзаимодействовать процессор?

Максимальное количество адресов оперативной памяти (ОП), с которыми может взаимодействовать процессор, зависит от ширины адресной шины процессора. Адресная шина определяет, сколько уникальных адресов памяти процессор может адресовать.

🚩Формула вычисления

Количество адресуемых ячеек памяти определяется по формуле:
\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).

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🤔 Что такое ReplicaSet и зачем нужен?

Это компонент Kubernetes, обеспечивающий нужное количество реплик подов.
1. Он автоматически запускает новые поды при сбоях существующих или при увеличении нагрузки.
2. Гарантирует поддержание заданного количества экземпляров приложения.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🤔 Расскажи про разницу PVC и full stack?

Понимание этих двух терминов поможет нам различить их предназначение и использование в контексте Kubernetes и программного обеспечения.

🚩PVC (Persistent Volume Claim)

Это объект в Kubernetes, который позволяет пользователям запрашивать выделение постоянного хранилища для подов. PVC абстрагирует детали физического хранилища, позволяя разработчикам и администраторам фокусироваться на объеме и типе хранилища, необходимого для приложения, без необходимости управлять деталями самого хранилища.

🚩Основные аспекты PVC

🟠Запрос хранилища
PVC определяет запрос на объем хранилища и его характеристики, такие как размер и класс хранилища (Storage Class).

🟠Абстракция хранилища
PVC абстрагирует конкретные детали физического хранилища, предоставляя единый интерфейс для запросов хранилища.

🟠Динамическое и статическое связывание
PVC может использовать как динамическое связывание (где Kubernetes автоматически создает PV на основе PVC), так и статическое связывание (где администраторы заранее создают PV).

🟠Совместимость с подами
PVC могут быть подключены к подам, обеспечивая постоянное хранилище для приложений.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: standard


🚩Full Stack

Это термин, используемый для описания разработчиков или инженеров, которые обладают навыками и знаниями для работы со всеми уровнями разработки программного обеспечения, от фронтенда до бэкенда, включая базы данных, серверы и даже DevOps практики.

🚩Основные аспекты Full Stack разработки

🟠Фронтенд
Создание пользовательских интерфейсов с использованием HTML, CSS, JavaScript и фреймворков, таких как React, Angular или Vue.js.

🟠Бэкенд
Разработка серверной логики и API с использованием языков программирования, таких как Python, Node.js, Ruby, Java или PHP.

🟠Базы данных
Работа с реляционными (например, MySQL, PostgreSQL) и нереляционными (например, MongoDB, Redis) базами данных.

🟠DevOps
Управление развертыванием, настройкой серверов, CI/CD пайплайнами, мониторингом и масштабированием приложений.

🟠Сетевые технологии
Понимание протоколов, таких как HTTP/HTTPS, REST, WebSockets, и работа с серверными технологиями, такими как Nginx или Apache.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊28🤔6
🤔 Как происходит процесс сборки в CI/CD?

Последовательно:
1. Checkout кода из репозитория.
2. Сборка артефактов (jar, docker-образ, бинарник и т.д.).
3. Тестирование (юнит, интеграция).
4. Анализ кода (Sonar, Linter).
5. Публикация артефакта в регистри или хранилище.
6. Деплой в среду (staging/prod).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊2👍1
🤔 Что такое брокеры сообщений?

Это программные системы, которые позволяют обмениваться данными между разными компонентами приложения или между различными приложениями. Они действуют как посредники, принимая сообщения от отправителей (producers) и доставляя их получателям (consumers).

🚩Основные функции брокеров сообщений

🟠Прием и маршрутизация сообщений
Сообщения отправляются от одного компонента и доставляются нужному получателю. Брокер определяет, куда отправить сообщение, используя темы (topics), очереди (queues) или маршруты (routing keys).

🟠Асинхронное взаимодействие
Отправитель может передать сообщение, не дожидаясь его обработки, что повышает производительность системы.

🟠Очереди сообщений
Если получатель временно недоступен, сообщение сохраняется в очереди до тех пор, пока оно не будет доставлено.

🟠Гарантированная доставка
Некоторые брокеры предоставляют механизмы подтверждения получения сообщений (acknowledgment), чтобы избежать их потери.

🟠Распределение нагрузки
Сообщения могут быть обработаны несколькими получателями, что позволяет распределить нагрузку между ними.

🟠Фильтрация и маршрутизация
Сообщения доставляются только тем потребителям, которые их ожидают, используя фильтры или ключи маршрутизации.

🚩Примеры использования брокеров сообщений

🟠Микросервисы
Компоненты приложения обмениваются данными через брокер, что позволяет им оставаться изолированными и независимыми.

🟠Логирование и мониторинг
Сбор логов и метрик от множества источников с их дальнейшей обработкой.

🟠Управление задачами
Постановка задач в очередь для выполнения одним или несколькими воркерами.

🟠Интеграция систем
Связывание разнородных систем, которые обмениваются данными.

🚩Примеры брокеров сообщений

🟠RabbitMQ
Протокол: AMQP (Advanced Message Queuing Protocol). Поддерживает очереди, маршрутизацию, подтверждения доставки. Хорошо подходит для сложных сценариев с разными типами маршрутизации.

🟠Apache Kafka
Протокол: Проприетарный. Отличается высокой производительностью и надежностью. Используется для потоковой обработки данных, аналитики в реальном времени.

🟠Redis (Pub/Sub)
Протокол: Redis. Простая и быстрая модель pub/sub. Хорошо подходит для временных сообщений без сохранения состояния.

🟠ActiveMQ
Протокол: AMQP, STOMP, MQTT. Гибкий и совместимый с различными сценариями.

🟠NATS
Легковесный и быстрый брокер для приложений, требующих низкой задержки.

🚩Как работают брокеры сообщений

Producers (отправители) отправляют сообщение в брокер.
Брокер размещает сообщение в соответствующей очереди или теме.
Consumers (получатели) получают сообщение: Либо сразу, если они активны. Либо позже, если оно сохраняется в очереди.

🚩Пример использования RabbitMQ

1⃣Отправитель публикует сообщение в очередь:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
connection.close()


2⃣Получатель забирает сообщение из очереди:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')

def callback(ch, method, properties, body):
print(f"Received {body}")

channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
channel.start_consuming()


🚩Плюсы использования

Разделение ответственности
Компоненты системы сосредотачиваются на своих задачах, а не на доставке данных.
Масштабируемость
Легко добавлять новых потребителей или отправителей.
Устойчивость к сбоям
Брокеры обеспечивают сохранность сообщений, даже если один из компонентов временно недоступен.
Гибкость
Возможность использовать различные стратегии маршрутизации и обработки данных.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3👍1