Зачем нужен Kubernetes и из чего состоит кластер

Рейтинг: 60.1% · 14 голосов
Kubernetes для разработчиков: поды, деплойменты, сервисы, ingress, конфиги и отладка. Уроки по главам с обсуждением.
Ответить
Аватара пользователя
anton_k8s
Сообщения: 26
Зарегистрирован: 12 май 2026, 03:23

Зачем нужен Kubernetes и из чего состоит кластер

Сообщение anton_k8s »

АкадемияKubernetes на практикеГлава 1 из 19
Оглавление курса (19)
  1. Зачем нужен Kubernetes и из чего состоит кластер (вы здесь)
  2. Поднимаем локальный кластер: minikube и kind
  3. Поды: базовая единица запуска
  4. Deployment и ReplicaSet: управляем репликами
  5. Service: сетевой доступ к подам
  6. ConfigMap и Secret: выносим конфигурацию
  7. Ingress: пускаем трафик снаружи
  8. Хранилище: Volumes и PersistentVolumeClaim
  9. Namespaces, requests и limits
  10. Health checks: liveness и readiness пробы
  11. Отладка: почему под не стартует
  12. Helm: пакетный менеджер для Kubernetes
  13. Базовая безопасность: RBAC и доступы
  14. Job и CronJob: разовые и периодические задачи
  15. StatefulSet и DaemonSet: stateful-нагрузки и системные агенты
  16. Стратегии обновления и планирование: rollout и rollback, graceful shutdown, nodeSelector, affinity, taints
  17. Автомасштабирование: HPA по метрикам, обзор VPA и Cluster Autoscaler
  18. Наблюдаемость: логи, метрики, events, обзор Prometheus и Grafana
  19. Безопасность глубже: securityContext, Pod Security Standards, NetworkPolicy, шифрование секретов
Первая глава, и она без практики, зато с картинкой, которая дальше понадобится постоянно. Разберем, какую боль закрывает Kubernetes и из каких частей состоит кластер. Локальный кластер поднимем уже в следующей главе, там и начнутся команды.

Какую проблему решает Kubernetes:

Типичный продакшен без оркестратора выглядит так: три виртуалки, на каждой Docker, деплой через ssh и скрипт.

Код: Выделить всё

ssh deploy@10.0.1.11 'docker pull registry.team.local/api:1.4.2 \
  && docker stop api && docker rm api \
  && docker run -d --name api -p 8080:8080 --restart=always registry.team.local/api:1.4.2'
И так по очереди на каждой машине. Пока сервисов два, жить можно. Когда их пятнадцать, появляются вопросы. Кто перезапустит контейнер, если умер не процесс, а вся виртуалка? Как выкатить новую версию без даунтайма? Как добавить четвертую машину, не переписывая скрипты? Куда смотреть балансировщику, если контейнеры переезжают с хоста на хост?

Kubernetes закрывает все это одним механизмом. Вы не командуете "запусти контейнер". Вы описываете желаемое состояние: хочу три реплики образа api:1.4.2, каждой столько-то памяти. Кластер сам выбирает машины, запускает контейнеры и дальше непрерывно сверяет реальность с описанием. Умерла нода, реплики переедут на живые. Поменяли версию образа в описании, кластер плавно заменит старые контейнеры новыми. Этот цикл сверки называется reconciliation loop, и это главная идея всей системы. Все остальное в курсе, от Deployment до Ingress, просто разные объекты, на которых этот цикл работает.

Из чего состоит кластер:

Кластер это набор машин, их называют нодами. Роли две.

Control plane, управляющий слой (раньше говорили master, термин официально ушел). Внутри:

- kube-apiserver. Единственная точка входа. Все, включая kubectl и сами компоненты кластера, общаются только через него.
- etcd. Распределенное key-value хранилище, в нем лежит все состояние кластера. Потеряли etcd, потеряли кластер.
- kube-scheduler. Решает, на какую ноду поставить новый под, исходя из свободных ресурсов и ограничений.
- kube-controller-manager. Пачка контроллеров, которые и крутят циклы сверки.

Worker-ноды, на них работают ваши приложения. На каждой:

- kubelet. Агент, который получает от apiserver список подов для своей ноды и следит, чтобы контейнеры реально работали.
- container runtime. Сейчас почти везде containerd. Docker как runtime выпилили еще в версии 1.24, образы при этом совместимы, ничего пересобирать не надо.
- kube-proxy. Поддерживает сетевые правила, чтобы трафик до сервисов доходил до нужных подов.

Живой кластер глазами kubectl:

Код: Выделить всё

$ kubectl get nodes
NAME       STATUS   ROLES           AGE   VERSION
cp-1       Ready    control-plane   41d   v1.33.2
worker-1   Ready    <none>          41d   v1.33.2
worker-2   Ready    <none>          41d   v1.33.2
А вот как выглядит то самое желаемое состояние. Это манифест, файл YAML, который вы отправляете в apiserver. Подробно такие файлы будем разбирать начиная с главы про Deployment, пока просто посмотрите на форму:

Код: Выделить всё

apiVersion: apps/v1
kind: Deployment
metadata:
  name: api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: api
  template:
    metadata:
      labels:
        app: api
    spec:
      containers:
        - name: api
          image: registry.team.local/api:1.4.2
Где взять кластер. Для продакшена в СНГ обычно берут managed-вариант у Yandex Cloud, VK Cloud или Selectel: control plane обслуживает облако, вы платите в основном за воркер-ноды, пара небольших нод выходит ориентировочно в 5-8 тысяч рублей в месяц. Для учебы это не нужно, в следующей главе поднимем бесплатный кластер прямо на ноутбуке через minikube или kind.

Типичные грабли:

Тащить Kubernetes туда, где он не нужен. Один сервис и база на одном VPS прекрасно живут на docker compose и systemd. Kubernetes окупается, когда сервисов и машин много, а релизы частые.

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

Ждать, что оркестратор починит приложение. Если сервис падает при рестарте, не умеет graceful shutdown и не отдает health endpoint, Kubernetes будет только усердно размножать проблему на три реплики.

Считать одну control plane ноду надежной схемой. Упала она, и вы потеряли управление кластером. Рабочие поды при этом продолжат крутиться, но ничего нового запустить и переселить нельзя. В проде control plane держат на трех нодах ради кворума etcd.

Что усвоили и что дальше:

Kubernetes это не запускалка контейнеров, а система поддержания желаемого состояния. Кластер делится на control plane (apiserver, etcd, scheduler, controller-manager) и worker-ноды (kubelet, containerd, kube-proxy). Общение с кластером идет только через apiserver, а состояние описывается манифестами. В следующей главе ставим minikube и kind и проверяем все это руками.
👍1 ❤️3 🔥 😄 🤔2
✔ Лучший ответ сформирован автоматически — bjh1957
anton_k8s писал(а):Рабочие поды при этом продолжат крутиться, но ничего нового запустить и переселить нельзя а сеть в этот момент? если control plane лежит, сервисы между собой продолжат ходить или kube-proxy без apiserver тоже перестает работать?
Перейти к ответу →
Аватара пользователя
bjh1957
Сообщения: 1
Зарегистрирован: 12 май 2026, 13:30

Re: Зачем нужен Kubernetes и из чего состоит кластер

Сообщение bjh1957 »

✔ Лучший ответ — сформирован автоматически
anton_k8s писал(а):Рабочие поды при этом продолжат крутиться, но ничего нового запустить и переселить нельзя
а сеть в этот момент? если control plane лежит, сервисы между собой продолжат ходить или kube-proxy без apiserver тоже перестает работать?
👍1 ❤️1 🔥 😄 🤔1
Аватара пользователя
virtua
Сообщения: 1
Зарегистрирован: 13 май 2026, 08:51

Re: Зачем нужен Kubernetes и из чего состоит кластер

Сообщение virtua »

anton_k8s писал(а):Docker как runtime выпилили еще в версии 1.24
стоп, то есть докер мне теперь вообще не нужен? а образы тогда чем собирать, голым containerd что ли? на локалке у меня все на docker build завязано
👍2 ❤️ 🔥1 😄 🤔1
Аватара пользователя
scott1es
Сообщения: 1
Зарегистрирован: 15 май 2026, 06:45

Re: Зачем нужен Kubernetes и из чего состоит кластер

Сообщение scott1es »

узнал свой деплой в первом примере до боли, у нас точно такой же скрипт, только виртуалок уже шесть и сервисов четыре. вопрос автору: на таком масштабе уже пора переезжать или еще можно жить на compose? нанимать девопса под это пока дорого
👍2 ❤️ 🔥 😄 🤔
Аватара пользователя
grumpyheap
Сообщения: 2
Зарегистрирован: 13 май 2026, 19:27

Re: Зачем нужен Kubernetes и из чего состоит кластер

Сообщение grumpyheap »

спасибо за главу, первый раз вижу чтобы про etcd и scheduler объяснили без зауми. наконец дошло, почему kubectl не ходит на ноды напрямую. жду главу про minikube, как раз ноут новый, есть где развернуться
👍1 ❤️ 🔥 😄 🤔
Ответить
Следующая глава →
Поднимаем локальный кластер: minikube и kind

Все главы курса «Kubernetes на практике»

Поделиться темой: ✈ Telegram VK

Вернуться в «Kubernetes на практике»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость