Представьте большой порт, где сотни контейнеров с грузами нужно раскладывать по кораблям, следить, чтобы ни один груз не потерялся, а если корабль сломался, перенести груз на другой. Kubernetes (его часто называют K8s, «кубер») — это такой диспетчер для контейнеров. Вы говорите ему: «Мне нужны три копии моего приложения», — а он сам решает, на каких серверах их запустить, следит за ними и поднимает заново, если что-то упало.
Название пришло из греческого языка и означает «штурман» или «рулевой». Логотип — штурвал со спицами, поэтому его иногда называют «рулевым» для контейнеров.
КороткоKubernetes — это система, которая запускает контейнеры на множестве серверов, следит за их состоянием и сама исправляет отклонения от описанного вами желаемого результата.
2. Зачем он нужен: проблема без него
Пока приложение живёт на одном сервере, всё просто. Когда появляется десять микросервисов, каждый в трёх копиях, и они разбросаны по двадцати серверам, возникают вопросы:
Где сейчас запущен каждый контейнер и что делать, если сервер выключился ночью?
Как обновить приложение без простоя?
Как сервисы находят друг друга, если их адреса постоянно меняются?
Как распределить нагрузку, если пиковый трафик вырос в пять раз?
Kubernetes отвечает на все эти вопросы: он берёт на себя размещение, масштабирование, обновления и восстановление. Администратор описывает желаемое состояние, а система постоянно к нему приводит.
3. Базовые понятия
Понятие
Простое объяснение
Контейнер
Упакованное приложение со всеми зависимостями (например, образ Docker)
Под (Pod)
Минимальная единица в Kubernetes: один или несколько тесно связанных контейнеров, которые живут вместе и делят сеть
Узел (Node)
Сервер, физический или виртуальный, на котором запускаются поды
Кластер
Набор узлов плюс «мозг», которым управляется всё вместе
Манифест
Файл в формате YAML, в котором вы описываете желаемое состояние
Namespace
Логическая «папка» для объектов, например для разных команд или окружений
4. Архитектура: из чего состоит кластер
Кластер Kubernetes делится на две большие части. Первая — control plane, «мозг», который принимает решения. Вторая — рабочие узлы (worker nodes), на которых реально крутятся ваши приложения.
Упрощённая схема: control plane принимает решения, рабочие узлы запускают поды
5. Компоненты control plane
Control plane состоит из нескольких программ. Обычно они запускаются на одном или нескольких выделенных серверах.
kube-apiserver — единственная «дверь» в кластер. Через него общаются все: вы через kubectl, узлы и другие компоненты. Он проверяет запросы и сохраняет состояние.
etcd — распределённое хранилище «ключ-значение», где лежит всё состояние кластера: какие объекты созданы, что на что настроено. Потеря etcd без резервной копии — самая серьёзная авария.
kube-scheduler — выбирает, на каком узле запустить новый под. Учитывает свободные ресурсы, правила размещения и ограничения.
kube-controller-manager — набор контроллеров. Каждый следит за своим типом объектов: например, контроллер ReplicaSet поддерживает нужное число копий, а контроллер узлов реагирует, если узел пропал.
cloud-controller-manager — связывает кластер с облаком (AWS, Azure, GCP): создаёт балансировщики и диски. Нужен только в облачных кластерах.
Запомните главноеAPI server — вход, etcd — память, scheduler — решает, где запустить, controller manager — поддерживает порядок.
6. Компоненты рабочего узла
kubelet — главный агент на каждом узле. Получает от control plane список подов, которые должны работать здесь, и запускает их через container runtime. Также отчитывается о состоянии.
kube-proxy — настраивает сетевые правила на узле, чтобы трафик к сервису Kubernetes попадал на нужные поды.
Container runtime — программа, которая реально запускает контейнеры. Сегодня чаще всего это containerd. Docker напрямую в Kubernetes с версии 1.24 не используется, но образы Docker работают как прежде.
7. Вспомогательные части: DNS, сеть, метрики
CoreDNS — DNS внутри кластера. Позволяет обращаться к сервисам по имени, например my-service.my-namespace, а не по IP.
Сетевые плагины (CNI) — отвечают за сеть между подами на разных узлах. Популярные: Calico, Flannel, Cilium.
Metrics Server — собирает базовые метрики CPU и памяти, без них работают автоскейлеры и команда kubectl top.
8. Что происходит, когда вы пишете kubectl apply
Представьте, что вы отправили манифест с описанием Deployment из трёх копий. Что произойдёт дальше:
kubectl отправляет манифест в API server.
API server проверяет права и корректность и записывает объект в etcd.
Контроллер Deployment видит новый объект и создаёт ReplicaSet, а тот — три пода.
Scheduler выбирает для каждого пода подходящий узел.
kubelet на выбранном узле получает задание и запускает контейнеры через runtime.
kube-proxy и CoreDNS обновляют правила сети, чтобы сервис начал принимать трафик.
Путь манифеста от команды до запущенного пода
9. Основные объекты Kubernetes
Объект
Для чего нужен
Pod
Один или несколько контейнеров, работающих вместе
ReplicaSet
Поддерживает нужное число одинаковых подов
Deployment
Обычные приложения: обновления, откаты, управление ReplicaSet
StatefulSet
Приложения с состоянием (базы данных): постоянные имена подов и свои диски. Подробнее см. статью по контроллеру StatefulSet в ссылках ниже
DaemonSet
По одному поду на каждом узле: агенты логов и мониторинга
Job / CronJob
Разовая задача и задача по расписанию
Service
Постоянный адрес для группы подов, внутренняя балансировка нагрузки
Ingress
Маршрутизация внешнего HTTP/HTTPS-трафика по доменам и путям
ConfigMap / Secret
Настройки и секреты, отдельно от образа приложения
PersistentVolume / PVC
Постоянное хранилище, которое переживает перезапуск пода
10. Способы установки: обзор
Способов установить Kubernetes много. Они различаются по сложности, назначению и по тому, кто отвечает за обслуживание. Ниже — основные варианты.
Способ
Для чего
Сложность
kubeadm
Классический способ собрать кластер вручную, понять устройство
Средняя
Kubespray
Установка через Ansible, подходит для серверов в своей инфраструктуре
Средняя
Minikube
Учёба и тесты на одной машине
Низкая
kind
Кластер из контейнеров Docker, удобен для тестов CI
Низкая
k3s
Лёгкий дистрибутив для edge, IoT, небольших серверов
Низкая
RKE2 / Rancher
Корпоративная платформа с веб-интерфейсом
Средняя
kops
Установка и управление кластером в AWS
Средняя
OpenShift
Корпоративная платформа от Red Hat с расширенными возможностями безопасности
Высокая
Managed (EKS, GKE, AKS, Яндекс Managed Service for Kubernetes)
Облако само ставит и обслуживает control plane
Низкая
11. kubeadm: установка «по-взрослому» вручную
kubeadm — официальный инструмент Kubernetes для создания кластера. Он не делает всё за вас в одну кнопку, зато показывает каждый шаг, поэтому его часто выбирают, чтобы понять устройство.
Общие шаги на каждом сервере и на управляющем узле:
Подготовить серверы: отключить swap, настроить время (NTP), открыть нужные порты.
Установить container runtime (containerd) и настроить его для kubelet.
Установить kubeadm, kubelet и kubectl нужной версии.
На управляющем узле выполнить инициализацию кластера.
Установить сетевой плагин (CNI), например Calico или Flannel.
На рабочих узлах присоединиться командой kubeadm join, которую выдаёт инициализация.
# На управляющем узле
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# Настроить kubectl для обычного пользователя
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
# Проверить, что узлы видны
kubectl get nodes
ВажноТочные команды, версии и параметры зависят от вашей ОС и версии Kubernetes. Перед установкой сверяйтесь с официальной документацией, она обновляется чаще любой статьи.
12. Kubespray: установка через Ansible
Kubespray — набор ролей и плейбуков Ansible, который ставит production-готовый кластер на ваши серверы. Если вы уже знаете Ansible, порог входа низкий: вы описываете инвентарь серверов и запускаете плейбук.
Подходит для своих серверов и виртуальных машин, в том числе в закрытом контуре;
Поддерживает разные варианты сети и контейнерных рантаймов;
Установка занимает время, зато её можно повторять и воспроизводить.
# Общий порядок (сокращённо)
git clone https://github.com/kubernetes-sigs/kubespray.git
cd kubespray
pip install -r requirements.txt
cp -rfp inventory/sample inventory/mycluster
# Заполнить inventory/mycluster/inventory.ini адресами серверов
ansible-playbook -i inventory/mycluster/inventory.ini cluster.yml -b
ЛайфхакЕсли вы освоили Ansible по нашей заметке, Kubespray будет понятен: это тот же инвентарь, те же переменные и роли, только для целого кластера.
13. Лёгкие варианты для обучения и тестов
Minikube — поднимает кластер в виртуальной машине или контейнере на вашем ноутбуке. Команда minikube start, и через минуту кластер готов.
kind (Kubernetes in Docker) — каждый «узел» кластера это контейнер Docker. Очень быстро поднимается и удобен в CI.
k3s — упрощённый дистрибутив от Rancher: один бинарный файл, меньше памяти, подходит для слабых серверов и edge-устройств.
minikube start
kubectl get nodes
kind create cluster --name test
14. Управляемые сервисы в облаке
В облаке control plane обычно обслуживает сам провайдер: обновляет, делает резервные копии, следит за доступностью. Вы управляете только рабочими узлами и приложениями. Примеры: Amazon EKS, Google GKE, Azure AKS, Яндекс Managed Service for Kubernetes. Это самый простой путь для production, если нет причин держать кластер у себя.
15. Как выбрать способ установки
Хотите учиться: Minikube или kind, затем kubeadm, чтобы понять, что происходит внутри.
Свой дата-центр, нужна автоматизация: Kubespray.
Мало ресурсов или edge: k3s.
Нужен production без лишних забот: управляемый сервис в облаке.
Нужна корпоративная поддержка и интерфейс: OpenShift или Rancher.