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

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

رفتن به کانال در Telegram
5 511
مشترکین
-224 ساعت
-47 روز
-330 روز
آرشیو پست ها
🤔 В каком месте пайплайна нужно подключать новую инфраструктуру, нужно ли её как-то готовить? 1. Место в пайплайне: - Подключение инфраструктуры происходит в начальных шагах, перед тестированием и деплоем. 2. Подготовка: - Настройте сервер, проверьте доступность и корректность конфигурации. - Убедитесь, что инфраструктура поддерживает требования приложения (например, порты, доступ к базам данных). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что используется внутри докер контейнера? Внутри 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>
Ставь 👍 и забирай 📚 Базу знаний

Дизайн в FIGMA с нуля. Бесплатный курс + портфолио Онлайн-программа с наставником и чатом. Дизайн от профессионалов. Доступ 0
Дизайн в FIGMA с нуля. Бесплатный курс + портфолио Онлайн-программа с наставником и чатом. Дизайн от профессионалов. Доступ 0 руб. Узнать больше #реклама 16+ yudaevschool24.online О рекламодателе

🤔 Сколько часов живёт один вал Prometheus CI/CD? Файлы WAL (write-ahead log) в Prometheus обычно хранятся 2 часа по умолчанию, после чего происходит компрессия данных в блоки. Этот параметр можно настроить через флаг запуска --storage.tsdb.min-block-duration. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

Бесплатный курс по дизайну: веб, графический и UX/UI Научись создавать дизайн сайтов и приложений, инфографику для карточек н
Бесплатный курс по дизайну: веб, графический и UX/UI Научись создавать дизайн сайтов и приложений, инфографику для карточек на маркетплейсах и работать в Figma! Студенты курса в среднем зарабатывают от 68 000 ₽ уже во время обучения💰 Этот курс для тебя, если ты: ✅ мечтаешь о новой профессии в digital, но не знаешь, с чего начать; ✅ чувствуешь, что хочешь большего — свободы, самореализации, творчества; ✅ полный новичок и хочешь систему, а не хаос; ✅ хочешь начать зарабатывать удалённо. Зарегистрироваться #реклама 16+ ydaev.ru О рекламодателе

🤔 Как осуществляли деплой на kubernetes? Развертывание приложения на Kubernetes включает несколько шагов, таких как подготовка конфигурационных файлов, настройка окружения и выполнение команд для развертывания. 🚩Шаги для деплоя 1⃣Подготовка Docker-образа Первый шаг — подготовить Docker-образ приложения. Пример Dockerfile
# Используем официальный образ Python
FROM python:3.8-slim

# Устанавливаем рабочую директорию
WORKDIR /app

# Копируем все файлы в контейнер
COPY . /app

# Устанавливаем зависимости
RUN pip install --no-cache-dir -r requirements.txt

# Определяем команду запуска
CMD ["python", "app.py"]
Создание и загрузка Docker-образа в Docker Hub
docker build -t username/myapp:latest .
docker push username/myapp:latest
2⃣Создание конфигурационных файлов Kubernetes Для развертывания приложения на Kubernetes, необходимо создать манифесты для деплоя (Deployment), сервиса (Service) и других необходимых ресурсов. Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: myapp
  template:
    metadata:
      labels:
        app: myapp
    spec:
      containers:
      - name: myapp
        image: username/myapp:latest
        ports:
        - containerPort: 80
Service
apiVersion: v1
kind: Service
metadata:
  name: myapp-service
spec:
  type: LoadBalancer
  selector:
    app: myapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80
3⃣Применение конфигураций Применение манифестов для создания ресурсов в кластере Kubernetes:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
4⃣Проверка статуса Проверка статуса развертывания и сервисов:
kubectl get deployments
kubectl get services
kubectl get pods
5⃣Настройка автоскейлинга (по желанию) Для обеспечения высокой доступности и масштабируемости можно настроить горизонтальное авто-масштабирование:
kubectl autoscale deployment myapp-deployment --cpu-percent=50 --min=1 --max=10
6⃣Обновление приложения Для обновления приложения необходимо изменить образ в деплойменте и применить изменения: Обновление Docker-образа
docker build -t username/myapp:v2 .
docker push username/myapp:v2
Обновление манифеста Deployment
spec:
  template:
    spec:
      containers:
      - name: myapp
        image: username/myapp:v2
Применение изменений
kubectl apply -f deployment.yaml
🚩Пример полного пайплайна Пример .gitlab-ci.yml для автоматизации деплоя
stages:
  - build
  - push
  - deploy

variables:
  DOCKER_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG

build:
  stage: build
  script:
    - docker build -t $DOCKER_IMAGE .
  only:
    - main

push:
  stage: push
  script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
    - docker push $DOCKER_IMAGE
  only:
    - main

deploy:
  stage: deploy
  script:
    - kubectl apply -f deployment.yaml
    - kubectl apply -f service.yaml
  only:
    - main
Ставь 👍 и забирай 📚 Базу знаний

Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как
Запустите рекламу в телеграм-каналах с Яндекс Директом Перфоманс-реклама теперь в телеграм-каналах ⚡ Яндекс Директ знает, как привлечь целевую аудиторию 💰👌 Попробовать #реклама yandex.ru О рекламодателе

🤔 Что такое сокет? Сокет — это конечная точка двустороннего сетевого соединения. Используется для обмена данными между приложениями по сети. Может быть: - TCP-сокет (надёжный, соединение); - UDP-сокет (без соединения, быстрее). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

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

Виртуальный сервер в аренду в России и Турции. Отказоустойчивый виртуальный облачный сервер / дата центр IaaS на базе виртуал
Виртуальный сервер в аренду в России и Турции. Отказоустойчивый виртуальный облачный сервер / дата центр IaaS на базе виртуализаций VMWARE, РУСТЭК по модели подписки. Аналог Elastic Cloud EC2. - Доступность сервиса — от 99,982% SLA - Дата центры Tier III в России и Турции - Резервное копирование на удаленную площадку (ок. 10 км) - Размещение персональных данных и ГИС по ФЗ-152 - Лицензированные решения Microsoft - Почасовой биллинг и постоплата - Оплата в рублях, турецких лирах, Euro - 30 дней бесплатное тестирование для юр. лиц Подключите услугу сегодня со скидкой 50% на инфраструктуру. Подать заявку #реклама 16+ cloud4y.ru О рекламодателе

🤔 Что такое Kafka Connector? Это часть Kafka Connect — фреймворка для интеграции с внешними системами: - Source connector — забирает данные (из БД, файлов и т.п.) и пишет в Kafka. - Sink connector — читает из Kafka и пишет в БД, Elastic, ClickHouse и т.д. Коннекторы — это готовые модули, которые не требуют писать код вручную. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В чём преимущество Kubernetes как платформы? Это платформа для оркестрации контейнеров, которая упрощает развертывание, управление и масштабирование приложений. Она имеет ряд ключевых преимуществ, которые делают её популярной в DevOps и облачных решениях. 🚩Основные плюсыАвтоматизация управления приложениями Kubernetes автоматически запускает, останавливает и перезапускает контейнеры при сбоях. Поддерживает заданное число экземпляров (реплик) приложений, перезапуская или создавая их при необходимости. ➕Масштабирование (горизонтальное и вертикальное) Ручное: Легко увеличить или уменьшить количество контейнеров (поды) для приложения. Автоматическое: Используя Horizontal Pod Autoscaler (HPA), Kubernetes добавляет ресурсы при увеличении нагрузки. ➕Высокая доступность (HA) Kubernetes поддерживает отказоустойчивость: Если один узел (node) выходит из строя, поды перемещаются на другие узлы. Внутренний балансировщик нагрузки распределяет трафик между подами. ➕Платформонезависимость Kubernetes работает в любых средах: Локальных (например, Minikube). В публичных облаках (AWS, Google Cloud, Azure). В гибридных и on-premise инфраструктурах. ➕Управление конфигурацией и секретами Kubernetes упрощает работу с настройками: ConfigMaps: Для управления конфигурационными данными. Secrets: Для безопасного хранения конфиденциальной информации, например, ключей API или паролей. ➕Эффективное использование ресурсов Kubernetes помогает оптимизировать потребление CPU и памяти: Устанавливая минимальные и максимальные лимиты ресурсов для каждого приложения. Перераспределяя ресурсы между приложениями. ➕Расширяемость Kubernetes поддерживает плагины и кастомизацию: Сетевые плагины (Calico, Flannel) для настройки сети. Системы мониторинга (Prometheus, Grafana). Операторы для автоматизации сложных задач. ➕Сообщество и экосистема Kubernetes поддерживается большинством крупных облачных провайдеров. Обширная экосистема инструментов: Helm для управления шаблонами, ArgoCD для GitOps, Istio для сетевых взаимодействий. 🚩Когда особенно полезен? Разработка микросервисных архитектур. Частые релизы и автоматизация CI/CD. Работа с масштабируемыми приложениями. Использование гибридных или мультиоблачных решений. Ставь 👍 и забирай 📚 Базу знаний

🤔 Почему при доступном месте файлы не создаются? Это может происходить по нескольким причинам, даже если свободное место есть: 1. Закончились inode'ы — файловая система использует их для хранения метаданных файлов. Если они исчерпаны, новые файлы нельзя создать. 2. Ограничения прав — пользователь или процесс может не иметь разрешения на запись. 3. Переполнение квоты — если включены пользовательские квоты на дисковое пространство. 4. Ошибка монтирования — путь указывает на размонтированное хранилище, и запись идёт не туда. 5. Файловая система в режиме только для чтения — возможно после сбоев или ошибок диска. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое дешборды в графане? Это визуальные панели, на которых отображаются метрики, логи и данные, собранные из различных источников. Они используются для мониторинга состояния систем, приложений и инфраструктуры, предоставляя наглядное представление в виде графиков, диаграмм, таблиц и других визуализаций. 🚩Почему нужны дешборды в Grafana? 🟠Мониторинг в реальном времени Позволяют наблюдать за ключевыми показателями производительности (KPI) систем в реальном времени. Например, загрузка CPU, использование памяти, число запросов в секунду. 🟠Диагностика и устранение проблем Дешборды помогают быстро находить аномалии или сбои. Например, резкий рост времени отклика или падение уровня доступности. 🟠Простота анализа данных Объединяют данные из разных источников в одном месте (Prometheus, Elasticsearch, Loki, InfluxDB, PostgreSQL и др.). Упрощают анализ данных благодаря визуализации. 🟠Настраиваемость и удобство Можно создавать персонализированные панели под конкретные задачи или роли (разработчики, SRE, менеджеры). 🚩Основные элементы дешборда 🟠Панели (Panels) Каждая панель отображает отдельный набор данных в определенном виде (график, таблица, heatmap, текст и др.). Пример: График использования памяти на сервере. 🟠Источник данных (Data Source) Данные, отображаемые на панели, поступают из определённого источника (Prometheus, Elasticsearch, MySQL и т.д.). Grafana поддерживает множество интеграций. 🟠Переменные (Variables) Динамические параметры, которые позволяют изменять отображаемые данные без необходимости редактировать панель. Пример: Переключение между разными серверами или метриками. 🟠Алёрты (Alerts) Настраиваемые уведомления, которые активируются при достижении определённого порога метрики. Пример: Отправка уведомления в Slack при увеличении загрузки CPU выше 90%. 🟠Теги и аннотации Обозначают ключевые события на графиках, например, развёртывание нового релиза. 🚩Пример использования дешборда 🟠Панели 1. Время отклика API (Response Time). 2. Число активных пользователей (Active Users). 3. Использование ресурсов (CPU, RAM). 4. Ошибки HTTP (5xx, 4xx). 🟠Источники данных - Prometheus для метрик. - Loki для логов. - MySQL для аналитических данных. 🟠Переменные - Выбор региона (например, Европа, США). - Фильтрация по микросервисам. 🚩Создание дешборда в Grafana 🟠Добавление панели В интерфейсе Grafana создайте новый дешборд. Добавьте панель и выберите тип визуализации (график, таблица, бар-чарт и т.д.). 🟠Настройка источника данных Укажите источник данных для каждой панели. Например, Prometheus: rate(http_requests_total[5m]). 🟠Настройка фильтров и переменных Добавьте переменные, чтобы дешборд был динамичным. 🟠Добавление алертов Настройте триггеры для уведомлений (например, при высоком времени отклика). Ставь 👍 и забирай 📚 Базу знаний

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

🤔 Какой самый большой минус Ansible? Ansible – мощный инструмент для автоматизации, но у него есть серьезные недостатки, особенно при масштабировании. 🚩Основной минус – Медленная работа на больших инфраструктурах 🟠Нет агентов каждый раз Ansible подключается по SSH и выполняет задачи без предварительного кеширования что замедляет процесс. 🟠Ограничения Python на удаленных хостах если целевой сервер слабый или без Python, выполнение плейбуков будет медленным. 🟠Последовательное выполнение по умолчанию Ansible выполняет задачи последовательно, что дольше, чем параллельные методы (например, в SaltStack).
yaml  
- name: Установка Nginx  
  hosts: all  
  tasks:  
    - name: Установить Nginx  
      apt:  
        name: nginx  
        state: present  
Запуск задач параллельно (-f 50)
sh  
ansible-playbook playbook.yml -f 50  
🚩Другие минусы Ansible 🟠Высокая нагрузка на управляющий узел Если 1000+ серверов, главный Ansible-узел может быстро перегрузиться. 🟠Сложное управление зависимостями Роли могут конфликтовать, если версии не совпадают. Ansible Galaxy не такой удобный, как Terraform Registry 🟠Ограниченная идемпотентность Некоторые модули (особенно shell и command) не всегда понимают, применялась ли конфигурация раньше. Ставь 👍 и забирай 📚 Базу знаний

🤔 Когда разработчик запушил новый код, как он попадает в продакшн? После пуша кода в репозиторий, запускается пайплайн CI: сборка и тесты. Если все проходит успешно, код проходит через пайплайн CD: деплой на staging, затем на продакшн (с возможным откатом и валидацией). Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 Что такое брокеры сообщений? Это программные системы, которые позволяют обмениваться данными между разными компонентами приложения или между различными приложениями. Они действуют как посредники, принимая сообщения от отправителей (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()
🚩Плюсы использованияРазделение ответственности Компоненты системы сосредотачиваются на своих задачах, а не на доставке данных. ➕Масштабируемость Легко добавлять новых потребителей или отправителей. ➕Устойчивость к сбоям Брокеры обеспечивают сохранность сообщений, даже если один из компонентов временно недоступен. ➕Гибкость Возможность использовать различные стратегии маршрутизации и обработки данных. Ставь 👍 и забирай 📚 Базу знаний

🤔 Какой дистрибутив выбрать для высоконагруженных приложений — RHEL или Debian? - RHEL/CentOS/AlmaLinux/Rocky: - Более предсказуемое поведение (stable ABI); - Широкая поддержка корпоративных решений (Oracle, SAP); - SELinux. - Debian/Ubuntu: - Больше свободных пакетов; - Быстрее обновления; - Лучше для разработки. Вывод: для продакшна в крупном энтерпрайзе — чаще RHEL. Для DevOps и CI — Debian. Ставь 👍 если знал ответ, 🔥 если нет Забирай 📚 Базу знаний

🤔 В каких случаях удобно использовать kubernetes, а в каких docker-compose? Оба инструмента управляют контейнерами, но предназначены для разных сценариев. 🚩Когда использовать Docker Compose? Docker Compose удобен для локальной разработки и небольших проектов. Разворачиваете приложение на одном сервере. Нужно быстро поднять несколько сервисов (БД, кэш, бекенд, фронт). Разработка ведется в команде, и среда должна быть одинаковой. Нет необходимости в сложном оркестрационном механизме (авто-масштабирование, балансировка нагрузки). Файл docker-compose.yml для запуска бэкенда и базы данных локально:
version: '3'
services:
  app:
    image: my-backend:latest
    ports:
      - "5000:5000"
    depends_on:
      - db
  db:
    image: postgres:15
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
Команда запуска:
docker-compose up -d
🚩Когда использовать Kubernetes? Kubernetes удобен для продакшн-окружений, облаков и сложных приложений. Нужно масштабирование (автоматическое увеличение/уменьшение количества контейнеров). Требуется автоисправление (если контейнер падает, он перезапускается). Используется балансировка нагрузки (Kubernetes распределяет трафик между подами). Нужна развертка в кластере (несколько машин, облако). Требуется обновление без простоя (rolling updates).
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-backend:latest
        ports:
        - containerPort: 5000
Разворачиваем в Kubernetes:
kubectl apply -f my-app.yaml
Ставь 👍 и забирай 📚 Базу знаний