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

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

Відкрити в Telegram
5 511
Підписники
-224 години
-47 днів
-330 день
Архів дописів
🤔 В каких случаях удобно использовать Kubernetes, а в каких Docker Compose? - Docker Compose — подходит для простых локальных окружений, отладки, микросервисов в одной машине. - Kubernetes — для продакшн-окружений, масштабируемости, отказоустойчивости, автодеплоя. Kubernetes нужен там, где требуется оркестрация, распределённость и гибкость. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как задать права на всё? В Linux права доступа к файлам и папкам регулируются с помощью команд chmod и chown. 🟠Назначение всех прав (777) Если вам нужно дать полный доступ ко всем файлам и папкам, используйте
chmod -R 777 /путь/к/папке
-R (recursive) — применяет права ко всем вложенным файлам и каталогам. 777 означает: 7 (чтение, запись, выполнение) для владельца 7 (чтение, запись, выполнение) для группы 7 (чтение, запись, выполнение) для всех остальных 🟠Передача владения (если нет прав) Если текущий пользователь не владеет файлами, назначьте нового владельца
chown -R username:group /путь/к/папке
username — новый владелец group — новая группа 🟠Лучший вариант — более безопасные права Вместо 777 лучше дать только нужные права: Для исполняемых файлов: chmod 755 Для конфигураций и данных: chmod 644 Для приватных ключей и чувствительных файлов: chmod 600 Ставь 👍 и забирай 📚 Базу знаний

💥 eBPF: рентгеновское зрение для production — видим сеть, безопасность и узкие места прямо в ядре Linux 🔥 22 января в 19:00
💥 eBPF: рентгеновское зрение для production — видим сеть, безопасность и узкие места прямо в ядре Linux 🔥 22 января в 19:00 мск — бесплатный открытый вебинар OTUS Устали искать причину падения сервиса часами? А что если увидеть всё сразу: кто куда коннектится, где тормозит сеть, какой процесс подозрительно себя ведёт — и всё это без агентов, без overhead и без перезапуска? На вебинаре покажем настоящую магию eBPF в живых демо. 📌 Что будет: — Живое демо: ловим сетевые проблемы с Cilium Hubble — Живое демо: отлавливаем угрозы в реальном времени с Tetragon — Диагностируем производительность без остановки сервисов — Архитектура eBPF простыми словами — как это вообще работает 🎯 После вебинара вы сможете: — Моментально находить узкие места в продакшене без рестартов — Заменить десятки тяжёлых агентов одним лёгким eBPF-решением — Видеть инциденты безопасности, которые пропускают традиционные инструменты — Понимать, когда eBPF — это спасение, а когда лучше обойтись классикой 👉 Регистрация уже открыта https://otus.pw/tpNJ/ Вебинар приурочен к старту курса «DevOps-инженер: практики и инструменты», где eBPF и современная наблюдаемость — один из ключевых блоков программы. Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576

🤔 Какие паттерны Git есть? Некоторые распространённые паттерны ветвления: 1. Git Flow — основная ветка main/master, разработка в develop, релизы и фичи — отдельные ветки. 2. GitHub Flow — коммиты прямо в main через pull-request'ы. 3. GitLab Flow — сочетание Git Flow и CI/CD: возможность работать как с protected branches, так и напрямую. 4. Trunk-Based Development — вся работа в одной главной ветке (main), feature flags для управления выпуском. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как сделать так чтобы клиенты отдавали метрики в Prometheus? В Prometheus данные собираются по pull-модели – сервер сам запрашивает метрики у клиентов. Чтобы клиенты отдавали метрики, нужно: 1. Настроить приложение на экспонирование метрик в формате Prometheus. 2. Добавить Prometheus job для сбора этих метрик. 3. Опционально – использовать Pushgateway, если pull-модель не подходит. 🚩Экспонирование метрик в формате Prometheus Если приложение написано на Go, Python, Java или Node.js. Prometheus предлагает официальные клиентские библиотеки: Go: [prometheus/client_golang](https://github.com/prometheus/client_golang) Python: [prometheus_client](https://github.com/prometheus/client_python) Java: [simpleclient](https://github.com/prometheus/client_java) Node.js: [prom-client](https://github.com/siimon/prom-client) Пример для Python 1⃣Установим библиотеку
pip install prometheus_client
2⃣Добавим в код экспонирование метрик
from prometheus_client import start_http_server, Counter
import time

# Создаем счетчик запросов
REQUEST_COUNT = Counter('app_requests_total', 'Total requests')

def process_request():
    REQUEST_COUNT.inc()  # Увеличиваем счетчик
    time.sleep(1)  # Имитация обработки запроса

if __name__ == '__main__':
    start_http_server(8000)  # Открываем метрики на 8000 порту
    while True:
        process_request()
🚩Пример для Node.js 1⃣Установим библиотеку:
npm install prom-client express
2⃣Код сервера:
const express = require('express');
const client = require('prom-client');

const app = express();
const collectDefaultMetrics = client.collectDefaultMetrics;
collectDefaultMetrics();

const requestCounter = new client.Counter({
  name: 'http_requests_total',
  help: 'Total HTTP requests',
});

app.get('/', (req, res) => {
  requestCounter.inc();
  res.send('Hello, World!');
});

app.get('/metrics', (req, res) => {
  res.set('Content-Type', client.register.contentType);
  res.end(client.register.metrics());
});

app.listen(3000, () => {
  console.log('Server running on port 3000');
});
🚩Настроить Prometheus для сбора метрик Добавляем job в prometheus.yml
scrape_configs:
  - job_name: 'my_app'
    static_configs:
      - targets: ['app_host:8000']
🚩Push-модель через Pushgateway (если нужно) Если клиент не может сам отдавать метрики (например, это краткоживущий job), можно использовать Pushgateway. Запускаем Pushgateway:
docker run -d -p 9091:9091 prom/pushgateway
Отправляем метрики через curl
echo "job_execution_time 5.3" | curl --data-binary @- http://localhost:9091/metrics/job/my_batch_job
Настраиваем Prometheus на сбор данных из Pushgateway
scrape_configs:
  - job_name: 'pushgateway'
    static_configs:
      - targets: ['localhost:9091']
Ставь 👍 и забирай 📚 Базу знаний

🤔 Можно ли откатить деплоймент? Да. Kubernetes поддерживает откат на предыдущую ревизию: - С помощью команды kubectl rollout undo deployment <имя>. - Можно указать конкретную ревизию, если нужно вернуться дальше. Это позволяет безопасно вернуться к предыдущей стабильной версии. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как определить ресурс, который необходим одной node? Чтобы определить нагрузку на Node и правильно выделить ресурсы, нужно: Проверить текущее потребление ресурсов (CPU, RAM, диски)* Оценить нагрузку от подов (requests и limits) Использовать мониторинг (Prometheus, Grafana, kubectl top) 🚩Проверить нагрузку на Node (`kubectl top node`) Команда
sh  
kubectl top nodes  
Вывод
NAME        CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%  
node-1      500m         25%    2Gi             50%  
node-2      1000m        50%    4Gi             80%  
🚩Проверить потребление ресурсов подами (`kubectl top pods`) Команда
sh  
kubectl top pods --all-namespaces  
Вывод
NAMESPACE   POD            CPU(cores)   MEMORY(bytes)  
default     web-app-1      250m         256Mi  
default     web-app-2      300m         512Mi  
monitoring  prometheus-1   600m         1Gi  
🚩Анализ `requests` и `limits` подов Команда
sh  
kubectl describe node node-1  
Вывод (пример секции Allocatable)
Allocatable:  
  cpu:                4  
  memory:             8Gi  
  pods:               110  
Проверить requests и limits у подов
sh  
kubectl describe pod my-pod  
Вывод
Requests:  
  cpu:     500m  
  memory:  1Gi  
Limits:  
  cpu:     1  
  memory:  2Gi  
🚩Использование Prometheus и Grafana для анализа нагрузки Prometheus-запросы для анализа Node Средняя загрузка CPU за 5 минут
promql  
avg(rate(node_cpu_seconds_total[5m])) * 100  
Среднее использование памяти
promql  
avg(node_memory_Active_bytes) / avg(node_memory_MemTotal_bytes) * 100
Ставь 👍 и забирай 📚 Базу знаний

Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как привлечь целевую аудиторию 💰👌 Попробовать #реклама yandex.ru О рекламодателе

🤔 Что из себя представляет пайплайн, какие стадии? CI/CD пайплайн — это последовательность стадий (stages), включающих набор job-ов: - build — сборка приложения. - test — юнит и интеграционные тесты. - lint — проверка стиля и ошибок. - deploy — выкладка в dev/stage/prod. - cleanup — удаление временных артефактов, откаты. Каждый job может быть зависим от предыдущих. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чем отличие девопс-инженера от sre-инженера? DevOps-инженер и SRE (Site Reliability Engineer) — это роли, которые пересекаются в своих задачах, но имеют разные акценты и подходы. 🚩Определение ролей 🟠DevOps-инженер Основная цель: Ускорить и автоматизировать процесс разработки, тестирования и развертывания приложений. Подход: Сосредоточен на создании и поддержке CI/CD, инфраструктуры как кода (IaC) и инструментах автоматизации. Фокус: Эффективность процессов разработки. Улучшение взаимодействия между командами разработки (Dev) и эксплуатации (Ops). 🟠SRE-инженер Основная цель: Обеспечение стабильности, надежности и производительности системы в продакшене. Подход: Применяет инженерные подходы и автоматизацию для управления операциями и масштабированием. Фокус: Стабильность и надежность системы. Мониторинг, устранение сбоев и управление инцидентами. Ставь 👍 и забирай 📚 Базу знаний

Квартиры в Новостройке СПб. Рассрочка от застройщика Жилой комплекс "Квартал Заречье" Санкт-Петербург. Колпино. 4 девятиэтажных жилых корпуса 8-этажный крытый гараж на 496 парковочных мест В живописном месте у реки Ижора. На первых этажах будут размещены магазины, кофейни, поликлиника и зона коворкинга. Перейти на сайт Проектная декларация на сайте https://наш.дом.рф/. Застройщик: ООО "СЗ "ЗАГОРОДНАЯ, 71". Финансовые услуги оказывает: ПАО Сбербанк. #реклама квартал-заречье.рф О рекламодателе

🤔 Чем отличается headless-сервис от любого другого? Headless-сервис (ClusterIP: None) не использует прокси и балансировку, а напрямую возвращает IP-адреса всех подов. Используется для: - stateful-приложений (например, БД кластеров); - сервисов, которым нужно напрямую знать об остальных нодах. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие есть три вида монтирования в докере? В Docker есть три типа монтирования данных в контейнеры: Volumes (Тома) – рекомендуемый способ хранения данных Bind Mounts (Привязанные тома) – монтирование локальных файлов/папок Tmpfs (Временное хранилище в RAM) – для быстрого доступа без записи на диск 🚩Volumes (Тома) – лучший вариант хранения данных Данные хранятся внутри Docker (/var/lib/docker/volumes) Можно использовать в нескольких контейнерах Не зависят от файловой системы хоста
sh  
docker volume create mydata  
docker run -d -v mydata:/app/data --name mycontainer ubuntu  
Удаление тома (только если он не используется)
sh  
docker volume rm mydata  
🚩Bind Mounts (Привязанные тома) – монтирование папок с хоста Монтирует директорию с хоста в контейнер Изменения сразу видны на хосте Зависит от структуры файлов на хосте
sh  
docker run -d -v /home/user/logs:/app/logs --name mycontainer ubuntu  
🚩Tmpfs (Временное хранилище в RAM) – быстрый, но не сохраняющийся вариант Хранит данные в оперативной памяти (RAM) Очень быстрое чтение/запись Пропадает при перезапуске контейнера Пример: создать tmpfs-монтирование для /app/cache
sh  
docker run -d --tmpfs /app/cache:size=100m --name mycontainer ubuntu
Ставь 👍 и забирай 📚 Базу знаний

🤔 Если запустить любой плейбук через консоль, какая там появится первая надпись? Обычно первой появляется надпись: PLAY [название play] — это начало выполнения плейбука и определение группы хостов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

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

🤔 Что поднимали на Terraform? Terraform — IaC-инструмент от HashiCorp: - Использовали для: - Развёртывания кластеров EKS. - Конфигурации VPC, IAM, S3, RDS. - Подключения ресурсов между регионами. Ценность — модульность, контроль и версионирование. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Динамическая маршрутизация и разные протоколы динамической маршрутизации, ebgp ibgp, константы bgp. На чём сейчас принято строить bgp-пиринги? 🟠Динамическая маршрутизация Динамическая маршрутизация – это механизм автоматического выбора маршрута на основе изменяющихся сетевых условий. В отличие от статической маршрутизации, она автоматически адаптируется к изменениям в сети. Протоколы динамической маршрутизации делятся на: Протоколы внутреннего шлюза (IGP – Interior Gateway Protocol) RIP (Routing Information Protocol) – устаревший, работает на алгоритме дистанционно-векторного маршрутизации. OSPF (Open Shortest Path First) – основан на SPF (Dijkstra) и работает по принципу линк-стейт. IS-IS (Intermediate System to Intermediate System) – аналог OSPF, но чаще используется в провайдерских сетях. Протоколы внешнего шлюза (EGP – Exterior Gateway Protocol) BGP (Border Gateway Protocol) – основной протокол маршрутизации в интернете. 🟠BGP: Основной протокол глобальной маршрутизации eBGP vs iBGP BGP бывает двух типов: eBGP (External BGP) – маршрутизация между автономными системами (AS). Используется для обмена маршрутами между разными организациями или провайдерами. iBGP (Internal BGP) – работает внутри одной AS, передавая BGP-маршруты между роутерами этой сети. 🚩Константы BGP (Attributes) BGP использует атрибуты маршрута для выбора наилучшего пути. Основные атрибуты: 🟠Local Preference приоритетный маршрут внутри AS (чем выше, тем лучше). 🟠AS Path список AS, через которые проходит маршрут (короче – лучше). 🟠MED (Multi-Exit Discriminator) предпочтение одного из выходов из AS (меньше – лучше). 🟠Origin источник маршрута (IGP < EGP < Incomplete). 🟠Community метки маршрутов для упрощения политики маршрутизации. 🟠Weight (Cisco-only) локальный параметр (чем больше, тем лучше). 🚩На чём сейчас строят BGP-пиринги? BGP можно развернуть на разных платформах, включая аппаратные и программные решения: 🟠Оборудование (Аппаратные маршрутизаторы) Cisco (IOS, IOS-XE, IOS-XR, NX-OS) – классика для крупных сетей. Juniper (Junos OS) – мощное решение для дата-центров и операторов. Arista (EOS) – высокопроизводительные маршрутизаторы для ЦОДов. Huawei (VRP) – популярно в крупных корпоративных сетях. 🟠Программные решения (SOFT-router) FRRouting (FRR) – open-source, поддерживает BGP, OSPF, IS-IS. BIRD – лёгкий BGP-демон для Linux, используется в IX (Internet Exchange). GoBGP – BGP-демон, написанный на Go. VyOS – Linux-маршрутизатор с поддержкой BGP. MikroTik (RouterOS) – бюджетное, но мощное решение. Ставь 👍 и забирай 📚 Базу знаний

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

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

🤔 В каком месте пайплайна нужно подключать новую инфраструктуру, нужно ли её как-то готовить? 1. Место в пайплайне: - Подключение инфраструктуры происходит в начальных шагах, перед тестированием и деплоем. 2. Подготовка: - Настройте сервер, проверьте доступность и корректность конфигурации. - Убедитесь, что инфраструктура поддерживает требования приложения (например, порты, доступ к базам данных). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний