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

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

Ir al canal en Telegram
5 502
Suscriptores
-324 horas
-107 días
-530 días
Archivo de publicaciones
🤔 Что такое cherry pick? Это команда в системе контроля версий Git, которая позволяет выбрать отдельные коммиты из одной ветки и применить их к другой ветке. Это полезно, когда вы хотите перенести конкретные изменения (коммиты) в текущую ветку, не выполняя слияние всей ветки. 🚩Когда используется 🟠Применение отдельных изменений Когда нужно перенести конкретные исправления или функции из одной ветки в другую, не сливая все изменения из исходной ветки. 🟠Быстрое исправление ошибок Когда найденное исправление в одной ветке нужно срочно применить в другой, например, из ветки разработки в ветку релиза. 🟠Избежание сложного слияния Когда слияние всей ветки может привести к конфликтам или нежелательным изменениям, cherry-pick позволяет аккуратно перенести только нужные коммиты. 🚩Примеры использования 🟠Простого `cherry-pick` Перенос одного коммита из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch

# Выполните cherry-pick коммита
git cherry-pick <commit-hash>
🟠Применения нескольких коммитов Перенос нескольких коммитов из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch

# Выполните cherry-pick нескольких коммитов
git cherry-pick <commit-hash-1> <commit-hash-2> <commit-hash-3>
🟠Применения диапазона коммитов Перенос диапазона коммитов из другой ветки.
# Переключитесь на ветку, куда вы хотите применить изменения
git checkout target-branch

# Выполните cherry-pick диапазона коммитов
git cherry-pick <start-commit-hash>..<end-commit-hash>
🚩Разрешение конфликтов 1⃣Разрешите конфликты в файлах. 2⃣Добавьте изменения в индекс
git add <filename>   
3⃣Завершите процесс cherry-pick
git cherry-pick --continue   
🚩Прерывание Если вы хотите прервать процесс cherry-pick, можно использовать команду
git cherry-pick --abort
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое хендлеры? Это обработчики событий или сигналов, которые выполняются в ответ на определённые действия в системе. 1. В Ansible хендлеры запускаются только при изменении задач, к которым они привязаны. 2. В программировании они применяются для управления асинхронными событиями, например, обработка HTTP-запросов или системных сигналов. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 По какой причине inode могут закончиться? Это структуры данных, которые хранят информацию о файлах и каталогах. Каждый файл или каталог на диске ассоциируется с одним inode, который содержит метаданные файла, такие как его размер, разрешения, временные метки, ссылки на блоки данных и т.д. Количество inode на файловой системе обычно определяется в момент её создания и не может быть изменено без переформатирования или значительных изменений в файловой системе. 🚩Причины исчерпания 🟠Большое количество мелких файлов Одной из наиболее частых причин исчерпания inode является наличие очень большого количества маленьких файлов на файловой системе. Поскольку каждый файл использует как минимум один inode, системы с большим количеством мелких файлов могут исчерпать доступные inode, даже если дисковое пространство по-прежнему доступно. 🟠Недостаточное количество выделенных inode При создании файловой системы, если количество выделенных inode было рассчитано неправильно (слишком мало для предполагаемого использования), это может привести к раннему их исчерпанию. Это особенно актуально для серверов или систем, где ожидается большое количество файлов. 🟠Особенности файловой системы Некоторые файловые системы, такие как Ext3 или Ext4, имеют фиксированное соотношение inode к объёму файловой системы, которое задаётся при их создании. Если создать файловую систему с недостаточным количеством inode для конкретного случая использования, то в дальнейшем это может стать проблемой. 🚩Решения проблемы исчерпания 🟠Проверка использования С помощью команды df -i можно проверить, сколько inode используется и сколько ещё доступно в вашей файловой системе. 🟠Очистка файловой системы Удаление ненужных или временных файлов может освободить inode. 🟠Изменение файловой системы Если возможно, можно увеличить количество inode путём изменения файловой системы или пересоздания файловой системы с более высоким количеством inode. Для файловых систем, таких как XFS или некоторые конфигурации Btrfs, можно динамически добавлять inode. 🟠Использование других файловых систем Переход на другую файловую систему, которая не имеет строгих ограничений на количество inode (например, Btrfs или ZFS), может быть решением для систем с большим количеством маленьких файлов. 🟠Архивирование Программы и процессы, которые создают большое количество мелких файлов, могут модифицироваться для хранения данных в формате архивов вместо отдельных файлов, что снижает потребление inode. Ставь 👍 и забирай 📚 Базу знаний

🧠 Machine Learning — авторский канал, где собрана вся база по ИИ и машинному обучению. Senior разработчик AI-алгоритмов и ав
+5
🧠 Machine Learning — авторский канал, где собрана вся база по ИИ и машинному обучению. Senior разработчик AI-алгоритмов и автономных агентов, разбирает гайды, редкую литературу и код топовых моделей машинного обучения и искусственного интеллекта. В 2025 году ИИ выйдет на совершенно новый уровень тот, кто не успеет за прогрессом - отстанет, а кто разберется - сорвет куш. Стоит подписаться: t.me/ai_machinelearning_big_data

🤔 Какой из сигналов SIGTERM / SIGKILL вызывает команда kill? 1. По умолчанию команда kill отправляет сигнал SIGTERM, который корректно завершает процесс. 2. Сигнал SIGKILL (с параметром -9) немедленно завершает процесс, минуя его обработчики. 3. SIGTERM предпочтителен для аккуратного завершения, а SIGKILL — для принудительного. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Как настраивать графики на панели графаны? Настройка графиков на панели Grafana позволяет визуализировать данные из подключенных источников в удобной и наглядной форме. 1⃣Создание новой панели (Panel) Откройте существующий дашборд или создайте новый: Перейдите в раздел Dashboards → New Dashboard. Нажмите Add new panel для добавления панели. 2⃣Выбор источника данных В интерфейсе панели в разделе Query выберите источник данных (Data Source) из выпадающего списка. Например, Prometheus, InfluxDB, MySQL, Elasticsearch. Подключение источника данных настраивается через Configuration → Data Sources. 3⃣Написание запроса для графика Каждый источник данных имеет свой язык запросов. Примеры: Prometheus
rate(http_requests_total[5m])
MySQL
SELECT time, value FROM metrics WHERE time > NOW() - INTERVAL 1 HOUR;
Elasticsearch: Используйте Lucene или Elasticsearch Query DSL. 4⃣Настройка визуализации В разделе Visualization выберите тип графика: Time series (график по времени). Bar chart (столбчатая диаграмма). Gauge (гейдж/индикатор). Table (таблица). Pie chart (круговая диаграмма, доступна через плагин). Настройте параметры визуализации: Линии, точки, области (lines, points, fill). Цвета линий, область графика. Подписи данных. 5⃣Форматирование данных В разделе Transform: Преобразуйте данные (группировка, сортировка, вычисления). Добавьте фильтры или агрегируйте данные. В разделе Overrides: Настройте специфичные параметры для отдельных рядов данных (цвета, форматы отображения). 6⃣Настройка временного интервала Выберите временной диапазон панели в правом верхнем углу дашборда: Например, последние 5 минут, 1 час, 24 часа. Установите параметры временного сдвига, если нужно отображать данные за конкретный период. 7⃣Настройка подписей и описаний В разделе Panel settings: Укажите название панели. Добавьте описание для контекста. 8⃣Сохранение дашборда Нажмите Save dashboard. Укажите имя дашборда и добавьте теги (опционально) для удобного поиска. 🚩Полезные фишки 🟠Панели Variables Позволяют создавать динамические фильтры. Например, добавьте переменную для выбора имени хоста:
label_values(node_cpu_seconds_total, instance)
🟠Плагины визуализации Установите дополнительные плагины из Grafana Marketplace (например, Pie Chart, Worldmap Panel). Ставь 👍 и забирай 📚 Базу знаний

🤔 Как Linux выбирает, какой из процессов завершить? 1. Linux использует OOM-Killer, который выбирает процесс для завершения на основе приоритета (oom_score). 2. Процессы с большим потреблением памяти и низким приоритетом чаще всего завершаются. 3. Значение oom_score_adj позволяет вручную настроить чувствительность процесса к OOM-Killer. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что используется внутри докер контейнера? Внутри Docker-контейнера используется изолированная среда, которая позволяет запускать приложения в предсказуемом и воспроизводимом окружении. Контейнер предоставляет доступ к базовой файловой системе, процессам, сетевым интерфейсам и другим ресурсам, изолированным от хоста и других контейнеров. Давайте разберем основные компоненты, которые используются внутри Docker-контейнера. 🟠Файловая система Каждый контейнер имеет собственную файловую систему, основанную на многослойной архитектуре. Это изолированное пространство предоставляет доступ к: Образу Docker (image): Базовый набор файлов, определенных в Docker Image. Copy-on-write (COW): Контейнеры используют copy-on-write слой для изменений. Базовый образ остается неизменным, а любые изменения записываются в слой контейнера. Точки монтирования: Возможность монтировать директории хоста или сетевые тома (volumes) для сохранения данных.
docker run -v /host/path:/container/path nginx
🟠Процессы В контейнере запускаются процессы, как в обычной операционной системе. Главный процесс контейнера (например, команда из CMD или ENTRYPOINT) работает с PID 1 и отвечает за выполнение приложения. Процессы внутри контейнера изолированы от процессов на хосте благодаря использованию Linux namespaces.
docker exec <container_id> ps aux
🟠Сетевые интерфейсы Docker-контейнеры используют виртуальные сетевые интерфейсы для связи: veth-pair: Каждый контейнер имеет виртуальный интерфейс, подключенный к мосту (docker0 по умолчанию). Типы сетей: bridge (по умолчанию): Локальная сеть между контейнерами. host: Контейнер использует сетевой стек хоста. none: Полностью изолированный контейнер без сети. overlay: Сеть для соединения контейнеров на разных хостах.
docker network create my_network
docker run --network my_network nginx
🟠Ресурсы хоста (CPU, память, диски) Контейнеры используют ресурсы хоста, но их потребление можно ограничить: CPU: Контейнер может использовать определенную долю процессора.
docker run --cpus="2" nginx
Память: Лимит на использование оперативной памяти.
docker run -m 512m nginx
I/O (диск): Возможность ограничения операций чтения/записи.
docker run --device-read-bps=/dev/sda:1mb nginx
🟠Изоляция (Namespaces и Control Groups) Docker использует технологии изоляции, встроенные в ядро Linux: Namespaces: Обеспечивают изоляцию пространства имен (PID, сети, файловой системы и т.д.). Control Groups (cgroups): Управляют использованием ресурсов (CPU, RAM, I/O).
lsns
🟠Среда выполнения (Runtime) Docker-контейнеры работают благодаря среде выполнения, например: runc: Легковесное средство выполнения контейнеров, совместимое со стандартом OCI. containerd: Менеджер для запуска контейнеров, который Docker использует для взаимодействия с низкоуровневыми компонентами. 🟠Настройки и переменные среды Контейнер может быть настроен с использованием: Переменных среды: Устанавливаются через ENV в Dockerfile или с помощью флага -e.
docker run -e ENV_VAR=value nginx
Аргументов при сборке: Используются в Dockerfile через ARG.
ARG BUILD_VERSION
🟠Приложение или служба Главное, что работает внутри контейнера, — это само приложение: Например, веб-сервер (Nginx, Apache) или база данных (MySQL, PostgreSQL). Контейнеры упрощают запуск приложений с предсказуемыми зависимостями. 🟠Логи и мониторинг Docker предоставляет возможность просматривать логи контейнера и собирать метрики Логи
docker logs <container_id>
Информация о контейнере
docker inspect <container_id>
Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое OOM? Это ситуация, когда системе не хватает памяти для выполнения процессов. 1. В Linux активируется OOM-Killer, чтобы завершить некоторые процессы и освободить память. 2. Это обычно происходит при недостатке оперативной памяти или неправильной конфигурации ресурсов. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что внутри директории 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: Информация о разделах жесткого диска. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какая файловая система бывает с динамическими inode? 1. Файловая система ext4 поддерживает динамическое выделение inode. 2. Это позволяет увеличивать количество inode в зависимости от потребностей, уменьшая ограничение на число файлов. Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Чем DevOps отличается от Agile? 1. Agile: фокусируется на гибкости и итеративной разработке, улучшая взаимодействие между разработчиками и бизнесом. 2. DevOps: охватывает весь жизненный цикл ПО, включая автоматизацию, CI/CD и поддержку инфраструктуры. 3. Agile — это методология, а DevOps — практический подход, объединяющий разработку и эксплуатацию. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что произойдет если под не пройдет readiness пробу? Если под (Pod) в Kubernetes не пройдет readiness-пробу (readiness probe), он будет считаться не готовым для обработки запросов. 🚩Что делает readiness-проба? Readiness-проба используется для определения того, готов ли контейнер в поде обрабатывать входящие запросы. Если проба не проходит, Kubernetes исключает этот под из списка доступных для обслуживания запросов (например, через Service). 🚩Основные последствия 🟠Под не будет получать трафик через Service Kubernetes автоматически исключает под из группы Endpoints для соответствующего сервиса. Другие компоненты системы, обращающиеся к сервису, не будут направлять запросы в этот под. 🟠Под продолжает работать Под не будет удален или перезапущен. Kubernetes продолжит проверять его состояние readiness-пробой до тех пор, пока он не станет готовым. 🟠Нет влияния на liveness-пробу Если readiness-проба не проходит, это не влияет на liveness-пробу. Под будет работать, пока не нарушена его "жизнеспособность". 🟠Аварийное поведение приложения может быть скрыто Если под зависнет или будет не в состоянии обработать запросы, но при этом не нарушит liveness-пробу, он останется запущенным, но не будет получать трафик. 🚩Как это выглядит на практике? Пример readiness-пробы
apiVersion: v1
kind: Pod
metadata:
  name: example-pod
spec:
  containers:
  - name: my-container
    image: nginx
    readinessProbe:
      httpGet:
        path: /
        port: 80
      initialDelaySeconds: 5
      periodSeconds: 10
🚩Сценарий 🟠На старте После создания пода Kubernetes ждет initialDelaySeconds (5 секунд) перед выполнением первой проверки. Если / не отвечает на HTTP-запрос, под считается не готовым. 🟠Если проба продолжает проваливаться Kubernetes исключает под из группы доступных эндпоинтов. Под остается запущенным, и проба выполняется каждые periodSeconds (10 секунд), пока под не станет готовым. 🚩Что произойдет с трафиком? Если под — единственный в сервисе: Запросы к сервису вернут ошибку (например, 503 Service Unavailable), так как ни один под не готов. Если подов несколько: Трафик перенаправляется на другие поды, готовые обрабатывать запросы. 🚩Как это помогает? 🟠Обеспечивает стабильность приложения Под начинает обрабатывать трафик только после полной инициализации. 🟠Улучшает отказоустойчивость В случае проблем с подом система перенаправляет запросы на другие экземпляры. 🟠Поддерживает обновления без простоя Во время обновления подов через Deployment новые поды добавляются в пул доступных только после успешного прохождения readiness-проб. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое провайдеры в Terraform? Это плагины, которые позволяют взаимодействовать с облачными сервисами, API или другими системами. 1. Они управляют ресурсами, такими как виртуальные машины, базы данных или сети. 2. Каждый провайдер содержит набор команд для создания, обновления и удаления инфраструктуры. 3. Примеры: AWS, Azure, Google Cloud. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что такое брокеры сообщений? Это программные системы, которые позволяют обмениваться данными между разными компонентами приложения или между различными приложениями. Они действуют как посредники, принимая сообщения от отправителей (producers) и доставляя их получателям (consumers). 🚩Основные функции брокеров сообщений 🟠Прием и маршрутизация сообщений Сообщения отправляются от одного компонента и доставляются нужному получателю. Брокер определяет, куда отправить сообщение, используя темы (topics), очереди (queues) или маршруты (routing keys). 🟠Асинхронное взаимодействие Отправитель может передать сообщение, не дожидаясь его обработки, что повышает производительность системы. 🟠Очереди сообщений Если получатель временно недоступен, сообщение сохраняется в очереди до тех пор, пока оно не будет доставлено. 🟠Гарантированная доставка Некоторые брокеры предоставляют механизмы подтверждения получения сообщений (acknowledgment), чтобы избежать их потери. 🟠Распределение нагрузки Сообщения могут быть обработаны несколькими получателями, что позволяет распределить нагрузку между ними. 🟠Фильтрация и маршрутизация Сообщения доставляются только тем потребителям, которые их ожидают, используя фильтры или ключи маршрутизации. 🚩Примеры использования брокеров сообщений 🟠Микросервисы Компоненты приложения обмениваются данными через брокер, что позволяет им оставаться изолированными и независимыми. 🟠Логирование и мониторинг Сбор логов и метрик от множества источников с их дальнейшей обработкой. 🟠Управление задачами Постановка задач в очередь для выполнения одним или несколькими воркерами. 🟠Интеграция систем Связывание разнородных систем, которые обмениваются данными. 🚩Примеры брокеров сообщений 🟠RabbitMQ Протокол: AMQP (Advanced Message Queuing Protocol). Поддерживает очереди, маршрутизацию, подтверждения доставки. Хорошо подходит для сложных сценариев с разными типами маршрутизации. 🟠Apache Kafka Протокол: Проприетарный. Отличается высокой производительностью и надежностью. Используется для потоковой обработки данных, аналитики в реальном времени. 🟠Redis (Pub/Sub) Протокол: Redis. Простая и быстрая модель pub/sub. Хорошо подходит для временных сообщений без сохранения состояния. 🟠ActiveMQ Протокол: AMQP, STOMP, MQTT. Гибкий и совместимый с различными сценариями. 🟠NATS Легковесный и быстрый брокер для приложений, требующих низкой задержки. 🚩Как работают брокеры сообщений Producers (отправители) отправляют сообщение в брокер. Брокер размещает сообщение в соответствующей очереди или теме. Consumers (получатели) получают сообщение: Либо сразу, если они активны. Либо позже, если оно сохраняется в очереди. 🚩Пример использования RabbitMQ 1⃣Отправитель публикует сообщение в очередь:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
connection.close()
2⃣Получатель забирает сообщение из очереди:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')

def callback(ch, method, properties, body):
    print(f"Received {body}")

channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=True)
channel.start_consuming()
🚩Плюсы использованияРазделение ответственности Компоненты системы сосредотачиваются на своих задачах, а не на доставке данных. ➕Масштабируемость Легко добавлять новых потребителей или отправителей. ➕Устойчивость к сбоям Брокеры обеспечивают сохранность сообщений, даже если один из компонентов временно недоступен. ➕Гибкость Возможность использовать различные стратегии маршрутизации и обработки данных. Ставь 👍 и забирай 📚 Базу знаний

🤔 Чем отличаются Deployment и ReplicaSet? Управляет поддержанием заданного числа реплик подов, обеспечивая их наличие и работоспособность. Deployment — более высокий уровень абстракции, который использует ReplicaSet для управления подами и добавляет возможности для обновлений, откатов и управления версиями. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Какая разница между deployment и stateful set? Это контроллеры, используемые для управления подами, но они предназначены для различных типов приложений и имеют разные функции. Разница между ними связана с тем, как они управляют жизненным циклом подов, сетевой идентичностью, постоянством данных и порядком развертывания. 🚩Что такое Deployment? Используется для управления статическими или бесстаточными приложениями, где порядок запуска подов, их идентичность и состояние не имеют значения. 🟠Бесстаточные приложения Примеры: веб-серверы, микросервисы, обработка очередей. Каждый под одинаков, и потеря одного из них не нарушает работу приложения. 🟠Порядок развертывания Поды запускаются и удаляются в любом порядке. Если под удаляется, создается новый с другой идентичностью. 🟠Сетевой доступ Поды доступны через Service, но они не сохраняют фиксированные сетевые имена. 🟠Обновления Поддерживает обновления без простоя (rolling updates). Умеет откатываться на предыдущую версию.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.21.6
🚩Что такое StatefulSet? Используется для управления состоянием и обеспечивает упорядоченность и идентичность подов. Это важно для приложений, где требуется сохранение данных, стабильные идентификаторы или порядок операций. 🟠Состояние приложения Примеры: базы данных (MySQL, PostgreSQL), системы очередей (Kafka), распределенные системы (Cassandra, Elasticsearch). Каждый под имеет уникальный идентификатор и связан с определенным хранилищем данных. 🟠Порядок развертывания Поды запускаются, обновляются и удаляются строго в определенном порядке (0, 1, 2...). Это важно для приложений, где один узел должен быть доступен перед запуском другого. 🟠Сетевой доступ Каждый под имеет фиксированное имя (например, pod-0, pod-1), что упрощает взаимодействие между подами. 🟠Обновления Выполняются поэтапно, с учетом порядка. 🟠Постоянство данных Поды используют PersistentVolumeClaim (PVC) для сохранения данных. Даже если под удален, данные остаются на диске и доступны после повторного запуска.
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: "mysql-service"
  replicas: 3
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
      - name: mysql
        image: mysql:5.7
        volumeMounts:
        - name: mysql-data
          mountPath: /var/lib/mysql
  volumeClaimTemplates:
  - metadata:
      name: mysql-data
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 10Gi
🚩Когда использовать что? 🟠Используйте `Deployment` Бесстаточное. Требует быстрой масштабируемости. Не зависит от порядка запуска подов. 🟠Используйте `StatefulSet` Требует сохранения данных между перезапусками. Зависит от фиксированной идентичности подов. Требует упорядоченного запуска или удаления. Ставь 👍 и забирай 📚 Базу знаний

🤔 Что будет происходить при kubectl apply? Команда kubectl apply применяет манифесты Kubernetes к кластеру, создавая или обновляя ресурсы. Если ресурс уже существует, Kubernetes сравнивает его текущее состояние с новым и вносит изменения. Это позволяет применять изменения декларативно, без удаления ресурса. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний