Меня зовут Александр, я 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 # Доступ к kubectl -
Kind (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-cluster -
EKS (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), чтобы оценить их преимущества.
ссылка на оригинал статьи https://habr.com/ru/articles/909260/
Добавить комментарий