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

Что такое Kubernetes простыми словами?
Разберем на примере интернет-магазина с тремя серверами:
Сервер №1 – основной (принимает заказы).
Сервер №2 – база данных (хранит товары и пользователей).
Сервер №3 – бекенд для API (обрабатывает платежи).
Проблема:
В Чёрную пятницу приходит в 10 раз больше покупателей. В результате, сервера №1 и №3 падают от нагрузки, магазин "висит".
Сервер №2 (база данных) ломается, а все заказы теряются.
Чтобы добавить новые сервера, админ вручную копирует настройки, что занимает часы.
Решение при помощи Kubernetes.
Те же 3 сервера, но теперь они управляются Kubernetes.
Автомасштабирование
При наплыве покупателей Kubernetes автоматически запускает дополнительные копии серверов №1 и №3.
Когда нагрузка падает – лишние сервера отключаются.
Отказоустойчивость
Если сервер №2 (база данных) упал, Kubernetes сразу переключает нагрузку на его резервную копию.
Покупатели даже не замечают проблемы.
Гибкие обновления
Вы хотите обновить API (сервер №3).
Kubernetes делает это без downtime:
Запускает новые версии API, переключает трафик на них и останавливает старые.
Экономия денег
Ночью, когда магазин почти не используют, Kubernetes отключает часть серверов.
Утром – снова включает.
Что это даёт бизнесу?
Магазин не "падает" в пиковые нагрузки (Чёрная пятница, распродажи).
Нет потери заказов – если что-то сломалось, система сама всё починит.
Быстрые обновления – можно выпускать новые фичи без остановки магазина.
Экономия на серверах – не нужно держать "лишние" мощности.
Kubernetes: мощный инструмент, но не серебряная пуля
Kubernetes — это система оркестрации контейнеров, которая помогает управлять масштабируемыми и отказоустойчивыми приложениями.
Термин k8s является синонимом Kubernetes и означает 8 букв между первой и последней буквой. Да, программисты любят сокращения :)
Примерно с 2018 года мы наблюдаем устойчивый тренд: Kubernetes стал синонимом «правильной» продакшн-инфраструктуры. И это не случайно. Он действительно решает множество проблем, связанных с управлением микросервисами, масштабированием, отказоустойчивостью и обновлением без простоев.
Когда Kubernetes оправдан:
Микросервисная архитектура с большим количеством сервисов.
Необходимость автоматического масштабирования под нагрузку.
Высокие требования к отказоустойчивости.
Гибкость деплоя (Canary, Blue-Green, A/B-тестирование).
Когда Kubernetes — избыточное решение:
Монолитное приложение с низкой нагрузкой.
Маленькие проекты без потребности в масштабировании.
Стартапы с ограниченным бюджетом.
Проект для демо или MVP, в которых планируется масштабирования только после получения инвестиций
Команда не готова к сложности k8s (обучение и поддержка требуют ресурсов).
В компании AppFox мы используем Kubernetes при построения кластеров для мультиплеерных игр и проектов со сложной микросервисной архитектурой. В частности, мы его использовали при разработке решений для СберБанка и Банка ВТБ.
Основные понятия Kubernetes
Pod — минимальная единица развертывания (может содержать один или несколько контейнеров).
Deployment — декларативное описание желаемого состояния приложения.
Service — абстракция для доступа к подам (ClusterIP, NodePort, LoadBalancer).
Ingress — управление внешним трафиком (роутинг, SSL).
ConfigMap & Secret — хранение конфигураций и чувствительных данных.
PersistentVolume (PV) & PersistentVolumeClaim (PVC) — работа с постоянным хранилищем.
Helm — менеджер пакетов для k8s (чарты).
Вопросы по Kubernetes на собеседовании
Теперь самое интересное — какие вопросы задают кандидатам в зависимости от их уровня.
Для backend-разработчика
Что такое контейнер и зачем нужен Docker?
Контейнер - это изолированное окружение для запуска приложений со всеми зависимостями.
Docker - платформа для создания и управления контейнерами.
Разница между Docker и Kubernetes
Docker создает контейнеры
Kubernetes управляет множеством контейнеров на разных серверах.
Как работает kubectl get pods? Что выведет эта команда?
Команда показывает список подов (pods) - минимальных единиц развертывания в k8s. Вывод включает имя пода, статус, количество рестартов и возраст.
Что такое Deployment и зачем он нужен?
Это объект k8s для декларативного управления подами. Позволяет:
Разворачивать приложения
Обновлять их (rolling update)
Возвращаться к предыдущим версиям (rollback)
Масштабировать количество реплик
Как приложение в k8s получает конфигурацию (ConfigMap, Secrets)?
ConfigMap хранит конфигурации (например, настройки приложения)
Secrets - чувствительные данные (пароли, токены). Они монтируются в поды как файлы или переменные окружения.
Что такое Pod, Deployment и Service?
Pod — это минимальная единица в Kubernetes
Deployment управляет жизненным циклом Pod'ов
Service предоставляет сетевой доступ.
Как подать переменные окружения в Pod?
Через env, envFrom, ConfigMap, Secret.
Что произойдет, если Pod упал?
Kubernetes сам его перезапустит — важно понимать работу контроллеров.
Для Junior DevOps
Как создать под с помощью kubectl?
kubectl run nginx
--image=nginx
Или через YAML-манифест:
kubectl apply-f pod.yaml
Как посмотреть логи пода?
kubectl logs
<pod-name>
Для пода с несколькими контейнерами:
kubectl logs<pod-name> -c <container-name>
Как работает Service? Какие типы сервисов знаете?
Абстракция для доступа к набору подов. Типы:
ClusterIP (внутренний IP)
NodePort (порт на каждой ноде)
LoadBalancer (внешний балансировщик)
ExternalName (CNAME-запись)
Как обновить приложение в k8s (стратегии деплоя)?
RollingUpdate (постепенная замена подов)
Recreate (удаление всех старых перед созданием новых)
Что делает kubelet и kube-proxy?
kubelet - агент на нодах, запускает и контролирует контейнеры
kube-proxy - обеспечивает сетевую связность между сервисами
Как создать кластер Kubernetes?
Minikube – простой однодосковый кластер для разработки / тестирования
minikube start --driver=docker # Запуск с Docker-драйвером
minikube kubectl -- get pods # Доступ к kubectlKind (Kubernetes in Docker) – кластер внутри контейнеров Docker (не имеет облачных интеграций)
kind create cluster --name my-cluster # Создать кластер
kubectl cluster-info --context kind-my-cluster # Проверитьkubeadm – стандартный инструмент для развертывания
продакшен-кластера (нужно управлять вручную)# На мастер-ноде:
kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# На worker-нодах:
kubeadm join <MASTER_IP>:6443 --token <TOKEN>
--discovery-token-ca-cert-hash <HASH>
# Установка CNI (например, Calico):
kubectl apply -fhttps://docs.projectcalico.org/manifests/calico.yaml
GKE (Google Kubernetes Engine) - управляемые облачные кластеры
gcloud container clusters create my-cluster --num-nodes=3
gcloud container clusters get-credentials my-clusterEKS (Amazon Elastic Kubernetes Service)
eksctl create cluster --name my-cluster --region us-west-2 --nodegroup-name workers --nodes 3
AKS (Azure Kubernetes Service)
az aks create --resource-group my-group --name my-cluster --node-count 3
az aks get-credentials --resource-group my-group --name my-cluster
Как подключить volume к Pod'у?
Volume (том) в Kubernetes позволяет сохранять данные между перезапусками Pod'ов. Есть несколько типов томов, но для постоянного хранения данных используются PersistentVolume (PV) и PersistentVolumeClaim (PVC).
PersistentVolume — это ресурс в кластере, представляющий физическое хранилище (например, диск в облаке или NFS-шару). PV создаётся администратором кластера и существует независимо от Pod'ов.
PersistentVolumeClaim — запрос Pod'а на выделение PV. PVC связывается с подходящим PV (или динамически создаёт его, если настроен
StorageClass
). PVC монтируется в Pod как volume. Если не хочется создавать PV вручную, можно использовать StorageClass для автоматического создания томов.
Чем отличается Horizontal Pod Autoscaler от Vertical Pod Autoscaler?
HPA масштабирует количество Pod'ов на основе метрик нагрузки (увеличивает или уменьшает число реплик (replicas) Deployment'а в зависимости от, например, CPU или памяти, т.е., нагрузка выросла — добавили ещё Pod'ов).
VPA изменяет ресурсы (CPU, память) у контейнеров внутри Pod'а
# Посмотреть PV и PVC
kubectl get pv
kubectl get pvc
# Проверить, что Pod видит данные
kubectl exec -it my-pod -- ls /usr/share/nginx/html
Для Middle DevOps
Как настроить Ingress для доступа к сервису?
Пример yaml-манифеста:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host:
example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
Как сделать Horizontal Pod Autoscaler (HPA)?
Пример yaml-манифеста:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
Как управлять ресурсами (requests/limits)?
Пример yaml-манифеста пода:
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
Как настроить PersistentVolume для stateful-приложения?
Пример для stateful-приложения (yaml
):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: db-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
Как диагностировать проблему с CrashLoopBackOff?
Посмотреть логи пода
Проверить readiness/liveness пробы
Убедиться, что контейнеру хватает ресурсов
Проверить монтирование томов
Изучить события кластера:
kubectl describe pod <
pod-name
>kubectl get events
Для Senior DevOps
Как настроить NetworkPolicy для изоляции подов?
Пример изоляции (yaml
):
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-isolation
spec:
podSelector:
matchLabels:
app: database
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: backend
ports:
- protocol: TCP
port: 5432
Как работает etcd
и что делать при его проблемах?
Распределенное key-value хранилище - "мозг" Kubernetes. Проблемы и решения:
Недостаток места: регулярная дефрагментация
Высокая задержка: оптимизация сети
Потеря кворума: восстановление из бэкапа
Как настроить мониторинг (Prometheus + Grafana)?
Установка Prometheus Operator
Настройка ServiceMonitor для сбора метрик
Создание Grafana дашбордов
Настройка алертов через Alertmanager
Как организовать multi-cluster управление?
Варианты:
Kubefed (Federation v2)
Cluster API
Коммерческие решения (GKE Anthos, EKS Anywhere)
Основные задачи: синхронизация ресурсов, единая аутентификация, централизованное логирование.
Как оптимизировать costs в облачном k8s (автоскейлинг нод)?
Использование spot-инстансов
Автомасштабирование нод (Cluster Autoscaler)
Вертикальное масштабирование подов (VPA)
Планирование подов на дешевые ноды (node affinity/taints)
Использование serverless-решений (AWS Fargate, GCP Cloud Run)
Заключение: Kubernetes — мощный инструмент, но не панацея
Kubernetes действительно стал стандартом для оркестрации контейнеров в современных облачных и гибридных средах. Он решает ключевые задачи: масштабируемость, отказоустойчивость и автоматизацию деплоя. Однако его внедрение требует взвешенного подхода — не каждый проект нуждается в такой сложности.
Главный совет:
Если у вас микросервисы, высокая нагрузка или требовательная инфраструктура — Kubernetes может стать вашим решением.
Если проект небольшой или монолитный — начните с простых решений (Docker Compose, managed-сервисов) и масштабируйтесь постепенно.
Попробуйте Kubernetes в действии:
Разверните локальный кластер через minikube или kind.
Поэкспериментируйте с Helm-чартами и автоскейлингом.
Изучите managed-решения (GKE/EKS/AKS), чтобы оценить их преимущества.