Managed Kubernetes
TatNet разворачивает Kubernetes-кластеры, узлами которых служат обычные виртуальные машины платформы под управлением Talos Linux — иммутабельной ОС без SSH и пакетного менеджера, где всё состояние задаётся конфигурацией.
Платформа берёт на себя запуск и обновление узлов, сеть, сертификаты и
кластерные компоненты. Внутрь кластера вы ходите обычным kubectl.
Создание кластера
При создании указываются:
- Регион — где будут стоять узлы.
- Версия Kubernetes — из списка поддерживаемых.
- Пулы узлов — control-plane и рабочие: количество и конфигурация машин.
- Режим доступа к API — см. ниже.
Узлы создаются как виртуальные машины, но в списке ВМ проекта они не показываются и обычными операциями (остановить, удалить) не управляются: их жизненным циклом распоряжается кластер.
Доступ к API кластера
Три режима, как у EKS:
| Режим | Кто достаёт API |
|---|---|
public | из интернета |
public_private | из интернета и изнутри сети узлов |
private | только изнутри сети узлов |
Адрес в kubeconfig — DNS-имя вида <идентификатор>.k8s.tatnet.cloud, а
не IP. Поэтому смена режима доступа не делает выданный kubeconfig
недействительным.
kubeconfig скачивается из панели.
Сеть
CNI — Cilium, разворачивается автоматически. Узлы выходят в интернет через NAT платформы; в приватном режиме кластер работает без выхода наружу, а образы тянутся через зеркала реестров внутри региона.
Балансировщики нагрузки
Service типа LoadBalancer создаёт настоящий балансировщик платформы —
этим занимается встроенный cloud-controller-manager. Такие балансировщики
видны в панели, помечены принадлежностью к кластеру и управляются из
Kubernetes: удалять и настраивать их нужно через Service, иначе кластер
пересоздаст их снова.
Хранилище
В кластере доступны два класса:
| Класс | Что это |
|---|---|
tatnet-block | Блочный том платформы: переживает узел, переезжает между узлами |
tatnet-local-path | Каталог на диске узла: быстро, но умирает вместе с узлом |
Для данных, которые нельзя потерять, нужен tatnet-block: под, переехавший на
другой узел, найдёт свой том на месте.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data
spec:
accessModes: [ReadWriteOnce]
storageClassName: tatnet-block
resources:
requests:
storage: 20Gi
Тома создаются и удаляются по PersistentVolumeClaim. В панели они видны,
но доступны только для чтения — менять их нужно из кластера.
Расширение работает на живом поде: увеличьте PersistentVolumeClaim, и
файловая система вырастет без перезапуска.
Ограничения те же, что у блочных томов: один том — один узел одновременно
(ReadWriteOnce), снимков нет, регион менять нельзя.
Оплата
Кластер складывается из четырёх статей, и каждая оплачивается отдельно:
- Узлы. И рабочие, и control-plane — обычные виртуальные машины по цене выбранного тарифа. Control-plane не бесплатный именно потому, что это ваши машины: они занимают процессор, память и диск так же, как любые другие.
- Управление кластером. Одна плата на кластер, не зависящая от числа узлов: оркестрация, обновления Kubernetes и Talos, сеть кластера, сертификаты и endpoint API. Начисляется почасово, с создания до удаления.
- Публичный IP-адрес endpoint'а — один на кластер. У приватного кластера публичного адреса нет, и платы за него тоже.
- Тома и балансировщики, если вы их создаёте: блочные тома — по выделенному объёму, балансировщики — по числу узлов балансировщика.
Действующие цены показывает мастер создания кластера: смета в нём собирается из тех же ставок, по которым идёт списание.
Удаление кластера прекращает и плату за управление, и плату за узлы — в момент удаления, а не по завершении сноса.
Обновление версии
Версия Kubernetes обновляется из панели. Платформа катит обновление по узлам: сначала control-plane, затем рабочие, по одному, дожидаясь готовности каждого.
Масштабирование
Число рабочих узлов меняется в настройках пула. При уменьшении платформа корректно выводит лишние узлы: сначала переселяет с них поды, потом гасит машины.