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

Тесты t.me/+2P7cpjeyfDVlZjcy
Вакансии t.me/+i5KFWEWJ21hhYWEy
Download Telegram
🤔 Удалил файлы, но место не очищается, в чём дело?

Обычно это связано с тем, что:
- Файлы всё ещё используются (открыты каким-то процессом). Даже если файл удалён, пока он открыт, диск не освобождается.
- Журналы или базы данных могут продолжать записывать в старые дескрипторы.
- Посмотреть, кто использует удалённые файлы, можно с помощью lsof или fuser.
Решение — перезапустить процесс, который удерживает удалённый файл.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как бы построить выделение ресурсов, балансировку, нагрузку и всю масштабированность?

Чтобы система работала стабильно и эффективно, нужно правильно распределять ресурсы, балансировать нагрузку и масштабировать сервисы.

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

Выделение ресурсов - CPU, RAM, диски, сеть
Балансировка нагрузки равномерное распределение трафика
Горизонтальное и вертикальное масштабирование
Авто-масштабировани – динамическое добавление/удаление мощностей

🟠Выделение ресурсов (CPU, RAM, Диск, Сеть)
В виртуализированных средах (Kubernetes, Docker, AWS, KVM, ESXi) выделение ресурсов настраивается через лимиты и квоты.
yaml  
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app
image: my-app:latest
resources:
requests:
cpu: "500m" # Минимально 0.5 CPU
memory: "256Mi" # Минимально 256MB RAM
limits:
cpu: "1000m" # Максимально 1 CPU
memory: "512Mi" # Максимально 512MB RAM


🟠Балансировка нагрузки
Балансировка уменьшает нагрузку на один сервер и равномерно распределяет запросы.
nginx  
upstream backend {
server app1:5000;
server app2:5000;
}
server {
listen 80;
location / {
proxy_pass http://backend;
}
}


Пример терраформа для AWS ALB
hcl  
resource "aws_lb" "example" {
name = "my-load-balancer"
internal = false
load_balancer_type = "application"
security_groups = [aws_security_group.lb_sg.id]
}


🟠Масштабирование (Горизонтальное и Вертикальное)
Горизонтальное масштабирование (добавление новых инстансов)
Kubernetes Horizontal Pod Autoscaler (HPA)
yaml  
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70


🟠Авто-масштабирование (AWS/GCP/Kubernetes)
AWS Auto Scaling Group
hcl  
resource "aws_autoscaling_group" "example" {
min_size = 2
max_size = 10
desired_capacity = 2
launch_configuration = aws_launch_configuration.example.name
}


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

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


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍2
🤔 При попытке создания файла на диске на linux ошибка что места нет проверяете место есть с чем это может быть связано

Если при создании файла в Linux появляется ошибка, что места нет, но df -h показывает свободное место, проблема может быть в следующем:

🚩Закончились inodes

Inodes – это структуры, которые хранят метаданные о файлах. Даже если есть свободное место, но inodes кончились, новые файлы создать нельзя.
df -i


Найти каталоги с множеством маленьких файлов:

  find /path -xdev -type f | wc -l  # Количество файлов в каталоге


🚩Ограничение дискового квотирования (quota)

В системе могут быть настроены дисковые квоты, которые ограничивают использование диска для пользователя или группы.
quota -v


🚩Заполнен раздел `/var`, `/tmp` или `/home`

В системе может быть несколько дисковых разделов (/, /var, /home и т. д.). Если один из них заполнен, в него нельзя записывать файлы.
df -hT


🚩Файловая система смонтирована в режиме `read-only`

Если файловая система перешла в режим «только для чтения» (read-only) из-за ошибки или сбоя, запись на неё невозможна.
mount | grep ' ro,'


Если файловая система смонтирована с `ro`, значит, запись запрещена. Перемонтировать диск:

  mount -o remount,rw /path


Проверить диск на ошибки:

  dmesg | tail -20  # Лог ошибок
fsck /dev/sdX # Проверка диска


Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Что даёт DevOps как концепция?

DevOps объединяет разработку и эксплуатацию в единый цикл поставки ПО. Он обеспечивает:
- автоматизацию процессов (CI/CD),
- стабильность и контроль версий,
- ускорение вывода продукта на рынок,
- мониторинг и обратную связь.
Цель — улучшить качество и скорость релизов за счёт совместной культуры и инструментов.


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

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

🚩Зачем нужен IaC?

🟠Автоматизация
вместо ручной настройки серверов вы пишете код, который делает это автоматически.
🟠Консистентность
одинаковая среда на всех серверах, исключение человеческих ошибок.
🟠Быстрое развертывание
развернуть инфраструктуру можно за минуты.
🟠Легкость в откате
если что-то пошло не так, можно быстро вернуть предыдущее состояние.
🟠Масштабируемость
легко добавить новые серверы или ресурсы при увеличении нагрузки.

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

С помощью IaC вы описываете всю инфраструктуру в коде (например, в YAML, JSON, HCL и др.), а затем используете инструменты для автоматического развертывания.
provider "aws" {
region = "us-east-1"
}

resource "aws_instance" "example" {
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
}


🚩Основные инструменты IaC

🟠Terraform
универсальный инструмент для облаков (AWS, Azure, GCP и др.).
🟠Ansible
удобен для настройки серверов (конфигурации ПО).
🟠Puppet / Chef
похожи на Ansible, но требуют агента на серверах.
🟠CloudFormation
инструмент от AWS для управления ресурсами.

Ставь 👍 и забирай 📚 Базу знаний
🤔 Как работает лоадбалансер в облаке?

- Создаётся внешнее IP.
- Проксирует входящий трафик к NodePort сервисам.
- Использует healthcheck, может поддерживать sticky sessions.
- Под капотом — реализация у облачного провайдера (AWS ALB, GCP LB, Azure LB).


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

ELK (Elasticsearch, Logstash, Kibana) – это стек для сбора, обработки, хранения и визуализации логов. Он помогает DevOps-инженерам анализировать логи в реальном времени и выявлять проблемы в системе.

🚩Elasticsearch – хранилище и поиск логов

- Хранит структурированные и неструктурированные данные (логи, метрики)
- Поддерживает быстрый полнотекстовый поиск
- Использует кластеризацию для высокой доступности
json  
GET /logs/_search
{
"query": {
"match": { "message": "error" }
}
}


🚩Logstash – обработка и отправка логов

- Собирает логи из файлов, TCP, Kafka, Beats
- Фильтрует и преобразует данные перед отправкой в Elasticsearch
- Поддерживает шифрование и маршрутизацию
yaml  
input {
file {
path => "/var/log/nginx/access.log"
start_position => "beginning"
}
}
filter {
grok { match => { "message" => "%{COMBINEDAPACHELOG}" } }
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
}
}



🚩Kibana – визуализация и анализ

- Позволяет строить дашборды и графики
- Делает поиск по логам и метрикам
- Визуализирует реальное время работы системы
  
message: "error" AND @timestamp:[now-24h TO now]



🚩Как ELK-стек работает вместе?

Logstash собирает и обрабатывает логи
Отправляет их в Elasticsearch
Kibana визуализирует данные
yaml  
version: "3"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.5.0
environment:
- discovery.type=single-node
ports:
- "9200:9200"

logstash:
image: docker.elastic.co/logstash/logstash:8.5.0
depends_on:
- elasticsearch
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
ports:
- "5044:5044"

kibana:
image: docker.elastic.co/kibana/kibana:8.5.0
depends_on:
- elasticsearch
ports:
- "5601:5601"


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

Обычно имеется в виду:
- Terraform Cloud/Enterprise account — для управления workspace'ами, доступами, state.
- Или облачный провайдер-аккаунт (AWS, GCP), используемый через provider.


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

Обычно хранятся в каталоге /var/log. Также многие современные дистрибутивы используют систему журналирования systemd для управления и просмотра логов.

🚩Способы просмотра

🟠Просмотр логов в /var/log
Каталог /var/log содержит логи большинства системных сервисов и приложений.

Логи системных сообщений
/var/log/syslog: Содержит общие системные логи. /var/log/messages: Содержит общие системные сообщения (не во всех дистрибутивах).
cat /var/log/syslog
less /var/log/syslog
tail -f /var/log/syslog


Логи конкретных сервисов
Apache: /var/log/apache2/ или /var/log/httpd/ Логи доступа: /var/log/apache2/access.log или /var/log/httpd/access_log Логи ошибок: /var/log/apache2/error.log или /var/log/httpd/error_log
tail -f /var/log/apache2/access.log
tail -f /var/log/apache2/error.log


Nginx: /var/log/nginx/ Логи доступа: /var/log/nginx/access.log Логи ошибок: /var/log/nginx/error.log
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log


MySQL: /var/log/mysql/ или /var/log/mysqld.log
tail -f /var/log/mysql/error.log 


SSH: /var/log/auth.log или /var/log/secure
tail -f /var/log/auth.log 


🟠Использование `journalctl` для системных логов
journalctl — это утилита для просмотра и управления журналами systemd. Она позволяет фильтровать логи по различным критериям, таким как время, сервис и уровень логирования.

Основные команды journalctl
Просмотр всех журналов
journalctl  



Логов конкретного сервиса
journalctl -u nginx.service  


Последних логов и продолжение просмотра в реальном времени
journalctl -f
journalctl -u nginx.service -f


Логов за определённый период
journalctl --since "2024-07-25 12:00:00" --until "2024-07-25 13:00:00" 


Логов с определённым уровнем логирования
journalctl -p err
journalctl -p warning


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

🟠Просмотр логов Apache
Логи доступа
tail -f /var/log/apache2/access.log  


Логи ошибок
tail -f /var/log/apache2/error.log 


🟠Просмотр логов Nginx
Логи доступа
tail -f /var/log/nginx/access.log


Логи ошибок
tail -f /var/log/nginx/error.log  


🟠Использование `journalctl` для просмотра логов Nginx
Все логи Nginx
journalctl -u nginx.service  


Последние логи Nginx в реальном времени
journalctl -u nginx.service -f


Ставь 👍 и забирай 📚 Базу знаний
🤔 Экспортеры в Prometheus?

Наиболее популярные:
- Node Exporter — метрики ОС.
- Blackbox Exporter — проверка доступности по HTTP, TCP, ICMP.
- Cadvisor — мониторинг контейнеров.
- Pushgateway — при необходимости push-метрик.
- Custom Exporters — написанные для специфических сервисов


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


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

Basic Auth — это простой способ авторизации в HTTP, при котором имя пользователя и пароль передаются в заголовке запроса, закодированные в Base64. Используется в базовых API или в системе без сессий.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
👍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


Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 С помощью какого файла можно вывести данные после применения Terraform?

Используется файл
outputs.tf, где описываются выходные значения

Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🔥4
🤔 Что возвращает функция в bash?

В Bash функция возвращает код завершения (exit status), который представляет собой числовое значение от 0 до 255. Это значение используется для указания успешного или неуспешного выполнения функции. По умолчанию, если явно не указано возвращаемое значение, функция возвращает код завершения последней выполненной команды внутри нее.

🚩Как возвращать значения из функции?

🟠Код завершения (exit status)
Чтобы явно задать код завершения функции, используется команда return.
my_function() {
if [[ $1 -gt 0 ]]; then
return 0 # Успех
else
return 1 # Ошибка
fi
}

my_function 5
echo $? # Выведет 0 (успех)


🟠Вывод данных через `echo`
Для передачи данных из функции (например, строки или числа) можно использовать echo. Вывод можно перехватить через подстановку команд $()
my_function() {
echo "Hello, $1!"
}

result=$(my_function "world")
echo "$result" # Выведет "Hello, world!"


🟠Изменение глобальных переменных
Функция может менять значения глобальных переменных, которые затем используются за ее пределами
my_function() {
result=$(( $1 + $2 ))
}

my_function 3 7
echo $result # Выведет 10


🚩Почему это важно?

🟠Код завершения
Используется в сценариях для проверки, выполнилась ли функция успешно. Значение 0 обычно означает успех, а любое другое число — ошибку.

🟠Вывод через `echo`
Удобен для передачи данных из функции.

🟠Изменение переменных
Полезно, если функция должна сохранять данные для дальнейшей обработки.

# Функция проверки файла
check_file() {
if [[ -f $1 ]]; then
echo "Файл $1 существует."
return 0
else
echo "Файл $1 не найден."
return 1
fi
}

# Вызов функции
check_file "/etc/passwd"
status=$? # Сохраняем код завершения
if [[ $status -eq 0 ]]; then
echo "Продолжаем работу..."
else
echo "Останавливаемся из-за ошибки."
fi


Ставь 👍 и забирай 📚 Базу знаний
🤔 Какие есть опции монтирования?

Примеры:
- ro / rw — только чтение или чтение/запись;
- noexec — запрет запуска файлов;
- nosuid, nodev — отключение SUID/девайсов;
- defaults — набор стандартных флагов;
- uid, gid — владельцы монтированной ФС;
- relatime, noatime — управление обновлением временных меток.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что слышали про rancher kubernetes?

Это платформа для управления Kubernetes-кластерами. Она позволяет развертывать, настраивать, мониторить и управлять несколькими кластерами Kubernetes из единой панели управления. Rancher упрощает работу с Kubernetes, предоставляя удобный UI, API и инструменты автоматизации.

🚩Зачем нужен Rancher?

🟠Управление несколькими кластерами
Rancher позволяет управлять кластерами Kubernetes, развернутыми в различных облаках (AWS, GCP, Azure) и на локальной инфраструктуре.
🟠Упрощенная установка и настройка
С помощью Rancher можно быстро развернуть Kubernetes-кластеры с минимальными усилиями.
🟠Безопасность и контроль доступа
Поддерживает аутентификацию через LDAP, Active Directory, GitHub и другие методы.
🟠Мониторинг и логирование
Встроенная поддержка Prometheus, Grafana и Fluentd для мониторинга и логов.
🟠Развертывание приложений
Поддерживает Helm-чарты и стандартные манифесты Kubernetes.

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

🟠Rancher Server
центральный компонент, управляющий кластерами и предоставляющий UI/API.
🟠Kubernetes-кластеры
могут быть развернуты с помощью Rancher (RKE, RKE2) или добавлены вручную (например, EKS, AKS, GKE).
🟠Rancher Agents
агенты, установленные в кластерах для обеспечения связи с сервером Rancher.

🚩Пример развертывания Rancher

Для развертывания Rancher можно использовать Docker
docker run -d --name=rancher --restart=unless-stopped \
-p 80:80 -p 443:443 \
rancher/rancher:latest


Ставь 👍 и забирай 📚 Базу знаний
🤔1
🤔 Как попасть в запущенный в Docker контейнер?

Возможно подключиться к работающему контейнеру в интерактивном режиме через оболочку (например, sh или bash). Это позволяет выполнять команды прямо внутри контейнера, как в обычной системе.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
💊11
🤔 Как заставить процесс отпустить файловые дескрипторы?

Если процесс удерживает файловые дескрипторы и вам нужно их освободить, то есть несколько способов это сделать.

🟠Завершение процесса
Самый простой способ — завершить процесс, который удерживает файловые дескрипторы.
kill <PID>


или принудительно
kill -9 <PID>


Чтобы найти процессы, удерживающие файлы
lsof | grep <filename>


или
fuser <filename>


🟠Закрытие дескриптора вручную
Если вы хотите закрыть файловый дескриптор, не завершая процесс, можно использовать lsof и /proc

1⃣Найдите открытые дескрипторы процесса:
ls -l /proc/<PID>/fd/


2⃣Закройте конкретный дескриптор:
exec 3>&-


🟠Использование `gdb` для вмешательства в процесс
Если процесс нельзя перезапустить, но вы имеете к нему доступ, можно закрыть дескриптор через gdb:
gdb -p <PID>
(gdb) call close(<FD>)
(gdb) detach
(gdb) quit


🟠Перемонтирование файловой системы
Если файл удален, но все еще удерживается процессом, можно принудительно перемонтировать файловую систему:
mount -o remount /


Или использовать lsof для очистки удаленных файлов
lsof | grep deleted


🟠Использование `systemctl restart` для сервисов
Если файлы удерживаются службой (например, Nginx, Apache, MySQL), можно перезапустить службу
systemctl restart <service>


или
service <service> restart


Ставь 👍 и забирай 📚 Базу знаний
👍1
🤔 Как посмотреть, с какими файлами работает программа на Linux в данный момент?

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


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