· 15 мин чтения

Kubernetes для начинающих: что это, зачем и как развернуть первый кластер

Меня зовут Семёнов Евгений Сергеевич, я директор АйТи Фреш и за 15+ лет администрирования серверов видел, как инфраструктура эволюционировала от «один сервер — одно приложение» до контейнеризированных кластеров с автоматическим масштабированием. Kubernetes за последние пять лет стал отраслевым стандартом, но вокруг него вьётся облако мифов и страхов. Я всегда начинаю объяснение для клиентов с простой метафоры: если Docker — это контейнер с грузом, то Kubernetes — это морской порт, который знает, куда какой контейнер поставить, как снять с упавшего крана и как быстро перегрузить на другой корабль.

Что такое Kubernetes и откуда он взялся

Kubernetes — это система оркестрации контейнеров, которая автоматизирует их развёртывание, масштабирование и управление жизненным циклом. Google использовал внутреннюю систему Borg для управления своими сервисами больше десяти лет, и в 2014 году выпустил Kubernetes как open-source переосмысление этого опыта. Сейчас проект живёт под CNCF и поддерживается сотнями корпораций.

Главная идея такая. Вы описываете желаемое состояние системы в YAML-файле: «хочу, чтобы запустилось пять реплик моего веб-приложения, каждая с 500 МБ памяти, слушала порт 8080 и была доступна извне по домену app.example.ru». Kubernetes берёт этот манифест и делает так. А если один из подов падает или узел перезагружается — сам поднимает замену на другой ноде, чтобы заявленное количество реплик соблюдалось.

Архитектура: control-plane и worker-узлы

Кластер Kubernetes делится на две роли. Control-plane (управляющие узлы) отвечают за принятие решений — какой под где запустить, какие сервисы зарегистрированы, каков текущий статус. Worker-узлы выполняют реальные рабочие нагрузки, запуская контейнеры пользователя.

Компоненты control-plane:

На worker-узлах работают kubelet (агент, который управляет контейнерами по приказу от apiserver), kube-proxy (настраивает сетевые правила iptables/ipvs для сервисов) и среда выполнения контейнеров — containerd или CRI-O.

Базовые объекты Kubernetes

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

ОбъектДля чегоАналог в обычном мире
PodМинимальная единица запуска, обычно один контейнерПроцесс на сервере
DeploymentНабор подов с автоматическим восстановлениемsystemd-юнит с рестартом
ServiceСтабильный DNS-адрес для группы подовБалансировщик nginx
ConfigMapКонфигурационные данные и переменные окруженияФайл /etc/app.conf
SecretПароли, ключи, сертификатыVault или /etc/shadow

Устанавливаем первый кластер на kubeadm

Для обучения я обычно беру три виртуальные машины на Ubuntu 22.04 с 4 vCPU и 8 ГБ RAM. Одна станет control-plane, две — воркерами. Дальше на каждой машине ставим containerd и kubeadm:

sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | \
  sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] \
  https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /' | \
  sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt update && sudo apt install -y kubelet kubeadm kubectl containerd
sudo apt-mark hold kubelet kubeadm kubectl
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

На будущем control-plane:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml

Команда kubeadm init в конце выведет команду kubeadm join с токеном — её копируем и выполняем на каждом worker-узле. Через минуту kubectl get nodes покажет три Ready-ноды.

Запускаем первое приложение

Возьмём простое nginx и раскатаем его с тремя репликами. Создаём файл nginx-app.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx-app
  template:
    metadata:
      labels:
        app: nginx-app
    spec:
      containers:
      - name: nginx
        image: nginx:1.27-alpine
        ports:
        - containerPort: 80
        resources:
          requests: { cpu: "100m", memory: "64Mi" }
          limits:   { cpu: "500m", memory: "256Mi" }
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  selector:
    app: nginx-app
  ports:
  - port: 80
    targetPort: 80
  type: NodePort

Применяем и проверяем:

kubectl apply -f nginx-app.yaml
kubectl get pods -o wide
kubectl get svc nginx-svc
curl http://<любой-worker-IP>:<NodePort>

Мини-кейс: внедрение для интернет-магазина одежды

В марте 2025 мы перевели клиента — интернет-магазин женской одежды, около 18 000 заказов в месяц — с одного виртуального сервера на кластер Kubernetes из 6 узлов. Выделили три сервера Dell PowerEdge R650 с Xeon Platinum 8280, 384 ГБ RAM на каждый, и объединили их сетью 40G Mellanox ConnectX-5. Железо разместили в дата-центре МТС в Москве, под собственную стойку с резервным питанием.

До переезда сайт раз в неделю уходил в даунтайм на 20-30 минут из-за пиковых нагрузок в вечерние часы. После перехода на Kubernetes с автомасштабированием (HorizontalPodAutoscaler по CPU) приложение само поднимало дополнительные реплики при росте RPS и гасило их ночью. За полгода — ни одного инцидента с недоступностью, среднее время ответа сократилось с 480 мс до 160 мс. Стоимость железа окупилась за 14 месяцев за счёт отказа от аренды облачных серверов с запасом по мощности.

Типичные ошибки новичков

У нас на практике вижу одни и те же грабли у админов, которые впервые трогают Kubernetes:

Развернём Kubernetes-кластер под ваши задачи

Проектируем, устанавливаем и сопровождаем кластеры Kubernetes для компаний Москвы. Подберём железо под нагрузку, настроим мониторинг, CI/CD, резервное копирование etcd и политики безопасности.

Телефон: +7 903 729-62-41
Telegram: @ITfresh_Boss
Семёнов Евгений Сергеевич, директор АйТи Фреш

FAQ — частые вопросы по Kubernetes

Нужен ли Kubernetes офису на 30 человек?
Обычно нет. Если у вас 3-5 небольших приложений, хватает обычного Docker Compose или systemd-юнитов на паре серверов. Kubernetes оправдан, когда приложений десятки, нужны отказоустойчивость, автодеплой и горизонтальное масштабирование.
Сколько узлов минимально для production?
Три control-plane узла и минимум три worker-узла. Один control-plane — это обучение и тест, но не прод.
Чем отличается Deployment от StatefulSet?
Deployment создаёт взаимозаменяемые поды без постоянной идентичности — подходит для stateless веб-приложений. StatefulSet даёт подам стабильные имена и персистентные тома — нужен для баз данных и очередей.
Можно ли обойтись без ingress-контроллера?
Да, через Service типа LoadBalancer или NodePort, но каждому сервису придётся выделять отдельный порт или IP. Ingress-контроллер (nginx, traefik) решает вопрос маршрутизации по доменам и TLS в одном месте.
Что лучше: managed Kubernetes или self-hosted?
Если у вас нет выделенного DevOps — берите managed. Self-hosted экономит деньги, но требует постоянного внимания: обновления etcd, ротация сертификатов, мониторинг control-plane.

Подпишитесь на рассылку ITfresh

Раз в неделю — практические гайды для руководителя IT и сисадмина: безопасность, 1С, миграции, резервные копии, лайфхаки из реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.