DevOps | Вопросы собесов
5.51K subscribers
31 photos
1.31K links
Cайт easyoffer.ru
Реклама @easyoffer_adv
ВП @easyoffer_vp

Тесты t.me/+2P7cpjeyfDVlZjcy
Вакансии t.me/+i5KFWEWJ21hhYWEy
Download Telegram
🤔 К чему приведёт запуск двух Terraform одновременно?

Если два Terraform одновременно используют один и тот же tfstate, это может привести к:
- конфликтам изменений;
- потере состояния;
- рассинхронизации инфраструктуры.
Чтобы избежать этого, используют блокировки (например, через backend S3 + DynamoDB в AWS).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥1
🤔 С каким максимальным кол-ом адресов ОП может провзаимодействовать процессор?

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

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

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

Ставь 👍 и забирай 📚 Базу знаний
🔥1
🤔 Что такое OpsWorks?

AWS OpsWorks — это сервис управления конфигурациями, который:
- Поддерживает Chef и Puppet.
- Используется для автоматизации серверной инфраструктуры.
- Позволяет управлять слоями, версиями, скриптами и зависимостями.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥1
🤔 Какие Enterprise Firewall знаешь?

В мире корпоративных (Enterprise) межсетевых экранов (firewall) существует множество решений от разных вендоров. Основные из них:

🟠Palo Alto Networks (Next-Generation Firewall, NGFW)
Palo Alto — один из лидеров в сфере NGFW. Он использует глубокий анализ трафика и машинное обучение для выявления угроз.
Контроль трафика на уровне приложений (App-ID)
Инспекция SSL/TLS
Встроенная защита от вредоносных программ (WildFire)
Интеграция с SIEM/SOAR

🟠Cisco Firepower (ранее ASA с FirePOWER Services)
Cisco Firepower объединяет традиционные возможности Cisco ASA с функциями, полученными после покупки Sourcefire.
IPS/IDS (интеграция с Snort)
Защита от атак нулевого дня
Автоматизация защиты на базе машинного обучения
Полная интеграция с экосистемой Cisco

🟠3. Fortinet FortiGate
Fortinet — это NGFW, ориентированный на производительность и безопасность.
Встроенный SD-WAN
Антивирусный сканер и веб-фильтрация
DLP (Data Loss Prevention)
Поддержка IoT и OT-безопасности

🟠Check Point Next Generation Firewall
Check Point — один из старейших игроков в сфере межсетевых экранов, известный своими решениями безопасности.
Инспекция шифрованного трафика
Защита от APT (Advanced Persistent Threats)
Встроенный Threat Intelligence (ThreatCloud)
- Многослойная защита от DoS/DDoS

🟠Juniper Networks SRX
Juniper предлагает мощные межсетевые экраны, которые часто используются в телекоммуникациях.
Высокая производительность
Поддержка виртуализации (vSRX)
Гибкая маршрутизация и VPN
Интеграция с AI для автоматического обнаружения угроз

🟠Huawei USG (Unified Security Gateway)
Huawei предлагает сетевые экраны для корпоративного и государственного сектора.
Интеграция с 5G-сетями
Встроенные функции DDoS-защиты
Высокая масштабируемость

Ставь 👍 и забирай 📚 Базу знаний
👍1🤔1
🤔 В каких случаях удобно использовать Kubernetes, а в каких Docker Compose?

- Docker Compose — подходит для простых локальных окружений, отладки, микросервисов в одной машине.
- Kubernetes — для продакшн-окружений, масштабируемости, отказоустойчивости, автодеплоя.
Kubernetes нужен там, где требуется оркестрация, распределённость и гибкость.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔5
🤔 Где хранить приватный PGP ключ?

Приватный PGP-ключ – это чувствительные данные, которые нельзя хранить в незащищенных местах. Потеря или компрометация ключа может привести к утечке зашифрованных данных.

🚩Лучшие способы хранения приватного PGP-ключа

🟠На аппаратном токене (YubiKey, Nitrokey, SmartCard)
- Ключ никогда не покидает устройство.
- Физическая защита от копирования.
- Можно использовать для SSH, GPG, подписи кода.

🟠В защищенном хранилище (Bitwarden, 1Password, KeePassXC)
- Хранилище зашифровано и требует пароль или биометрию.
- Можно синхронизировать между устройствами без потери безопасности.
- Экспортировать ключ в зашифрованный файл:
  gpg --export-secret-keys --armor > private-key.asc


🟠В зашифрованном виде на диске (LUKS, VeraCrypt, EncFS)
- Физическая защита – даже если диск украдут, без пароля его не открыть.
- Работает на Linux, Windows, MacOS.
1⃣Создать зашифрованный контейнер с LUKS (Linux):
   cryptsetup luksFormat /dev/sdX
cryptsetup luksOpen /dev/sdX secure_disk
mkfs.ext4 /dev/mapper/secure_disk


2⃣Хранить ключ внутри /mnt/secure_disk/private-key.asc.

🟠4. В HSM или облачном KMS (AWS KMS, HashiCorp Vault, Azure Key Vault)
- Подходит для энтерпрайз-решений.
- Аппаратное шифрование (HSM) делает взлом практически невозможным.
- AWS KMS или Vault можно использовать для PGP.
vault kv put secret/pgp_key key="$(cat private-key.asc)"


Ставь 👍 и забирай 📚 Базу знаний
🤔 Для чего нужен Elasticsearch?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 Какой инструмент нам может помочь в снятии метрик с продукта?

Если вам нужно собирать метрики (нагрузка, ошибки, задержки, бизнес-показатели) с вашего продукта, то вот лучшие инструменты

🟠Prometheus + Grafana
Prometheus – база данных временных рядов (time-series DB) для хранения метрик.
Grafana – мощная визуализация метрик.
Метрики собираются экспортерами (node_exporter, blackbox_exporter и т. д.).
Данные хранятся в Prometheus.
Grafana показывает красивые графики.
rate(http_requests_total[5m])  # Запросы в секунду за 5 минут


🟠Zabbix
Устанавливается агент на сервер (zabbix-agent). Сервер собирает метрики и генерирует алерты.

Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Какие Enterprise Firewall есть?

- Palo Alto Networks;
- Cisco ASA/Firepower;
- Fortinet FortiGate;
- Check Point;
- Sophos XG.
Они обеспечивают фильтрацию трафика, VPN, инспекцию приложений и IDS/IPS-функции.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1🔥1
🤔 Почему плохо запускать контейнер от рута?

Запуск контейнеров от имени пользователя root (рута) в Docker является обычной практикой, но это может привести к серьезным проблемам безопасности. Вот основные причины, почему это считается плохой практикой:

🟠Повышение рисков безопасности:
Эксплуатация уязвимостей: Если злоумышленник получает доступ к контейнеру, запущенному от имени root, он может легко использовать уязвимости контейнера для атаки на хост-систему.
Злоумышленники: Контейнеры могут содержать уязвимые или злонамеренные коды, которые при запуске с привилегиями root могут получить доступ к чувствительной информации или вызвать сбои.

🟠Отсутствие изоляции:
Гостевая изоляция: Контейнеры должны быть изолированы от хост-системы. Запуск контейнера от имени root нарушает эту изоляцию, так как root внутри контейнера — это также root на хосте.
Повышенные привилегии: Контейнеры, запущенные от имени root, могут иметь доступ к системным ресурсам, что увеличивает риск нарушения безопасности.

🟠Нарушение принципа наименьших привилегий:
Принцип наименьших привилегий: Этот принцип гласит, что процесс должен иметь только те привилегии, которые необходимы для выполнения его задач. Запуск контейнера от имени root нарушает этот принцип, предоставляя ему избыточные права.

🚩Примеры проблем

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

🟠Доступ к файловой системе хоста:
Контейнер, запущенный от имени root, может получить доступ к критически важным файлам хостовой системы, изменять их или удалять, что может привести к нарушению работы всей системы.

🚩Как избежать запуска контейнеров от рута

Использование непривилегированных пользователей:
В Dockerfile можно создать пользователя с ограниченными привилегиями и переключиться на него.
FROM ubuntu:20.04
RUN useradd -m myuser
USER myuser
CMD ["myapp"]


Использование флага --user:
При запуске контейнера можно использовать флаг --user, чтобы указать непривилегированного пользователя.
docker run --user 1000:1000 myapp


Использование механизмов безопасности Docker:
Использование профилей seccomp для ограничения системных вызовов.
Использование AppArmor или SELinux для ограничения доступа контейнеров к системным ресурсам.

Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Где хранятся данные о группах в системе?

Информация о группах содержится в отдельном файле, где перечислены группы, их ID и список участников.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊8
🤔 Как разделять элементы CI и CD в jenkins?

В Jenkins CI (Continuous Integration) и CD (Continuous Delivery/Deployment) можно разделять на разные стадии (stages) или отдельные пайплайны. Это повышает гибкость, упрощает отладку и делает процесс масштабируемым.

🚩Разделение CI и CD внутри одного `Jenkinsfile`

Можно использовать разные стадии (stages) в Jenkinsfile:
Пример:
pipeline {
agent any

stages {
stage('CI: Build & Test') {
steps {
echo "📦 Сборка и тестирование кода"
sh 'mvn clean package' // Сборка
sh 'mvn test' // Юнит-тесты
}
}

stage('CI: Code Analysis') {
steps {
echo "🧐 Анализ кода (SonarQube)"
sh 'sonar-scanner'
}
}

stage('CD: Staging Deployment') {
steps {
echo "🚀 Деплой на стейджинг"
sh 'kubectl apply -f k8s/staging.yaml'
}
}

stage('CD: Production Deployment') {
when {
branch 'main' // Только для main-ветки
}
steps {
echo "🔥 Деплой в прод"
sh 'kubectl apply -f k8s/production.yaml'
}
}
}
}


🚩Отдельные пайплайны для CI и CD

Можно разделить CI и CD на разные пайплайны, используя Jenkins Multibranch Pipeline.
CI-пайплайн (Jenkinsfile.ci)
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
stage('Test') {
steps {
sh 'mvn test'
}
}
}
post {
success {
archiveArtifacts artifacts: '**/target/*.jar'
build job: 'CD-Pipeline', wait: false // Запуск CD после успешного CI
}
}
}


CD-пайплайн (Jenkinsfile.cd)
pipeline {
agent any
stages {
stage('Deploy to Staging') {
steps {
sh 'kubectl apply -f k8s/staging.yaml'
}
}
stage('Manual Approval') {
steps {
input message: "Deploy to Production?"
}
}
stage('Deploy to Production') {
steps {
sh 'kubectl apply -f k8s/production.yaml'
}
}
}
}


🚩Использование `Jenkins Shared Library` для разделения логики

Если много пайплайнов, лучше вынести CI/CD-логику в общую библиотеку (vars/ci.groovy, vars/cd.groovy).
Пример CI (vars/ci.groovy)
def call() {
pipeline {
agent any
stages {
stage('Build & Test') {
steps {
sh 'mvn clean package && mvn test'
}
}
}
}
}


Пример CD (vars/cd.groovy)
def call() {
pipeline {
agent any
stages {
stage('Deploy') {
steps {
sh 'kubectl apply -f k8s/production.yaml'
}
}
}
}
}


Jenkinsfile с использованием библиотек
@Library('my-shared-library') _

ci() // Запуск CI
cd() // Запуск CD


Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Если удалить terraform.tfstate, а потом сделать terraform init — что будет?

- terraform init не восстановит state.
- Terraform не будет знать, что уже развернуто, и при следующем apply может создать ресурсы заново.
- Лучше использовать terraform state pull/push или хранить state в remote backend (S3, GitLab, etc).


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍1
🤔 Что такое data source в графане?

Это источник данных, с которым Grafana может взаимодействовать для построения графиков, панелей мониторинга (dashboards) и выполнения запросов. Data Source определяет, как Grafana подключается к внешним системам мониторинга, базам данных или API для получения метрик, логов или другой информации.

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

🟠Типы Data Source
Grafana поддерживает множество типов источников данных, включая:
Системы мониторинга:
Prometheus
Zabbix
InfluxDB
Graphite
Лог-агрегаторы:
Loki
Elasticsearch
Splunk
Облачные сервисы:
AWS CloudWatch
Google Cloud Monitoring
Azure Monitor
Реляционные базы данных:
MySQL
PostgreSQL
API или внешние плагины:
JSON API
OpenTelemetry

🟠Функции Data Source
Подключение: Определяет параметры для соединения с внешним хранилищем данных, такие как URL, токены аутентификации, логин/пароль. Выполнение запросов: Обеспечивает интерфейс для написания запросов к данным через встроенный редактор запросов Grafana. Форматирование данных: Конвертирует данные из формата, предоставляемого источником, в формат, понятный Grafana.

🟠Добавление Data Source
Добавление источника данных выполняется через веб-интерфейс Grafana:
Зайдите в Settings → Data Sources.
Нажмите кнопку Add data source.
Выберите нужный тип источника (например, Prometheus).
Настройте параметры подключения (например, URL, токен, порт).
Нажмите Save & Test, чтобы проверить соединение.

🟠Примеры запросов
Для Prometheus:
rate(http_requests_total[5m])


Для MySQL
SELECT time, value FROM metrics WHERE time > NOW() - INTERVAL 1 HOUR;


🚩Особенности Data Source

🟠Кастомизация
Вы можете устанавливать плагины для подключения к нестандартным источникам данных. Grafana Marketplace предлагает плагины для расширения функциональности.

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

🟠Глобальные переменные
Источники данных могут использовать глобальные параметры, такие как время ($__timeFilter), для унификации запросов.

🟠Безопасность
Поддержка различных методов аутентификации: токены, ключи API, OAuth.

Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что показывает load average?

Load average показывает среднее количество процессов, ожидающих выполнения на ядре процессора за последние 1, 5 и 15 минут. Он включает в себя процессы, которые активны и находятся в очереди на выполнение, или ожидают ресурсов, таких как диск или сеть. Load average помогает оценить нагрузку на систему: значение, превышающее количество ядер, может указывать на перегрузку системы. Высокий load average без соответствующей активности процессора может свидетельствовать о блокировке ресурсов.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊1
🤔 Из чего состоит control plane?

В Kubernetes Control Plane — это набор компонентов, которые управляют всей кластерной системой. Он отвечает за контроль над состоянием кластера, управлением узлами (nodes) и развертыванием приложений.

🟠kube-apiserver
Что делает: Это центральный компонент, предоставляющий API для управления кластером.
Почему нужен: Все взаимодействия, включая добавление/удаление узлов, создание подов и настройку сетей, проходят через API-сервер.
Как работает:
Принимает запросы от пользователей, kubectl, и других компонентов.
Проверяет подлинность запросов и валидирует данные.
Передает команды другим компонентам через REST API.

🟠etcd
Что делает: Это распределённое key-value хранилище, которое сохраняет все данные о состоянии кластера.
Почему нужен: Все данные о конфигурации, статусе и метаданных кластера сохраняются в etcd. Если etcd выходит из строя, кластер теряет свою управляемость.
Как работает:
Хранит информацию о подах, конфигурации сетей и статусе всех компонентов.
Поддерживает консенсус между узлами, обеспечивая надёжность данных.

🟠kube-scheduler
Что делает: Назначает поды на доступные узлы.
Почему нужен: Без планировщика поды не смогут быть развернуты на узлах.
Как работает:
Считывает незапланированные поды из API-сервера.
Анализирует доступные узлы на основе их ресурсов (CPU, память и т.д.).
Назначает узел для каждого пода на основе алгоритмов (например, минимальная загрузка).

🟠kube-controller-manager
Что делает: Управляет контроллерами, которые следят за состоянием ресурсов в кластере.
Почему нужен: Контроллеры — это "надсмотрщики", которые автоматически исправляют отклонения от желаемого состояния.
Как работает:
Включает несколько встроенных контроллеров:
Node Controller: Следит за доступностью узлов.
Replication Controller: Поддерживает нужное количество реплик подов.
Endpoint Controller: Обновляет Endpoints-объекты.
Service Account Controller: Создает учетные записи для сервисов.

🟠cloud-controller-manager
Что делает: Управляет интеграцией с облачными провайдерами (например, AWS, GCP).
Почему нужен: Позволяет использовать облачные функции, такие как балансировка нагрузки, управление дисками и маршрутизацией.
Как работает:
Отвечает за создание LoadBalancer.
Управляет постоянными томами (Persistent Volumes), связанными с облачными хранилищами.

Ставь 👍 и забирай 📚 Базу знаний
👍9
🤔 Как работает injector sidecar в Vault?

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥3
🤔 Можно ли на лету изменить настройки dns контейнре через cli?

Нет, нельзя изменить DNS у уже запущенного контейнера напрямую через CLI. Но есть обходные способы!

🚩Остановка и перезапуск контейнера с новыми DNS

Самый надежный способ — перезапустить контейнер с нужными DNS-серверами
docker run --dns 8.8.8.8 --dns 8.8.4.4 -d my_container


Или задать DNS через docker network
docker network create mynet --dns=1.1.1.1
docker run --net=mynet -d my_container


🚩Изменение `/etc/resolv.conf` внутри контейнера (может сработать)

Можно изменить DNS вручную внутри работающего контейнера
docker exec -it my_container sh
echo "nameserver 1.1.1.1" > /etc/resolv.conf


🚩Использование `network connect` (только для user-defined сетей)
Можно подключить контейнер к другой сети с нужными DNS:
docker network create mynewnet --dns=8.8.8.8
docker network connect mynewnet my_container


🚩Изменение настроек `systemd-resolved` (для контейнеров с `host`-сетью)

Если контейнер использует сеть хоста (--network host), можно поменять DNS на хосте:
resolvectl dns eth0 8.8.8.8


Ставь 👍 и забирай 📚 Базу знаний
👍2
🤔 Чем отличается маршрутизатор от коммутатора?

- Коммутатор (Switch) работает на уровне канального уровня (L2) — связывает устройства в одной сети, знает MAC-адреса.
- Маршрутизатор (Router) работает на сетевом уровне (L3) — связывает разные сети, знает IP-адреса и маршруты.
Switch = внутри сети.
Router = между сетями.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍4
🤔 Что такое pv, pvc?

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

🚩Persistent Volume (PV)

Это объект Kubernetes, который представляет физическое хранилище, доступное в кластере. Это может быть локальное хранилище, сетевой диск (например, NFS), или облачный сервис хранения (например, Amazon EBS, Google Persistent Disk, Azure Disk).

PV создается администратором или автоматически через StorageClass. Это ресурс хранилища, выделенный для использования в кластере. Независим от подов, что позволяет хранить данные, даже если под был удален или перезапущен.

apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
hostPath:
path: "/mnt/data"


🚩Persistent Volume Claim (PVC)

Это запрос на использование хранилища (PV) со стороны пользователя или приложения. Это как "заявка" на нужное количество места и определенный тип хранилища.

PVC создается разработчиком или приложением. PVC связывается с подходящим PV, который соответствует запросу. Если подходящий PV найден, он "привязывается" к PVC.

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


🚩Как работают PV и PVC вместе?

🟠Создание PV
Администратор или динамическое создание выделяет хранилище (например, сетевой диск).

🟠Создание PVC
Приложение запрашивает хранилище с помощью PVC.

🟠Привязка
Kubernetes автоматически находит подходящий PV, который соответствует запросу PVC (по размерам, режимам доступа и другим параметрам). После этого PVC "связывается" с PV.

🟠Использование в поде
PVC указывается в поде как volume, что позволяет контейнерам работать с данным хранилищем.

apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: nginx
volumeMounts:
- mountPath: "/data"
name: my-storage
volumes:
- name: my-storage
persistentVolumeClaim:
claimName: my-pvc


Ставь 👍 и забирай 📚 Базу знаний
👍5
🤔 Зачем нужен state в Terraform?

- Хранит текущее состояние инфраструктуры.
- Позволяет Terraform сравнивать желаемое и фактическое.
- Используется при plan, apply.
- Без стейта Terraform не знает, что нужно изменить.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2