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

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

Kanalga Telegram’da o‘tish
5 508
Obunachilar
-324 soatlar
-77 kunlar
-530 kunlar
Postlar arxiv
🤔 Для чего используются иниь контейнеры? Init-контейнеры (init containers) – это специальные контейнеры в поде, которые запускаются перед основным приложением. Они выполняют подготовительные задачи, а затем завершаются. 🚩Основные сценарии использования Init-контейнеров 🟠Подготовка окружения Создание директорий, загрузка конфигураций или файлов перед запуском основного контейнера. 🟠Ожидание зависимостей Проверка доступности БД, API или других сервисов перед запуском приложения. 🟠Миграции БД Выполнение migrations перед стартом веб-приложения. 🟠Проверка и валидация данных Убеждаемся, что все файлы и настройки корректны. 🚩Как работают Init-контейнеры? Запускаются последовательно (поочередно). Должны завершиться успешно, иначе весь под не стартует. Не перезапускаются после завершения. Не делят volume'ы с основным контейнером (могут передавать данные через shared volumes). 🚩Пример: Init-контейнер, проверяющий доступность БД
apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
  - name: main-app
    image: my-app:latest
    ports:
    - containerPort: 8080
  initContainers:
  - name: wait-for-db
    image: busybox
    command: ['sh', '-c', 'until nc -z db-service 5432; do echo waiting for DB; sleep 2; done;']
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое IaaS? Infrastructure as a Service — модель, в которой пользователю предоставляются виртуальные машины, диски, сети и прочее, а он сам управляет ОС и ПО. Пример: AWS EC2, Google Compute Engine. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Где хранятся данные о группах которые существуют в системе? В Linux информация о группах пользователей хранится в файле: /etc/group — основной файл, содержащий список всех групп системы. 🚩Как посмотреть список групп? Вывести содержимое файла /etc/group
cat /etc/group
Формат строк в файле
имя_группы:x:GID:пользователи
Пример
root:x:0:
sudo:x:27:alice,bob
developers:x:1001:john,mary
Найти группу по имени
grep '^sudo:' /etc/group
Выведет
sudo:x:27:alice,bob
Узнать, в каких группах состоит пользователь
groups alice
или
id -Gn alice
Выведет
alice sudo developers
🚩Где ещё хранятся группы? 🟠Файл `/etc/gshadow` хранит пароли групп Если у группы есть пароль (редкость), он хранится здесь. Формат:
  имя_группы:пароль:GID:админы_группы
