k3s и лёгкие дистрибутивы

Материал из llmdocs — справочник разработчика
k3s и лёгкие дистрибутивы
k3sRancher (SUSE), 2019, проект CNCF
Размер k3sодин бинарник менее 100 МБ
Минимум памятиоколо 512 МБ на сервер k3s
Хранилище состоянияSQLite, etcd, MySQL, PostgreSQL (kine)
Для разработкиkind, minikube, k3d
Для edge и продакшенаk3s, k0s, MicroK8s, Talos
СертификацияCNCF Certified Kubernetes

Лёгкие дистрибутивы Kubernetes — сборки Kubernetes, упрощённые для установки и требующие меньше ресурсов, чем «классический» кластер, разворачиваемый через kubeadm. Самый известный из них — k3s: полноценный сертифицированный Kubernetes в одном исполняемом файле, который ставится одной командой и работает даже на Raspberry Pi. Такие дистрибутивы используют на небольших VPS, в домашних лабораториях, на edge-устройствах и для локальной разработки и тестов в CI/CD.

Зачем нужны

Стандартный кластер состоит из множества компонентов: API-сервер, etcd, планировщик, менеджер контроллеров, kubelet, kube-proxy, плагин сети, DNS, ingress-контроллер. Каждый ставится и обновляется отдельно, а управляющая плоскость с etcd желает 2+ ГБ памяти. Лёгкие дистрибутивы собирают всё это в готовый комплект с разумными значениями по умолчанию, чтобы кластер можно было получить за минуту.

k3s

k3s создала компания Rancher Labs в 2019 году; название — игра с «k8s»: «вдвое меньше букв».[1] С 2020 года проект находится в CNCF. Особенности:[2]

  • Один бинарник содержит все компоненты управляющей плоскости, kubelet и containerd.
  • Вместо etcd по умолчанию используется SQLite через прослойку kine; для отказоустойчивых кластеров — встроенный etcd или внешняя PostgreSQL/MySQL.
  • В комплекте: сеть Flannel (см. Сетевые плагины (CNI)), CoreDNS, ingress-контроллер Traefik, балансировщик ServiceLB, local-path-provisioner для томов и контроллер установки Helm-чартов.
  • Удалены устаревшие и облачно-специфичные части Kubernetes.

Установка сервера и подключение рабочего узла:

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

# на рабочем узле: адрес сервера и токен из /var/lib/rancher/k3s/server/node-token
curl -sfL https://get.k3s.io | K3S_URL=https://server:6443 K3S_TOKEN=... sh -

Конфигурация для kubectl лежит в /etc/rancher/k3s/k3s.yaml. Встроенные компоненты можно отключить флагами, например --disable traefik, если вместо Traefik нужен другой ingress. Служба k3s управляется через systemd.

Сравнение

Дистрибутив Для чего Особенности
k3s маленькие серверы, edge, домашние кластеры один бинарник, SQLite, всё в комплекте
k0s (Mirantis) продакшен с минимумом зависимостей один бинарник, без привязки к ОС, ванильные компоненты[5]
MicroK8s (Canonical) Ubuntu, рабочие станции, edge ставится через snap, дополнения включаются командой microk8s enable[6]
kind тесты и CI узлы кластера — контейнеры Docker[3]
minikube обучение и локальная разработка ВМ или контейнер, дашборд и дополнения[4]
k3d локальная разработка k3s внутри Docker, кластер за секунды
Talos Linux продакшен на «железе» неизменяемая ОС только для Kubernetes, управление через API

Разработка и CI

kind (Kubernetes IN Docker) создан для тестирования самого Kubernetes: каждый узел — контейнер, кластер из нескольких узлов поднимается за полминуты и удаляется без следа. Это стандартный выбор для интеграционных тестов в GitHub Actions и проверки операторов.

kind create cluster --name dev
kind load docker-image myapp:dev --name dev   # без реестра
kubectl cluster-info --context kind-dev
kind delete cluster --name dev

minikube удобнее для обучения: дашборд (minikube dashboard), туннель для сервисов типа LoadBalancer, набор дополнений. k3d даёт то же, что kind, но на базе k3s и с встроенным локальным реестром.

Когда выбирать

  • Один сервер или несколько небольших — k3s: полноценный Kubernetes с минимальными накладными расходами. Впрочем, для одного сервера с парой сервисов часто проще Docker Compose.
  • Edge и IoT — k3s или MicroK8s, поддерживают ARM.
  • Тесты в CI — kind или k3d.
  • Обучение — minikube или kind.
  • Крупный продакшен — управляемые кластеры облаков (EKS, GKE, Managed Kubernetes в российских облаках) или kubeadm/Talos; впрочем, k3s с внешней базой данных тоже применяют в продакшене.

Все перечисленные дистрибутивы проходят тесты соответствия CNCF, поэтому манифесты и Helm-чарты переносятся между ними без изменений; различаются лишь встроенные компоненты — ingress, хранилище и сеть.

См. также

Источники

  1. k3s Documentation
  2. k3s — Architecture
  3. kind — Kubernetes IN Docker
  4. minikube documentation
  5. k0s Documentation
  6. MicroK8s Documentation