Где запускать кластер: managed, self-hosted, k3s, Deckhouse

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

Где запускать кластер: managed, self-hosted, k3s, Deckhouse

Сообщение anton_k8s »

Оглавление курса (48)
  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, шифрование секретов
  20. Архитектура control plane: api-server, etcd, scheduler
  21. Узел кластера: kubelet, kube-proxy и container runtime
  22. Декларативная модель: reconciliation, контроллеры, CRD
  23. kubectl профессионально: get, describe, explain, jsonpath
  24. Под глубже: init, sidecar, lifecycle hooks и QoS
  25. Метки, селекторы и организация ресурсов
  26. Сервисы и kube-proxy глубже: типы, IPVS, EndpointSlices
  27. Ingress, ingress-контроллеры и Gateway API
  28. Секреты в кластере: шифрование, External Secrets, Vault
  29. Хранилище глубже: PV, StorageClass, CSI и StatefulSet
  30. Сеть кластера: CNI, NetworkPolicy и CoreDNS
  31. Планировщик: affinity, taints, topology spread
  32. Ресурсы, QoS и вытеснение: requests, limits, eviction
  33. Helm глубже: шаблоны, хуки, зависимости, OCI
  34. Kustomize и управление конфигурацией без шаблонов
  35. RBAC и аутентификация глубже
  36. Admission и Pod Security: контроль на входе
  37. Policy as code: Kyverno и OPA Gatekeeper
  38. GitOps: Argo CD и Flux
  39. Операторы и CRD: расширяем Kubernetes
  40. Сервис-меш: Istio, Linkerd и когда он нужен
  41. Эксплуатация кластера: апгрейд, узлы, бэкап etcd
  42. Где запускать кластер: managed, self-hosted, k3s, Deckhouse (вы здесь)
  43. Траблшутинг кластера: Pending, CrashLoop, узлы NotReady
  44. Стоимость и эффективность кластера: FinOps
  45. CI/CD в Kubernetes: сборка, деплой, прогрессивные релизы
  46. Лучшие практики и антипаттерны Kubernetes
  47. Сквозной проект и путь дальше: от манифеста до прода
  48. Деплой приложений через Argo CD: Application, sync и App-of-Apps
Боль выбора: один кластер, пять разных способов его получить

Ты выучил Pod, Deployment, Service, разобрался с сетью и хранилищем. И тут всплывает вопрос, который старый курс стыдливо обходил одной строчкой "поставьте minikube": а на чём, собственно, запускать кластер в реальной жизни? Потому что Kubernetes - это не один продукт. Это спецификация API и набор компонентов, которые можно собрать десятком способов. И от того, какой способ ты выберешь, зависит, будешь ли ты по ночам чинить отвалившийся etcd или спокойно спать, пока облако чинит его за тебя.

Разберём по-честному: что значит managed kubernetes, где проходит граница его удобства, когда тебе реально нужен self-hosted kubernetes на kubeadm, зачем существуют k3s и Deckhouse, и как не переплатить и не утонуть в эксплуатации. Ключевая мысль, которую держи в голове весь урок: ты выбираешь не "лучший Kubernetes", а то, сколько control plane и эксплуатации ты готов взять на себя. Всё остальное - производные от этого.

Изображение

Что вообще делится: control plane и data plane

Любой кластер состоит из двух частей. Control plane (управляющий слой) - это kube-apiserver, etcd, kube-scheduler, kube-controller-manager. Мозг кластера: хранит состояние, принимает kubectl, решает, куда поставить Pod. Data plane (рабочий слой) - это узлы (nodes), на которых крутятся kubelet, container runtime (в 2026 это containerd через CRI, dockershim давно вырезан) и твои контейнеры.

Вся разница между способами развёртывания - в том, кто отвечает за control plane. Это не философия, это деньги и бессонные ночи. etcd - это распределённая БД на Raft, которая обижается на медленные диски, требует резервных копий, ротации сертификатов и аккуратных обновлений по версиям без перепрыгивания. Если этим занимаешься ты - это self-hosted. Если облако - это managed. Давай пройдёмся по вариантам от "максимум удобства" к "максимум контроля".

Managed Kubernetes: облако держит мозг кластера

Облачный kubernetes - самый частый старт для команд без выделенной платформенной команды. Провайдер поднимает и обслуживает control plane сам: ты его даже не видишь как набор виртуалок, ты просто получаешь endpoint apiserver и kubeconfig. etcd-бэкапы, патчи безопасности apiserver, обновление минорных версий - не твоя забота.

В РФ-реалиях это в первую очередь Yandex Managed Service for Kubernetes и VK Cloud; на западных площадках - EKS (AWS), GKE (Google), AKS (Azure). Создание кластера в Yandex Cloud выглядит так:

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

yc managed-kubernetes cluster create \
  --name prod-cluster \
  --network-name default \
  --zone ru-central1-a \
  --master-version 1.30 \
  --public-ip
Через минуты у тебя есть кластер. Подключаемся:

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

yc managed-kubernetes cluster get-credentials prod-cluster --external
kubectl get nodes

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

NAME                        STATUS   ROLES    AGE   VERSION
cl1abc-node-group-xxxx-aaa  Ready    <none>   3m    v1.30.4
cl1abc-node-group-xxxx-bbb  Ready    <none>   3m    v1.30.4
Обрати внимание: в столбце ROLES у узлов стоит <none>, а control-plane-узлов в выводе нет вообще. Это и есть подпись managed-решения - мастера спрятаны за абстракцией провайдера, ты управляешь только worker-узлами. Сравни с kubeadm-кластером, где ты увидел бы строку с ROLES=control-plane. Этот вывод - быстрый способ на новом кластере понять, managed он или нет.

Теперь про деньги, потому что тут зарыта собака. В Yandex Managed Kubernetes ты платишь отдельно за мастер и за исходящий трафик, а узлы тарифицируются как обычные ВМ Compute Cloud. Мастер бывает двух типов: зональный (базовый, в одной зоне доступности) и региональный (высокодоступный, размазан по зонам и стоит дороже). Тарифы официально обновлялись в феврале 2026 - всегда сверяйся с актуальной страницей yandex.cloud/docs/managed-kubernetes/pricing, цифры из чужих гайдов устаревают. Практический вывод: для dev/stage бери зональный мастер и экономь, для прода - региональный, иначе плановое обслуживание одной зоны положит тебе control plane.

Где границы managed. Удобство не бесплатно с точки зрения контроля:
  • Ты не можешь поставить произвольную версию apiserver или подкрутить его флаги вроде --feature-gates как угодно - доступно только то, что разрешил провайдер.
  • Список CNI и версий ограничен. Хочешь свежий Cilium с eBPF и kube-proxy replacement - проверяй, поддерживает ли его провайдер, иначе придётся ставить руками поверх и бодаться с дефолтным сетевым плагином.
  • Обновления control plane идут по расписанию провайдера и его темпом. Если тебе нужна фича из самого свежего минора в день релиза - managed её даст с задержкой.
  • Аудит, шифрование etcd, кастомные admission webhooks на уровне apiserver - частично или совсем недоступны для тонкой настройки.
Managed - это правильный выбор по умолчанию для большинства команд. Берёшь его, если хочешь катить приложения, а не администрировать Kubernetes.

Self-hosted на kubeadm: полный контроль и вся эксплуатация на тебе

Self-hosted kubernetes - это когда control plane поднимаешь и держишь ты сам, обычно на bare-metal или своих ВМ. Канонический инструмент - kubeadm, официальный бутстраппер кластера. Он не управляет инфраструктурой (ВМ, диски - твоя забота), но корректно поднимает компоненты control plane, генерирует сертификаты и настраивает kubelet.

Первый узел:

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

kubeadm init \
  --pod-network-cidr=10.244.0.0/16 \
  --control-plane-endpoint=k8s-api.internal:6443 \
  --upload-certs

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

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:
  mkdir -p $HOME/.kube
  cp -i /etc/kubernetes/admin.conf $HOME/.kube/config

You should now deploy a pod network to the cluster.

Then you can join any number of worker nodes by running:
kubeadm join k8s-api.internal:6443 --token abcdef.0123456789abcdef \
  --discovery-token-ca-cert-hash sha256:1234...
Ключевой момент в выводе: kubeadm сам CNI не ставит - он прямо пишет "you should now deploy a pod network". Узлы будут в статусе NotReady, пока ты не применишь сетевой плагин (Cilium, Calico). Это типичная первая грабля новичка: "почему узлы NotReady" - потому что нет CNI. Команда kubeadm join с готовым токеном - то, что ты копируешь на worker-узлы. Флаг --control-plane-endpoint обязателен заранее, если планируешь HA: задним числом превратить single-master в HA-кластер очень больно.

Что ты получаешь и что берёшь на себя. Получаешь - абсолютный контроль: любая версия, любые флаги apiserver, любой CNI, шифрование etcd, свои сертификаты, размещение на своём железе (важно для требований по данным в РФ). Берёшь - всё: бэкапы etcd (snapshot save и проверка восстановления, не на бумаге), ротацию сертификатов раз в год (kubeadm certs check-expiration спасает от молчаливого протухания), обновления строго по миноруам без прыжков, HA-схему с тремя мастерами и кворумом etcd. Это полноценная работа платформенной команды.

kops - инструмент уровнем выше: он управляет и инфраструктурой тоже (создаёт ВМ, ASG, балансировщики), исторически силён на AWS. Думай о нём как о self-hosted с автоматизацией железа, но управление control plane по сути всё равно на тебе.

Deckhouse: готовая платформа поверх Kubernetes для РФ

Между "голым kubeadm" и "облачным managed" есть третий путь, очень популярный в России - Deckhouse от компании Flant. Это не отдельный дистрибутив "вместо Kubernetes", а платформа поверх апстримного Kubernetes: ты ставишь её на свои ВМ или bare-metal, а она приносит сразу собранный комплект - CNI, ingress/Gateway, мониторинг (Prometheus/Grafana), автоскейлинг узлов, политики безопасности, обновления - и управляет всем этим декларативно, как обычными ресурсами кластера.

Идея в том, что Deckhouse даёт managed-подобный опыт на своей инфраструктуре. Ты не отдаёшь control plane в чужое облако (важно, когда данные обязаны оставаться в твоём контуре), но и не собираешь весь стек руками из десятка Helm-чартов. Распространяется в редакциях: открытая Community Edition (CE), коммерческая Enterprise Edition (EE) с Istio service mesh, мультитенантностью, BGP, расширенной безопасностью, и есть сертифицированные security-редакции (CSE) для требований регуляторов. Ставится на публичные облака, OpenStack, vSphere и на голое железо.

Когда брать Deckhouse: есть своё железо или приватное облако, нужен предсказуемый продакшен без построения платформенной команды с нуля, важны РФ-сертификация и поддержка на русском. Когда не брать: тебе хватает публичного managed - тогда Deckhouse избыточен; или наоборот нужен ультратонкий контроль над каждым флагом apiserver - тогда платформа будет немного "своевольничать" своими дефолтами.

Лёгкие дистрибутивы: k3s, k0s и локальные kind/minikube

Отдельный класс - облегчённый Kubernetes для edge, IoT, dev и тонких узлов. Флагман - k3s от Rancher/SUSE. Это сертифицированный Kubernetes, упакованный в один бинарь меньше 100 МБ: control plane, kubelet, containerd - всё в одном процессе. Главная хитрость под капотом: по умолчанию k3s заменяет etcd на встроенный SQLite (для HA можно переключить на embedded etcd или внешнюю БД через слой kine). Запуск кластера - буквально одна команда:

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

curl -sfL https://get.k3s.io | sh -
k3s kubectl get nodes

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

NAME       STATUS   ROLES                  AGE   VERSION
edge-01    Ready    control-plane,master   30s   v1.30.4+k3s1
Суффикс +k3s1 в версии и роль control-plane,master на единственном узле - подпись k3s. 30 секунд против минут на kubeadm + отдельный CNI: k3s тащит Flannel, Traefik и local-path-provisioner из коробки. Идеально для одноплатников (Raspberry Pi), филиалов, заводских узлов, CI и dev-стендов, где полный кластер избыточен.

k0s - идейный сосед: тоже один бинарь, но с упором на чистое отделение control plane от хост-системы (никаких зависимостей кроме ядра Linux) и гибкий выбор хранилища через kine. k3s выигрывает по размеру комьюнити, ARM-документации и экосистеме Rancher; k0s - там, где важна изоляция от ОС хоста.

Для чисто локальной разработки бери kind (Kubernetes in Docker - кластер из контейнеров, отлично для CI и тестов многоузловых сценариев) или minikube (одна ВМ, дружелюбен к новичкам). Это инструменты для ноутбука, не для прода - не путай.

Критерии выбора: дерево решений на практике

Сведём в работающий алгоритм, а не в абстрактные "зависит от задачи":
  • Нет платформенной команды, данные можно в публичное облако -> managed (Yandex Managed Kubernetes, VK Cloud). Дефолт для 80% случаев.
  • Данные обязаны жить в своём контуре, но строить платформу с нуля не хочешь -> Deckhouse на своём железе/приватном облаке.
  • Нужен тотальный контроль над версиями и флагами, есть кому это эксплуатировать -> self-hosted kubernetes на kubeadm (или kops, если хочешь автоматизацию инфры).
  • Edge, IoT, тонкий узел, филиал, CI -> k3s/k0s.
  • Ноутбук разработчика, локальные тесты -> kind/minikube.
Три фактора, которые перевешивают всё: команда (есть ли кому держать etcd ночью), требования к данным (можно ли в чужое облако), бюджет (managed дороже по ценнику, но self-hosted дороже по человеко-часам - считай TCO, а не только счёт от провайдера).

Типичные грабли и антипаттерны
  • "Возьмём kubeadm, это же бесплатно". Бинарь бесплатный, эксплуатация - нет. Без человека на дежурстве self-hosted превращается в протухшие сертификаты и невосстановимый etcd. Самый дорогой "бесплатный" Kubernetes.
  • Зональный мастер в проде. Дешевле на бумаге, но обслуживание одной зоны провайдером кладёт твой control plane. Для прода - только региональный/HA-мастер.
  • k3s в большой продакшен на десятки узлов. SQLite-бэкенд по умолчанию не для этого. Либо переключай на embedded etcd/внешнюю БД, либо бери полноценный кластер.
  • minikube/kind как стейджинг. Они не воспроизводят сеть, балансировщики и поведение облака. То, что работает в kind, может не работать в managed - стейджинг должен быть как прод.
  • Vendor lock-in через проприетарные аннотации. Если завязал манифесты на специфичные аннотации балансировщика одного облака, переезд в другое будет болью. Держи переносимое ядро, провайдер-специфику изолируй (Kustomize-оверлеи).
Мини-лаба: пощупать три мира за 20 минут
  • Подними k3s на любой Linux-ВМ одной командой из урока. Выполни kubectl get nodes и найди суффикс +k3s1 и роль control-plane,master - убедись, что мозг и узел совмещены.
  • Запусти kubectl get pods -n kube-system и посмотри, что k3s принёс из коробки: Flannel, Traefik, local-path-provisioner, coredns.
  • Если есть аккаунт Yandex Cloud - создай кластер командой yc managed-kubernetes cluster create (зональный мастер, чтобы не переплатить), подключись и сравни вывод get nodes: control-plane-узлов нет, у worker ROLES=<none>. Зафиксируй разницу подписи managed и k3s.
  • Не забудь снести кластеры после лабы: yc managed-kubernetes cluster delete и k3s-uninstall.sh - чтобы не капал счёт.
Контрольные вопросы
  • По какому полю вывода kubectl get nodes можно за секунду отличить managed-кластер от kubeadm-кластера и почему?
  • Почему после kubeadm init узлы остаются в статусе NotReady и что нужно сделать?
  • Чем хранилище состояния в k3s по умолчанию отличается от классического кластера и почему это ограничивает его в большом проде?
  • В каком случае Deckhouse выигрывает у публичного managed, а в каком - проигрывает?
Итог

Ты не выбираешь "самый правильный Kubernetes" - ты выбираешь, сколько control plane и эксплуатации взять на себя. Managed (Yandex Managed Kubernetes, VK Cloud) - облако держит мозг, ты катишь приложения. Deckhouse - managed-опыт на своём железе для РФ-контура. Self-hosted на kubeadm - полный контроль ценой полной эксплуатации. k3s/k0s - один бинарь для edge и dev, kind/minikube - для ноутбука. Считай TCO в человеко-часах, а не только счёт провайдера, и держи манифесты переносимыми. Дальше в курсе мы возьмём конкретную платформу и пойдём вглубь - сети, безопасности и GitOps.
👍6 ❤️2 🔥2 😄 🤔2
Аватара пользователя
terraformenjoyer
Сообщения: 1
Зарегистрирован: 14 май 2026, 02:53

Re: Где запускать кластер: managed, self-hosted, k3s, Deckhouse

Сообщение terraformenjoyer »

Всю жизнь думал что managed и self-hosted это про железо, а оказалось про то кто держит etcd. Вывод get nodes реально показательный - проверил на своём кластере, мастеров не видно, значит managed.
👍2 ❤️1 🔥 😄 🤔1
Аватара пользователя
lindak
Сообщения: 1
Зарегистрирован: 06 июн 2026, 21:09

Re: Где запускать кластер: managed, self-hosted, k3s, Deckhouse

Сообщение lindak »

А k3s с дефолтным SQLite можно как-то потом мигрировать на embedded etcd без пересоздания кластера, или проще сразу поднимать с флагом --cluster-init? Боюсь упереться в этот лимит когда узлов станет больше.
👍2 ❤️2 🔥 😄 🤔
Ответить
← Предыдущая глава
Эксплуатация кластера: апгрейд, узлы, бэкап etcd
Следующая глава →
Траблшутинг кластера: Pending, CrashLoop, узлы NotReady

Все главы курса «Kubernetes: оркестрация контейнеров от основ до продакшена»

Поделиться темой: ✈ Telegram VK
Похожие запросы: minikube или kind что выбрать для локального кластера kuberneteskubectl get describe logs основные команды для работы с кластеромnamespace в kubernetes зачем нужен и как разделить ресурсыkustomize или helm что выбрать для конфигов kubernetesmanaged kubernetes или свое железо что выбрать

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

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

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