Пример:
sudo:!:27:
developers:!:1001:john
Посмотреть содержимое
sudo cat /etc/gshadow
🟠LDAP или Active Directory (если система подключена к домену) Если используется корпоративный домен, данные о группах могут храниться в LDAP или Active Directory.
getent group
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что нужно сделать, чтобы использовать любую питон-библиотеку? - Установить её через pip install имя_пакета. - Лучше — в виртуальной среде: - python -m venv venv && source venv/bin/activate && pip install Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как мы можем с помощью cloudfront сохранить бюджет на использование сервисов? Amazon CloudFront — это CDN (Content Delivery Network), которая помогает оптимизировать затраты на трафик и нагрузку на серверы. Использование CloudFront позволяет экономить бюджет на AWS-сервисах следующими способами: 🟠Кеширование контента (уменьшение нагрузки на бэкенд) CloudFront кэширует статический и динамический контент, что снижает количество запросов к вашим основным серверам (например, EC2, S3, API Gateway, Lambda). Меньше запросов к S3 (меньше операций GET, а они платные). Меньше запросов к API Gateway и Lambda (так как CloudFront может кешировать ответы API). Экономия на EC2 и RDS, так как нагрузка перераспределяется. 🟠Использование бесплатного трафика между CloudFront и S3 Когда CloudFront забирает файлы из S3 в том же регионе, за исходящий трафик из S3 не взимается плата. Исходящий трафик из S3 в интернет стоит ≈ $0.09 за ГБ. Исходящий трафик из CloudFront в интернет дешевле (например, первые 1 ТБ в месяц — бесплатно). 🟠Снижение стоимости глобального трафика Если у вас клиенты в разных странах, CloudFront дешевле, чем стандартный AWS-трафик. Исходящий трафик из CloudFront в интернет в среднем на 30-50% дешевле, чем прямой выход из EC2 или S3. AWS часто снижает цены на CloudFront трафик в рамках программ оптимизации. 🟠Фильтрация ненужного трафика (ботов, DDoS, парсеров) CloudFront позволяет использовать AWS WAF (Web Application Firewall) для блокировки вредоносных запросов. Меньше запросов к бэкенду (EC2, API Gateway, Lambda). Защита от DDoS (AWS Shield Standard бесплатен для CloudFront). 🟠Кеширование динамического контента CloudFront поддерживает TTL (Time-to-Live) для кэширования даже динамических API-ответов. Вместо запроса к API Gateway/Lambda, CloudFront может вернуть кэшированный ответ. Можно настроить "Stale While Revalidate" — клиент получает устаревший контент, пока идет обновление. 🟠Гибкое управление ценой через региональные edge-локации CloudFront позволяет управлять ценами, ограничивая определенные регионы. Можно исключить дорогие регионы (например, Южную Америку, где трафик дороже). Можно использовать AWS Origin Shield для дополнительного кеширования между регионами. 🟠Использование CloudFront Functions вместо AWS Lambda CloudFront поддерживает CloudFront Functions, которые выполняются прямо на edge-узлах и дешевле, чем Lambda@Edge. CloudFront Functions работают быстрее и стоят $0.10 за миллион запросов. Lambda@Edge стоит $0.60 за миллион запросов + плата за выполнение. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как хранить Helm шаблоны в GitLab? - В отдельном репозитории (infrastructure/helm-charts). - Или внутри проекта в папке helm/, charts/. - Можно сделать GitLab Pages Registry: - упаковывать чарты (helm package) - публиковать (helm repo index . + pages) Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какие есть метрики для измерения качества системы? Для измерения качества системы (особенно в DevOps, SRE и разработке) используют различные метрики производительности, надежности и доступности. 🚩Основные метрики качества системы 🟠Метрики "Четырёх ключевых показателей" (DORA) Эти метрики помогают оценить эффективность процессов DevOps: Lead Time for Changes (Время доставки изменений) — время от написания кода до его выхода в прод. Deployment Frequency (Частота развертываний) — как часто изменения попадают в прод. Mean Time to Restore (MTTR) (Среднее время восстановления) — как быстро исправляются инциденты. Change Failure Rate (Процент неудачных изменений) — доля развертываний, вызывающих сбои. 🟠Метрики надежности и доступности (SRE) Эти метрики помогают измерять надежность системы: SLA (Service Level Agreement) — договорное время доступности (например, 99.9%). SLO (Service Level Objective) — целевое значение доступности (например, 99.95%). SLI (Service Level Indicator) — фактические измеренные показатели (например, 99.93%). Error Rate — процент ошибок в системе (HTTP 500, таймауты и т. д.). Latency (Задержка) — время ответа системы на запросы. 🟠Метрики производительности Они показывают, насколько быстро работает система: CPU Utilization — загрузка процессора. Memory Usage — использование оперативной памяти. Disk I/O — скорость чтения/записи на диск. Network Throughput — пропускная способность сети. Response Time — время отклика системы. 🟠Метрики пользовательского опыта Оценивают удобство работы пользователей с системой: Apdex (Application Performance Index) — индекс удовлетворенности пользователей (0–1). TTFB (Time to First Byte) — время до получения первого байта ответа от сервера. Page Load Time — время полной загрузки страницы. Bounce Rate — процент пользователей, покинувших сайт без взаимодействия. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как работать с VictoriaMetrics? VictoriaMetrics — это высокопроизводительная time-series база данных. Чтобы с ней работать: - Писать метрики можно через: - Prometheus Remote Write API (/api/v1/write), - vmagent (аналог prometheus с проксированием), - вручную через HTTP POST. - Читать метрики: - по PromQL (совместим с Prometheus), - через vmui (веб-интерфейс), - или Grafana + Prometheus data source. - Развёртывание: - может быть один бинарник (для single-node), - или кластерная версия (vmselect, vminsert, vmstorage). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое squash в Docker? В Docker термин "squash" (от англ. "раздавить", "сплющить") относится к процессу объединения нескольких слоев образа Docker в один. Это делается для уменьшения размера итогового образа и оптимизации хранения. 🚩Зачем нужен `squash`? Docker-образы состоят из последовательности слоев. Каждый слой создается на основе команд в Dockerfile. Например, если ваш Dockerfile выглядит так:
FROM ubuntu:latest
RUN apt update && apt install -y nginx
RUN echo "Hello, World!" > /usr/share/nginx/html/index.html
🚩Как использовать `squash`? В Docker squash можно выполнить с помощью флага --squash при сборке образа:
docker build --squash -t my-squashed-image .
Для включения экспериментального режима: 1. Открываем /etc/docker/daemon.json (или создаем, если его нет). 2. Добавляем строку "experimental": true. 3. Перезапускаем Docker:
systemctl restart docker
🚩Пример с `squash` Без --squash
docker history my-image
С --squash
docker build --squash -t my-squashed-image .
docker history my-squashed-image
Ставь 👍 и забирай 📚 Базу знаний

