K3s — легковесный Kubernetes для проектов любого масштаба
Занимает меньше места, проще в использовании и не требует наличия сложной инфраструктуры. Разбираем K3s — Kubernetes для компаний любого масштаба.
Зачем нужны другие версии Kubernetes?
Недавно мы рассказывали о K8s — оркестраторе контейнерных приложений, который быстро стал мейнстримом в мире IT. Однако у оригинального решения есть и слабые стороны — сложный запуск и сопровождение. Открытый исходный код позволил адаптировать технологию под разные задачи. И сегодня можно использовать различные версии сервиса:
- MicroK8s;
- EKS (Elastic Kubernetes Service);
- OpenShift;
- Kubeadm;
- и множество других.
Альтернативные версии Kubernetes открывают дополнительные возможности, предоставляются как оптимизированные решения или управляемые сервисы по модели KaaS — Kubernetes as a Service.
Основные отличия K3s от оригинала
Сокращение K8s обозначает первую, последнюю и восемь пропущенных между ними букв. А K3s — лишь отражает авторскую задумку. Разработчики из Rancher Labs хотели, чтобы их версия оркестратора была вдвое меньше оригинала. Отсюда и название. Если за сокращением K8s прячется 10 символов, то за K3s — 5, раз он в два раза легче.
Возможности базовой версии Kubernetes позволяют использовать оркестратор в разных средах и для различных задач. Однако K8s потребляет достаточно много ресурсов и сложен для развертывания и эксплуатации в локальных условиях. Поэтому не каждая компания может по щелчку пальца перейти на K8s. Это стало главной причиной для создания упрощенной версии, и выход K3s сделал Kubernetes более доступным для использования в разработке.
Особенности K3s:
- Небольшой размер кода и низкие требования к ресурсам системы.
- Упрощенная установка и ускоренный запуск кластера.
- Возможность использования кластера со всего одной нодой, например для периферийных вычислений в IoT.
- Все компоненты программы объединены в единый бинарный файл, объемом <70MB.
- Отход от четкого разделения нод на master и worker — управлять узлами можно с любого из них.
- Поддержка автоматического развертывания.
- Сертифицированный CNCF дистрибутив Kubernetes.
- Запускается без внешних зависимостей.
Чтобы оптимизировать Kubernetes для не самых мощных инфраструктур, уменьшить размер и упростить запуск кластера, разработчики Rancher Labs сделали следующее:
- Удалили порядка 1000 строк кода оригинала;
- Заменили Docker на conteinerd;
- Добавили поддержку Kine в качестве хранилища по умолчанию;
- Снесли драйверы облачных провайдеров;
- Добавили различные элементы архитектуры.
Архитектура K3s
Сервер и агент — основные элементы кластера K3s, которые взаимодействуют при помощи туннельного прокси.
- Сервер K3s отвечает за состояние кластера, обеспечивает его работоспособность и координирует действия между узлами. Запускает API-сервер для управления контроллерами и другими компонентами.
- Узлы агента K3s получают указания от сервера K3s и запускают приложения, управляют их жизненным циклом, а также выполняют другие задачи.
API Server, Controller Manager, Scheduler, Kubelet и ряд других элементов системы работают по аналогии с K8s.
Остановимся подробнее на нововведениях. Одни элементы дописывали в код с нуля, другие, например совместимые сервисы, добавляли в исходный файл.
- Сontainerd — утилита для управления жизненным циклом контейнеров.
- Flannel — в K3s может быть настроен как сетевой плагин по умолчанию. Обеспечивает сетевую связь между контейнерами в кластере и поддерживает различные режимы.
- CoreDNS — позволяет контейнерам и сервисам в кластере обращаться друг к другу по именам, а не IP-адресам, а также поддерживает ряд других функций.
- ingress controller Traefik — управляет входящим трафиком и его маршрутизацией между сервисами кластера.
- Helm — упрощает развертывание приложений.
- Load Balancer — встроенный сервис для балансировки нагрузки между подами. В K3s совместим с кластерами из одной ноды.
- Network Policy Controller — элемент, который управляет сетевыми политиками.
- local-path-provisioner — используется для создания локальных хранилищ на узлах кластера.
K8s данные кластера хранятся на внешнем сервисе etcd. А в K3s по умолчанию, при отсутствии другой конфигурации хранилища, и если на диске нет встроенных файлов etcd, используется облегченная БД SQLite. В качестве внешней базы данных можно задействовать MySQL, MariaDB, PostgreSQL, etcd.
Все эти способы хранения работают через Kine — прокладку API, название которой передает привет хранилищу оригинала: «Kine is not etcd». Kine принимает запросы etcd от Kubernetes и преобразовывает их в SQL-запросы. Благодаря этому элементу K3s поддерживает различные серверные части БД, включая MySQL, Postgres и SQLite.
Сценарии использования K3s
Найти применение легковесному Kubernetes могут небольшие, средние и крупные компании. K3s можно использовать следующими способами:
- в локальной разработке;
- в тестовых средах;
- проведения экспериментов — например одновременного выполнения различных сценариев;
- обучения и первого знакомства с технологией kubernetes.
- в качестве инструмента для развития сред разработки и работы с умными устройствами (IoT).
Способы развертывания кластера K3s
Кластер K3s все еще может быть развернут на узлах, которые не имеют общей частной сети и не связаны напрямую: например, ноды в разных публичных облаках.
K3s использует wireguard для создания VPN-сетки для кластерного трафика. Каждый из узлов должен иметь уникальный IP, через который они могут быть доступны. Обычно это публичный IP. Трафик супервизора K3 будет использовать туннель для веб-сокета, а трафик кластера (CNI) — туннель проводника.
Все компоненты можно выключать или включать при установке K3s.
Для этого нужно запустить установку K3s с опцией
--disable=traefik
и тогда указанный ингресс не будет установлен.
Все манифесты хранятся по адресу: /var/lib/rancher/k3s/server/manifests/
Они могут быть переопределены. Например, если нужно изменить путь для Local Storage Provider.
Высокодоступный K3s
Высокодоступный кластер K3s развертывается при помощи команд:
curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server —cluster-init
curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server --server
https://<ip or hostname of server1>:6443
Высокодоступный K3s с внешней базой данных
Архитектура такого K3s-кластера включает следующие элементы:
- две и более серверные ноды, которые обслуживают API Kubernetes и запускают другие службы управления;
- внешнее хранилище.
Высокодоступный K3s с внешней базой данных запускается при помощи команд:
curl -sfL https://get.k3s.io | sh -s - server --token=SECRET --datastore-endpoint="mysql://
username:password@tcp(hostname:3306)/database-name"
Кластер K3s с одной нодой
Упрощенный запуск K3s, оптимизированный для периферийных вычислений. Например, для использования в сфере Интернета вещей (IoT) в условиях ограниченных ресурсов. Также подойдет для обучения. Но такая архитектура не обеспечит отказоустойчивость и не может быть использована в высоконагруженных и других системах, где высока цена сбоя.
Одна нода — одна команда. Такой кластер разворачивается самым простым способом:
curl -sfL https://get.k3s.io | sh -
K3s проще запускать и легче сопровождать. Оптимизация времени разработки и тестирования — одна из ключевых целей его создания. Но если у вас возникнут сложности, наши технические специалисты подскажут решение.
Любой Kubernetes — идеальный инструмент для интеграции с облаком. Запускайте свои K3s-кластеры в нашем гибком сервисе и оплачивайте только используемые ресурсы.