k3s и лёгкие дистрибутивы
| k3s | Rancher (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, хранилище и сеть.