🤔 Где бы хранил tfstate, если много разработчиков? При совместной работе tfstate лучше хранить в удалённом бекенде, чтобы: - Избежать конфликтов и потерь данных. - Обеспечить блокировку (state locking) и доступ из разных точек. Наиболее популярные варианты: - Amazon S3 + DynamoDB (для блокировок) - Terraform Cloud / Enterprise - Google Cloud Storage (GCS) - Azure Blob Storage Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как бы вы настроили уведомления для сервисов которые находятся без интернета полностью локализованы закрыты от всего извне? Для настройки уведомлений в изолированной сети без доступа к интернету используйте локальные инструменты и системы. Основные методы включают локальные почтовые серверы, мессенджеры и системы управления инцидентами. 🚩Локальный почтовый сервер (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" user@example.com
🚩Локальный мессенджер (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: 'alertmanager@local.example.com'
route:
  receiver: 'email-notifications'
receivers:
  - name: 'email-notifications'
    email_configs:
      - to: 'admin@local.example.com'
        send_resolved: true
Ставь 👍 и забирай 📚 Базу знаний

🤔 Кластер БД висит, запросы копятся, но другие выполняются быстро. Что происходит? Скорее всего: - Приложение удерживает блокировку, из-за чего остальные запросы висят в очереди. - Блокировки возникают при долгих UPDATE, INSERT, TRANSACTION, особенно без COMMIT. Что делать: 1. Проверить активные сессии и блокировки (pg_stat_activity — для PostgreSQL). 2. Выяснить какой запрос держит блокировку. 3. Убить зависшие транзакции или перезапустить зависший компонент. 4. Настроить таймауты транзакций и контроль количества соединений от приложения. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как определить опции запуска пайплайна при редактировании определенных ресурсов в гите? При работе с 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'
            }
        }
    }
}
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое blackhole? Blackhole (чёрная дыра) — это сетевая конфигурация, при которой пакеты сбрасываются, не уведомляя отправителя. Применяется для отказа от трафика, DDoS-защиты или маршрутизации нежелательного трафика. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что касается безопасности где хранить переменные секреты? Хранение секретных переменных, таких как пароли, ключи API, токены доступа и прочие конфиденциальные данные, требует особого подхода для обеспечения безопасности. Ниже описаны рекомендуемые методы и инструменты для безопасного хранения секретных переменных в различных средах разработки и производства. 🟠Использование специализированных хранилищ секретов HashiCorp Vault: Это инструмент для управления секретами и защиты данных. Он позволяет централизованно хранить, доступ к которым строго контролируется, и динамически создавать секреты. Преимущества: Поддержка динамических секретов, интеграция с большинством сред и технологий, высокий уровень безопасности. AWS Secrets Manager и Azure Key Vault: Эти облачные сервисы предоставляют управляемые решения для безопасного хранения и управления доступом к секретным данным, включая автоматическое обновление секретов. Преимущества: Интеграция с облачными сервисами, упрощение ротации секретов, мониторинг и логирование доступа. 🟠Инкапсуляция секретов в среде выполнения Docker Secrets и Kubernetes Secrets: Предлагают встроенные механизмы для безопасного хранения секретов, которые используются контейнерами во время выполнения. Преимущества: Локальная интеграция с системами оркестрации контейнеров, базовое шифрование на диске и управление доступом. 🟠Секреты в контролируемом CI/CD Платформы CI/CD, такие как GitLab и GitHub, предоставляют возможности для безопасного хранения переменных среды и секретов, которые могут быть использованы в процессах автоматизации без разглашения. Преимущества: Простота использования, интеграция с процессами разработки, защита от внешнего доступа. 🟠Шифрование секретов Инструменты шифрования: Использование инструментов, таких как GnuPG (GPG), для шифрования секретов перед их сохранением в системах контроля версий или конфигурационных файлах. Преимущества: Высокий уровень безопасности, контроль доступа к секретам на уровне пользователя. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как написать shell-скрипт, чтобы он всегда выполнялся от рута? В начале скрипта делается проверка пользователя, и если это не root, скрипт завершает выполнение или перезапускает себя с sudo. Это предотвращает ошибки доступа к системным файлам. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что внутри директории Linux: /proc? Это виртуальная файловая система, предоставляющая доступ к информации о процессах и системе в реальном времени. Она не занимает место на диске, так как данные в ней формируются ядром Linux динамически. Эта файловая система называется procfs (процессная файловая система). 🚩Основное назначение `/proc` Предоставляет информацию о запущенных процессах, ресурсах системы и конфигурации ядра. Позволяет взаимодействовать с ядром, изменять параметры системы и получать данные о состоянии процессов. 🚩Ключевые элементы внутри `/proc` 🟠Каталоги с идентификаторами процессов (`/proc/[PID]`) Каждый процесс в системе имеет каталог в /proc, название которого соответствует его PID (Process ID). В этих каталогах содержится информация о конкретном процессе: /proc/[PID]/cmdline: Команда, запустившая процесс. /proc/[PID]/cwd: Символическая ссылка на текущую рабочую директорию процесса. /proc/[PID]/exe: Символическая ссылка на исполняемый файл процесса. /proc/[PID]/fd: Директория с открытыми файловыми дескрипторами. /proc/[PID]/status: Детализированная информация о состоянии процесса (UID, GID, память и т.д.). 🟠Файлы системы /proc/cpuinfo Информация о процессоре (модель, частота, количество ядер).
cat /proc/cpuinfo
/proc/meminfo Информация о памяти (доступная память, кэш, использованная память).
cat /proc/meminfo
/proc/diskstats: Статистика ввода-вывода для дисков. /proc/uptime: Время работы системы с момента загрузки. /proc/loadavg: Средняя нагрузка на систему за последние 1, 5 и 15 минут. 🟠Конфигурационные файлы ядра /proc/sys: Содержит настраиваемые параметры ядра. Например, можно изменить значение максимального количества открытых файлов:
echo 100000 > /proc/sys/fs/file-max
Некоторые популярные настройки /proc/sys/net/ipv4/ip_forward: Управление пересылкой IPv4-пакетов. /proc/sys/kernel/pid_max: Максимальный PID, который может быть назначен процессу. 🟠Сетевые интерфейсы /proc/net: Информация о сетевых соединениях и интерфейсах. Примеры: /proc/net/dev: Статистика сетевых интерфейсов. /proc/net/tcp: Состояние TCP-соединений. 🟠Информация об устройствах /proc/devices: Список всех зарегистрированных устройств (символьных и блочных). /proc/partitions: Информация о разделах жесткого диска. Ставь 👍 и забирай 📚 Базу знаний

🤔 Как организовать кластеры? Зависит от целей, но базово: - Dev / Staging / Prod — разделение по средам. - По географии — например, кластер в каждом регионе. - По продуктам или командам — если изоляция важна. - Мультикластер — если нужно федеративное управление или глобальный сервис discovery. Важно: централизованное управление (ArgoCD, Flux), единая CI/CD-платформа, policy enforcement (OPA Gatekeeper, Kyverno). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как оптимизировать имедж? Оптимизация 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;"]
Ставь 👍 и забирай 📚 Базу знаний

🤔 Везде ли нужен IaC и почему? Не везде, но: - Нужен в средах, где важны повторяемость, масштабируемость, DevOps; - Для одиночных серверов или стартапов IaC может быть избыточен; - Он экономит время на масштабировании, развёртывании, восстановлении после сбоя Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний