KlusterKit: набор инструментов с открытым исходным кодом для упрощения деплоев Kubernetes и работы в физически изолированных локальных средах
Сегодня мы с радостью объявляем, что Platform9 открывает исходные коды Klusterkit, набора из трех инструментов, по лицензии Apache v2.0 на GitHub.
Наши клиенты выкатывают ПО в частных дата-центрах, которые часто не подключены к интернету (по соображениям безопасности или по другим причинам). Эти крупные компании хотят использовать преимущества Kubernetes и модернизировать свои приложения и при этом выкатывать их в разных дата-центрах, у которых нередко нет связи с внешним миром. И тут на помощь приходит Klusterkit, который упрощает поставку и управление кластерами K8s в физически изолированных средах.
В Klusterkit входит три независимых инструмента, которые можно использовать вместе или по отдельности для управления жизненным циклом production-кластера Kubernetes:
etcdadm, CLI для упрощенного управления кластером etcd.
nodeadm, CLI для администрирования нод, который дополняет kubeadm и развертывает зависимости, нужные kubeadm.
cctl, инструмент управления жизненным циклом кластера, который принимает Cluster API из сообщества Kubernetes и использует nodeadm и etcdadm, чтобы без лишних хлопот поставлять и поддерживать высокодоступные кластеры Kubernetes в локальных и в том числе физически изолированных средах.
Вместе эти три инструмента выполняют следующие задачи:
Простая поставка и управление высокодоступным кластером etcd и панелью управления Kubernetes в физически изолированных локальных средах через Cluster API.
Восстановление панели управления кластера после сбоя с помощью бэкапа etcd.
Упаковка всех артефактов, нужных для поставки Kubernetes, в физически изолированных средах.
Возможности Klusterkit
Поддержка нескольких мастеров (HA-кластер K8s).
Поставка защищенных кластеров etcd и управление ими.
Работа в физически изолированных средах.
Поддержка последовательного обновления и отката.
Flannel (vxlan) в качестве CNI для бэкенда; в планах поддержка других CNI.
Резервирование и восстановление etcd-кластеров после потери кворума.
Защита панели управления от нехватки памяти и времени ЦП.
Архитектура решения Klusterkit
Для отказоустойчивости и простоты Klusterkit использует один файл cctl-state.yaml для хранения метаданных кластера Kubernetes. Через cctl CLI можно управлять жизненным циклом кластера Kubernetes на любой машине, где есть этот файл состояния. Это может быть ноутбук оператора или любой другой компьютер, который входит в кластер Kubernetes.
Cctl реализует и вызывает из upstream интерфейс cluster-api как библиотеку операций CRUD на кластерах. Он использует ssh-provider, поставщика cluster-api с открытым исходным кодом на «голом железе» от Platform9, который, в свою очередь, вызывает etcdadm и nodeadm для выполнения операций на кластере.
Как использовать Klusterkit и его компоненты:
1 – Любой из трех инструментов можно легко собрать командой go get:
go get -u github.com/platform9/cctl
go get -u github.com/platform9/nodeadm
go get -u github.com/kubernetes-sigs/etcdadm
2 – Затем эти исполняемые файлы можно упаковать и скопировать на целевые машины, где должен работать высокодоступный кластер Kubernetes. Поместите файлы nodeadm и etcdadm в каталоги версий:
3 – При необходимости оркестрировать кластер Kubernetes локально, в физически изолированной среде, нужные зависимости можно легко загрузить заранее на компьютере с выходом в интернет командой загрузки nodeadm и etcdadm. Потом загруженные элементы (т. е. kubelet и юнит-файл kubelet для systemd, исполняемые файл файлы CNI, файл kubeadm, все образы контейнеров, включая Kubernetes, образ keepalived и файл systemd, образ контейнера etcd и соответствующие файлы конфигурации) можно легко скопировать на физически изолированные хосты вместе с cctl, nodeadm и etcdadm. (Подробности см. в wiki).
4 – Когда все на месте, создать первый кластер Kubernetes можно парой команд: