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

Тесты t.me/+2P7cpjeyfDVlZjcy
Вакансии t.me/+i5KFWEWJ21hhYWEy
Download Telegram
🤔 Как определить ресурс, который необходим одной 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


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🤔 Какой был опыт SRE?

SRE (Site Reliability Engineering) включает:
- Мониторинг доступности, логов, метрик (Prometheus, Grafana).
- Автоматизация восстановления (алерты + авто-действия).
- Работа с инцидентами (Postmortem, root cause analysis).
- CI/CD пайплайны.
- Улучшение отказоустойчивости и производительности.
Фокус SRE — в надёжности, масштабируемости и наблюдаемости.


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

Образ (Image) – это шаблон, из которого создаются контейнеры.
Контейнер (Container) – это запущенный экземпляр образа.

🚩Что такое образ (Image)?

Образ – это неизменяемый шаблон с установленным ПО
Содержит все файлы, библиотеки и зависимости
Может храниться в реестре (Docker Hub, GitHub Container Registry, ECR)
docker pull nginx:latest


Пример списка образов
docker images


Пример создания образа через Dockerfile
FROM ubuntu:latest
RUN apt update && apt install -y nginx
CMD ["nginx", "-g", "daemon off;"]

docker build -t my-nginx .



🚩Что такое контейнер (Container)?

Контейнер – это запущенный экземпляр образа
Может изменять файлы и состояние, но это не сохраняется в образе
Изолирован, но использует ядро ОС хоста
docker run -d --name web -p 80:80 nginx


Пример списка контейнеров
docker ps


Пример остановки контейнера
docker stop web


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 В чём отличие Deployment от Delivery?

Continuous Deployment подразумевает автоматический выпуск каждой успешной сборки в продакшн. Continuous Delivery предполагает автоматическую подготовку к выпуску, но для выпуска требуется ручное одобрение. Deployment обеспечивает более быстрый и непрерывный процесс, в то время как Delivery фокусируется на стабильности.

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
🤔 Как сделать 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
👍52
🤔 Что описать в YAML для обычного приложения?

Для стандартного приложения нужен минимум:
- Deployment — для описания:
- контейнера (имя, образ, порты),
- количества реплик,
- стратегии обновления.
- Service — для доступа (ClusterIP, NodePort, LoadBalancer).
- (опционально) ConfigMap и Secret — если нужны конфиги или пароли.
- Ingress — если приложение должно быть доступно извне.


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

Маршрутизатор (Router) – соединяет разные сети и передает пакеты между ними. Коммутатор (Switch) – соединяет устройства внутри одной сети (LAN) и передает данные между ними.

🚩Что делает маршрутизатор (Router)?

Связывает разные сети (LAN ↔️ WAN, LAN ↔️ LAN)
Определяет путь (маршрут) для передачи данных
Использует IP-адреса (3-й уровень OSI)
Может раздавать интернет через NAT

Пример работы маршрутизатора
Компьютер в 192.168.1.0/24 хочет отправить данные в 10.0.0.0/24
- Маршрутизатор определяет лучший путь и передает данные
ip route add 10.0.0.0/24 via 192.168.1.1


🚩Что делает коммутатор (Switch)?

Объединяет устройства в одной сети (LAN)
Переключает пакеты между портами по MAC-адресам
Работает на 2-м уровне OSI (канальный уровень)
Использует MAC-таблицу для ускорения передачи

Пример работы коммутатора:
Компьютер A (MAC: AA:BB:CC:01) отправляет данные компьютеру B (MAC: AA:BB:CC:02)
Коммутатор смотрит MAC-таблицу и направляет данные только на нужный порт
show mac address-table


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🤔 Как отличается работа с PersistentVolume у Deployment и StatefulSet?

Deployment может использовать общий volume или один PVC для всех подов. В StatefulSet у каждого пода есть свой отдельный PVC, созданный на основе шаблона. Эти PVC жёстко связаны с именами подов и сохраняются даже после удаления подов. Это позволяет сохранять состояние у каждого инстанса.


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

В Kubernetes есть несколько механизмов, которые могут запретить или ограничить запуск подов на определенных нодах.

🚩Taints & Tolerations (Метки и допуска)

Taints – метки на нодах, запрещающие размещение подов, если у них нет соответствующего допуска (Toleration).
Используется для изоляции, приоритизации узлов или резервирования ресурсов.
kubectl taint nodes my-node key=value:NoSchedule


Разрешить конкретному поду запускаться на этой ноде
tolerations:
- key: "key"
operator: "Equal"
value: "value"
effect: "NoSchedule"


🚩Node Selectors (Выбор ноды по меткам)

Запрещает запускаться на всех нодах, кроме указанных.
Используется для привязки подов к определенным серверам.
spec:
nodeSelector:
disktype: ssd


🚩Node Affinity (Расширенные правила выбора ноды)

Позволяет задать гибкие условия (обязательные и предпочтительные).
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: region
operator: In
values:
- us-east-1


🚩Pod Disruption Budget (Ограничение количества перезапусков)

Запрещает запуск новых подов, если их уже запущено определенное количество.
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: my-pdb
spec:
maxUnavailable: 3
selector:
matchLabels:
app: my-app


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥51👍1
Forwarded from easyoffer
Осталось всего 14 дней до завершения краудфандинга

Сейчас самое подходящее время подключиться, если вы ждали или откладывали:

Все, кто поддержат проект сейчас, до релиза, получат:
🚀 PRO-доступ на 1 год по цене месячной подписки
Бета-доступ к EasyOffer 2.0 (конец мая)

👉 Поддержать: https://planeta.ru/campaigns/easyoffer
🤔 Как сделать повторяющиеся job'ы в GitLab CI?

Для повторяющихся задач (например, ежедневных проверок или cron-планировщиков) используют rules с типом schedule.
Затем в GitLab UI создаётся расписание (Schedule) с указанием, когда должна запускаться пайплайн.
Также можно использовать extends, чтобы повторно использовать одну и ту же логику в нескольких job'ах.


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

ACL (Access Control List) – это механизм расширенных прав доступа в Linux, который позволяет задавать более гибкие разрешения для файлов и директорий, чем стандартные chmod и chown.

Позволяет назначать дополнительные права для отдельных пользователей и групп
Упрощает гранулярный контроль доступа
Работает поверх стандартных прав (rwx)

🚩Проверка поддержки ACL

Убедимся, что файловая система поддерживает ACL
mount | grep acl


Если ACL не включен, монтируем с поддержкой ACL
mount -o remount,acl /home


🚩Проверка текущих ACL-прав

Команда getfacl показывает текущие ACL для файла или папки
getfacl myfile.txt


Пример вывода
# file: myfile.txt
# owner: user1
# group: users
user::rw-
user:john:r--
group::r--
mask::r--
other::---


🚩Добавление новых ACL-прав (`setfacl`)

Разрешить пользователю john запись (rw) в myfile.txt
setfacl -m u:john:rw myfile.txt


Разрешить группе developers выполнение (x)
setfacl -m g:developers:x myfile.txt


Дать всем (other) полный доступ (rwx)
setfacl -m o::rwx myfile.txt


Назначить по умолчанию права для всех новых файлов в папке project/
setfacl -d -m u:john:rwx project/


🚩Удаление ACL-прав

Удалить ACL для пользователя john
setfacl -x u:john myfile.txt


Очистить все ACL-права файла
setfacl -b myfile.txt


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
🤔 Сервис типа кластер P со значением nan, что это значит?

nan = Not a Number
В контексте метрик или мониторинга (например, Prometheus, Grafana), NaN указывает:
- Значение не было рассчитано.
- Источник данных не вернул метрику.
- В формуле деление на ноль или ошибка в агрегации.
- Сервис неактивен или отключен.
Если это в метриках по кластеру — возможно, сервис вообще не репортит нужную метрику.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔5🔥1
🤔 Видим что места нет находим большой файл 5 Гб например удаляем его а пишет что места всё равно нет в чём причина?

В Linux удаленный файл может оставаться в памяти, если он все еще используется запущенным процессом. Это происходит, потому что файл не удаляется физически, пока его дескриптор (file descriptor) открыт.
Файл все еще используется процессом
Файл удален, но все еще открыт (deleted в /proc)
Файл удален, но был записан в смонтированный том

🚩Проверить, какие процессы держат удаленный файл (`lsof`)

Команда
lsof | grep deleted


Вывод
nginx     1234  www-data   4w   REG  8,1  5G   /var/log/nginx/access.log (deleted)


Решение: Перезапустить процесс:
systemctl restart nginx


или
kill -HUP 1234  # Закрыть процесс (PID = 1234)


🚩Освободить место вручную (`/proc`)

Если процесс нельзя перезапустить, можно освободить занятую память без перезапуска.
ls -l /proc/*/fd/ | grep deleted


Вывод
lrwx------ 1 root root 64 Feb 21 14:23 /proc/5678/fd/4 -> /var/log/nginx/access.log (deleted)


Очистить файл, не перезапуская процесс
> /proc/5678/fd/4


🚩Проверить монтирование (Docker, NFS, tmpfs)

Если файл хранился в смонтированном томе, он может не удалиться сразу.
Проверить монтированные диски:
df -h
mount | grep /var/log


Если файл был в Docker-контейнере, проверить объемы:
docker system df


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4👍1🤔1
🤔 Из чего состоит worker node?

Worker-нода содержит:
- kubelet — агент, управляющий подами.
- kube-proxy — сетевое взаимодействие и балансировка.
- container runtime — Docker, containerd, CRI-O.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Forwarded from easyoffer
🎉 Easyoffer 2.0 — самый успешный краудфандинг в истории рунета в категории "Технологии"!

Мы это сделали! За считанные часы после старта, благодаря вашей поддержке, проект не просто стартовал — он взлетел.

💸 Собрано: 2 276 840 рублей

Это не просто цифра — это ваше доверие, ваша вера в идею, и ваша инвестиция в будущее карьеры сотен (а скоро — тысяч) специалистов.

💼 Благодаря этой сумме мы уже:

— Наняли ещё пару разработчиков и аналитиков
— Запустили активный сбор и разметку новых данных
— Ускорили разработку и подняли планку качества

Спасибо каждому, кто поверил в нас на старте! Дальше — только масштабирование и развитие. Мы строим сервис, который станет must-have для всех, кто ищет работу в IT.

👉 Присоединяйтесь сейчас — это только начало.
🤔 Поды висят в 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
👍5
🤔 С какими ключами вводить команды netstat и что они значат?

Ключи позволяют управлять отображением: просматривать порты (-tuln), связанные процессы (-p), и сетевую статистику. В новых системах netstat заменяется на ss.


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

По умолчанию Ansible выполняет задачи последовательно, но можно ускорить выполнение с помощью параметра forks или асинхронных задач (async).

🚩Увеличение параллельных подключений (`forks`)

forks – это количество серверов, на которых Ansible выполняет задачи одновременно.
ansible-playbook -i inventory.ini playbook.yml --forks=10


Установить forks в ansible.cfg:
[defaults]
forks = 10


🚩Асинхронное выполнение (`async` + `poll`)

Если задача выполняется долго, ее можно запустить асинхронно и не ждать завершения.

Пример асинхронного выполнения установки пакета
- name: Установить nginx параллельно
apt:
name: nginx
state: present
async: 300
poll: 0


async: 300 – запускает задачу и дает ей 300 секунд на выполнение
poll: 0 – не ждет завершения, сразу переходит к следующей
Проверить статус запущенных задач:
ansible all -m async_status -a "jid=1234567890" -i inventory.ini


🚩Использование `&` в Shell-командах (`shell` + `nohup`)

Пример запуска задачи в фоновом режиме
- name: Запустить долгий процесс
shell: "nohup long_script.sh &"


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥1🤔1
Forwarded from easyoffer
Что такое PRO-подписка на easyoffer 2.0?

easyoffer PRO — это не просто доступ к базе, а полноценный инструмент для получения оффера.

🧠 База вопросов с собеседований

+ Анализ на основе 4,000 собеседований
+ Вероятность встречи каждого вопроса
+ Фильтрация по грейдам, компаниям, типам интервью
+ Примеры ответов: текстовые и видео
+ Готовьтесь к собеседованию в конкретную компанию

🛠 Тренажер "Проработка вопросов"

+ Флеш-карточки + интервальные повторения
+ Персональная система показа карточек в зависимости от ваших ответов
+ Упор на наиболее частые вопросы
+ Фокус на слабые места и быстрый прогресс

🎭 Тренажер "Реальное собеседование"

+ Сценарии на основе реальных интервью
+ Подготовка к конкретным компаниям
+ Итоговая статистика: прошёл/не прошёл

🧩 База задач с собеседований

+ Live-coding и System Design задачи
+ Оценка вероятности встречи задачи
+ Подготовка к задачам по конкретным компаниям

📋 База тестовых заданий

+ Задания из реальных вакансий
+ Фильтрация по технологиям и грейдам
+ Лучшие решения в доступе

📈 Тренды технологий в вакансиях

+ Топ-100 навыков, которые требуют компании
+ Динамика популярности технологий
+ Фильтрация по грейдам

🎁 Специальная цена до релиза:
3200 руб. за целый год

Сейчас PRO на 1 год стоит как будет стоить 1 месяц после релиза. Покупка также открывает доступ к закрытому бета-тестированию.
+ Вы можете активировать подписку в любой момент, например, когда начнете искать работу.

Предзаказ здесь: https://planeta.ru/campaigns/easyoffer

📌 Цена поднимется сразу после запуска.

Если вы хотите перестать угадывать, что спросят на собеседовании, и начать точечно готовиться на основе реальных данных — easyoffer PRO именно для вас.

Экономьте время. Получайте оффер легко.