Tarantool Kubernetes-оператор — это средство автоматизации, позволяющее упростить администрирование Tarantool-кластеров, разработанных на фреймворке Tarantool Cartridge и развернутых под управлением Kubernetes.
Kubernetes-оператор реализует API версии tarantool.io/v1alpha1
устанавливает
ресурсы для объектов трех типов: Cluster, Role и ReplicasetTemplate.
- Ресурсы
- Владение ресурсами
- Развертывание оператора в minikube
- Пример: база данных типа ключ-значение
Cluster — это кластер, разработанный с помощью Tarantool Cartridge.
Role — это пользовательская роль, разработанная с помощью Tarantool Cartridge.
ReplicasetTemplate — это шаблон StatefulSet-ов, которые являются членами Role.
Так выглядит иерархия владения у ресурсов, которыми управляет запущенный оператор:
Иерархия владения ресурсами прямым образом влияет работу сборщика мусора в Kubernetes. Если выполнить команду удаления на родительском ресурсе, то сборщик удалит и все зависимые ресурсы.
-
Установите необходимое ПО:
-
Создайте кластер в
minikube
:minikube start --memory=4096
Для работы кластера и приложений-примеров вам понадобится выделить 4Gb оперативной памяти.
Удостоверьтесь, что
minikube
успешно запущен:minikube status
В случае успеха вывод в консоли будет выглядеть так:
host: Running kubelet: Running apiserver: Running
-
Активируйте компонент Ingress:
minikube addons enable ingress
-
Создайте ресурсы для оператора:
kubectl create -f deploy/service_account.yaml kubectl create -f deploy/role.yaml kubectl create -f deploy/role_binding.yaml
-
Создайте пользовательские описания ресурсов (CRD) для оператора:
kubectl create -f deploy/crds/tarantool_v1alpha1_cluster_crd.yaml kubectl create -f deploy/crds/tarantool_v1alpha1_role_crd.yaml kubectl create -f deploy/crds/tarantool_v1alpha1_replicasettemplate_crd.yaml
-
Запустите оператор:
kubectl create -f deploy/operator.yaml
Удостоверьтесь, что оператор успешно запущен:
kubectl get pods --watch
Дождитесь, пока Pod
tarantool-operator-xxxxxx-xx
перейдет в статусRunning
.
В директории examples/kv
содержится код распределенного приложения на Tarantool,
которое реализует базу данных типа ключ-значение.
Доступ к данным осуществляется с помощью HTTP REST API.
Предполагается, что все команды выполняются из корня репозитория, а Tarantool-оператор уже запущен и работает.
-
Создайте кластер:
kubectl create -f examples/kv/deployment.yaml
Дождитесь, пока все Pod-ы кластера перейдут в статус
Running
:kubectl get pods --watch
-
Удостоверьтесь, что кластер готов к работе:
kubectl describe clusters.tarantool.io examples-kv-cluster
Дождитесь, пока поле
Status.State
примет значениеReady
:... Status: State: Ready ...
-
Откройте веб-интерфейс администратора кластера:
ПРИМЕЧАНИЕ: В силу недавно появившегося дефекта в Ingress веб-интерфейс может быть недоступен. Для обхода дефекта вы можете воспользоваться этим рецептом.
-
Выполните API-запросы к хранилищу:
-
Запишите в базу тестовые данные:
curl -XPOST http://MINIKUBE_IP/kv -d '{"key":"key_1", "value": "value_1"}'
В случае успеха вывод в консоли будет выглядеть так:
{"info":"Successfully created"}
-
Запросите данные из базы:
curl http://MINIKUBE_IP/kv_dump
В случае успеха вывод в консоли будет выглядеть так:
{"store":[{"key":"key_1","value":"value_1"}]}
-
-
Увеличьте количество репликасетов-хранилищ:
kubectl edit roles.tarantool.io storage
В открывшемся текстовом редакторе поменяйте значение поля
spec.numReplicasets
на 3:spec: numReplicasets: 3
Сохраните изменения и закройте редактор.
В результате к существующему кластеру добавятся новые репликасеты.
Проверьте в веб-интерфейсе, что топология изменилась.
-
Увеличьте количество реплик внутри каждого репликасета-хранилища:
kubectl edit replicasettemplates.tarantool.io storage-template
В открывшемся текстовом редакторе поменяйте значение поля
spec.replicas
на 3:spec: replicas: 3
Сохраните изменения и закройте редактор.
В результате к каждому репликасету-хранилищу добавятся новые реплики.
Проверьте в веб-интерфейсе, что топология изменилась.
ПРИМЕЧАНИЕ: С выходом
kubectl
1.16 вы также сможете масштабировать приложение с помощью командыkubectl scale
, напримерkubectl scale roles.tarantool.io storage --replicas=3
. На более ранних версияхkubectl
данная возможность не поддерживается в силу этого дефекта.
make build
make start
./bootstrap.sh
make test