Kubernetes в продакшене: основные понятия и вопросы на собеседовании

19 Мая Время чтения 12 мин 192

Меня зовут Александр, я CTO компании AppFox. Мы более 10 лет занимаемся заказной разработкой и также имеем собственные продукты.

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

Что такое Kubernetes простыми словами?

Разберем на примере интернет-магазина с тремя серверами:

  1. Сервер № 1 — основной (принимает заказы).
  2. Сервер № 2 — база данных (хранит товары и пользователей).
  3. Сервер № 3 — бекенд для API (обрабатывает платежи).

Проблема:

  1. В Чёрную пятницу приходит в 10 раз больше покупателей. В результате, сервера № 1 и № 3 падают от нагрузки, магазин «висит».
  2. Сервер № 2 (база данных) ломается, а все заказы теряются.
  3. Чтобы добавить новые сервера, админ вручную копирует настройки, что занимает часы.

Решение при помощи Kubernetes.

Те же 3 сервера, но теперь они управляются Kubernetes.

  1. АвтомасштабированиеПри наплыве покупателей Kubernetes автоматически запускает дополнительные копии серверов № 1 и № 3.Когда нагрузка падает — лишние сервера отключаются.
  2. ОтказоустойчивостьЕсли сервер № 2 (база данных) упал, Kubernetes сразу переключает нагрузку на его резервную копию.Покупатели даже не замечают проблемы.
  3. Гибкие обновленияВы хотите обновить API (сервер № 3).Kubernetes делает это без downtime:Запускает новые версии API, переключает трафик на них и останавливает старые.
  4. Экономия денегНочью, когда магазин почти не используют, Kubernetes отключает часть серверов.Утром — снова включает.

Что это даёт бизнесу?

  1. Магазин не «падает» в пиковые нагрузки (Чёрная пятница, распродажи).
  2. Нет потери заказов — если что-то сломалось, система сама всё починит.
  3. Быстрые обновления — можно выпускать новые фичи без остановки магазина.
  4. Экономия на серверах — не нужно держать «лишние» мощности.

Kubernetes: мощный инструмент, но не серебряная пуля

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

Термин k8s является синонимом Kubernetes и означает 8 букв между первой и последней буквой. Да, программисты любят сокращения :)

Примерно с 2018 года мы наблюдаем устойчивый тренд: Kubernetes стал синонимом «правильной» продакшн-инфраструктуры. И это не случайно. Он действительно решает множество проблем, связанных с управлением микросервисами, масштабированием, отказоустойчивостью и обновлением без простоев.

Когда Kubernetes оправдан:

  1. Микросервисная архитектура с большим количеством сервисов.
  2. Необходимость автоматического масштабирования под нагрузку.
  3. Высокие требования к отказоустойчивости.
  4. Гибкость деплоя (Canary, Blue-Green, A/B-тестирование).

Когда Kubernetes — избыточное решение:

  1. Монолитное приложение с низкой нагрузкой.
  2. Маленькие проекты без потребности в масштабировании.
  3. Стартапы с ограниченным бюджетом.
  4. Проект для демо или MVP, в которых планируется масштабирования только после получения инвестиций
  5. Команда не готова к сложности k8s (обучение и поддержка требуют ресурсов).

В компании AppFox мы используем Kubernetes при построения кластеров для мультиплеерных игр и проектов со сложной микросервисной архитектурой. В частности, мы его использовали при разработке решений для СберБанка и Банка ВТБ.

Основные понятия Kubernetes

  1. Pod — минимальная единица развертывания (может содержать один или несколько контейнеров).
  2. Deployment — декларативное описание желаемого состояния приложения.
  3. Service — абстракция для доступа к подам (ClusterIP, NodePort, LoadBalancer).
  4. Ingress — управление внешним трафиком (роутинг, SSL).
  5. ConfigMap & Secret — хранение конфигураций и чувствительных данных.
  6. PersistentVolume (PV) & PersistentVolumeClaim (PVC) — работа с постоянным хранилищем.
  7. Helm — менеджер пакетов для k8s (чарты).

Вопросы по Kubernetes на собеседовании

Теперь самое интересное — какие вопросы задают кандидатам в зависимости от их уровня.

Для backend-разработчика

Что такое контейнер и зачем нужен Docker?

  1. Контейнер — это изолированное окружение для запуска приложений со всеми зависимостями.
  2. Docker — платформа для создания и управления контейнерами.

Разница между Docker и Kubernetes

  1. Docker создает контейнеры
  2. Kubernetes управляет множеством контейнеров на разных серверах.

Как работает kubectl get pods? Что выведет эта команда?

Команда показывает список подов (pods) — минимальных единиц развертывания в k8s. Вывод включает имя пода, статус, количество рестартов и возраст.

Что такое Deployment и зачем он нужен?

Это объект k8s для декларативного управления подами. Позволяет:

  1. Разворачивать приложения
  2. Обновлять их (rolling update)
  3. Возвращаться к предыдущим версиям (rollback)
  4. Масштабировать количество реплик

Как приложение в k8s получает конфигурацию (ConfigMap, Secrets)?

  1. ConfigMap хранит конфигурации (например, настройки приложения)
  2. Secrets — чувствительные данные (пароли, токены). Они монтируются в поды как файлы или переменные окружения.

Что такое Pod, Deployment и Service?

  1. Pod — это минимальная единица в Kubernetes
  2. Deployment управляет жизненным циклом Pod’ов
  3. Service предоставляет сетевой доступ.

Как подать переменные окружения в Pod?

Через env, envFrom, ConfigMap, Secret.

Что произойдет, если Pod упал?Kubernetes сам его перезапустит — важно понимать работу контроллеров.

Для Junior DevOps

Как создать под с помощью kubectl?

Как посмотреть логи пода?

Как работает Service? Какие типы сервисов знаете?

Абстракция для доступа к набору подов. Типы:

  1. ClusterIP (внутренний IP)
  2. NodePort (порт на каждой ноде)
  3. LoadBalancer (внешний балансировщик)
  4. ExternalName (CNAME-запись)

Как обновить приложение в k8s (стратегии деплоя)?

  1. RollingUpdate (постепенная замена подов)
  2. Recreate (удаление всех старых перед созданием новых)

Что делает kubelet и kube-proxy?

  1. kubelet — агент на нодах, запускает и контролирует контейнеры
  2. kube-proxy — обеспечивает сетевую связность между сервисами

Как создать кластер Kubernetes?

Как подключить volume к Pod’у?

Volume (том) в Kubernetes позволяет сохранять данные между перезапусками Pod’ов. Есть несколько типов томов, но для постоянного хранения данных используются PersistentVolume (PV) и PersistentVolumeClaim (PVC).

  1. PersistentVolume — это ресурс в кластере, представляющий физическое хранилище (например, диск в облаке или NFS-шару). PV создаётся администратором кластера и существует независимо от Pod’ов.
  2. PersistentVolumeClaim — запрос Pod’а на выделение PV. PVC связывается с подходящим PV (или динамически создаёт его, если настроен StorageClass). PVC монтируется в Pod как volume. Если не хочется создавать PV вручную, можно использовать StorageClass для автоматического создания томов.

Чем отличается Horizontal Pod Autoscaler от Vertical Pod Autoscaler?

  1. HPA масштабирует количество Pod’ов на основе метрик нагрузки (увеличивает или уменьшает число реплик (replicas) Deployment’а в зависимости от, например, CPU или памяти, т.е., нагрузка выросла — добавили ещё Pod’ов).
  2. VPA изменяет ресурсы (CPU, память) у контейнеров внутри Pod’а

Посмотреть PV и PVC

Для Middle DevOps

Как настроить Ingress для доступа к сервису?

Как сделать Horizontal Pod Autoscaler (HPA)?

Как управлять ресурсами (requests/limits)?

Как настроить PersistentVolume для stateful-приложения?

Как диагностировать проблему с CrashLoopBackOff?

  1. Посмотреть логи пода
  2. Проверить readiness/liveness пробы
  3. Убедиться, что контейнеру хватает ресурсов
  4. Проверить монтирование томов
  5. Изучить события кластера:kubectl describe pod kubectl get events

Для Senior DevOps

Как настроить NetworkPolicy для изоляции подов?

Как работает etcd и что делать при его проблемах?

Распределенное key-value хранилище — «мозг» Kubernetes. Проблемы и решения:

  1. Недостаток места: регулярная дефрагментация
  2. Высокая задержка: оптимизация сети
  3. Потеря кворума: восстановление из бэкапа

Как настроить мониторинг (Prometheus + Grafana)?

  1. Установка Prometheus Operator
  2. Настройка ServiceMonitor для сбора метрик
  3. Создание Grafana дашбордов
  4. Настройка алертов через Alertmanager

Как организовать multi-cluster управление?

Варианты:

  1. Kubefed (Federation v2)
  2. Cluster API
  3. Коммерческие решения (GKE Anthos, EKS Anywhere)Основные задачи: синхронизация ресурсов, единая аутентификация, централизованное логирование.

Как оптимизировать costs в облачном k8s (автоскейлинг нод)?

  1. Использование spot-инстансов
  2. Автомасштабирование нод (Cluster Autoscaler)
  3. Вертикальное масштабирование подов (VPA)
  4. Планирование подов на дешевые ноды (node affinity/taints)
  5. Использование serverless-решений (AWS Fargate, GCP Cloud Run)

Заключение: Kubernetes — мощный инструмент, но не панацея

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

Главный совет:

  1. Если у вас микросервисы, высокая нагрузка или требовательная инфраструктура — Kubernetes может стать вашим решением.
  2. Если проект небольшой или монолитный — начните с простых решений (Docker Compose, managed-сервисов) и масштабируйтесь постепенно.

Попробуйте Kubernetes в действии:

  1. Разверните локальный кластер через minikube или kind.
  2. Поэкспериментируйте с Helm-чартами и автоскейлингом.
  3. Изучите managed-решения (GKE/EKS/AKS), чтобы оценить их преимущества.
Категории: Прочее