Skip to content

Latest commit

 

History

History
253 lines (171 loc) · 9.15 KB

README_RUS.md

File metadata and controls

253 lines (171 loc) · 9.15 KB

Tarantool Kubernetes-оператор

Tarantool Kubernetes-оператор — это средство автоматизации, позволяющее упростить администрирование Tarantool-кластеров, разработанных на фреймворке Tarantool Cartridge и развернутых под управлением Kubernetes.

Kubernetes-оператор реализует API версии tarantool.io/v1alpha1 устанавливает ресурсы для объектов трех типов: Cluster, Role и ReplicasetTemplate.

Содержание

Ресурсы

Cluster — это кластер, разработанный с помощью Tarantool Cartridge.

Role — это пользовательская роль, разработанная с помощью Tarantool Cartridge.

ReplicasetTemplate — это шаблон StatefulSet-ов, которые являются членами Role.

Владение ресурсами

Так выглядит иерархия владения у ресурсов, которыми управляет запущенный оператор:

Resource ownership

Иерархия владения ресурсами прямым образом влияет работу сборщика мусора в Kubernetes. Если выполнить команду удаления на родительском ресурсе, то сборщик удалит и все зависимые ресурсы.

Развертывание оператора в minikube

  1. Установите необходимое ПО:

  2. Создайте кластер в minikube:

    minikube start --memory=4096

    Для работы кластера и приложений-примеров вам понадобится выделить 4Gb оперативной памяти.

    Удостоверьтесь, что minikube успешно запущен:

    minikube status

    В случае успеха вывод в консоли будет выглядеть так:

    host: Running
    kubelet: Running
    apiserver: Running
  3. Активируйте компонент Ingress:

    minikube addons enable ingress
  4. Создайте ресурсы для оператора:

    kubectl create -f deploy/service_account.yaml
    kubectl create -f deploy/role.yaml
    kubectl create -f deploy/role_binding.yaml
  5. Создайте пользовательские описания ресурсов (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
  6. Запустите оператор:

    kubectl create -f deploy/operator.yaml

    Удостоверьтесь, что оператор успешно запущен:

    kubectl get pods --watch

    Дождитесь, пока Pod tarantool-operator-xxxxxx-xx перейдет в статус Running.

Пример: база данных типа ключ-значение

В директории examples/kv содержится код распределенного приложения на Tarantool, которое реализует базу данных типа ключ-значение. Доступ к данным осуществляется с помощью HTTP REST API.

Топология приложения

App topology

Запуск приложения

Предполагается, что все команды выполняются из корня репозитория, а Tarantool-оператор уже запущен и работает.

  1. Создайте кластер:

    kubectl create -f examples/kv/deployment.yaml

    Дождитесь, пока все Pod-ы кластера перейдут в статус Running:

    kubectl get pods --watch
  2. Удостоверьтесь, что кластер готов к работе:

    kubectl describe clusters.tarantool.io examples-kv-cluster

    Дождитесь, пока поле Status.State примет значение Ready:

    ...
    Status:
      State:  Ready
    ...
  3. Откройте веб-интерфейс администратора кластера:

    1. Узнайте IP-адрес виртуальной машины minikube:

      minikube ip
    2. Откройте страницу http://MINIKUBE_IP в браузере, заменив MINIKUBE_IP на IP-адрес из вывода предыдущей команды.

      Web UI

ПРИМЕЧАНИЕ: В силу недавно появившегося дефекта в Ingress веб-интерфейс может быть недоступен. Для обхода дефекта вы можете воспользоваться этим рецептом.

  1. Выполните API-запросы к хранилищу:

    1. Запишите в базу тестовые данные:

      curl -XPOST http://MINIKUBE_IP/kv -d '{"key":"key_1", "value": "value_1"}'

      В случае успеха вывод в консоли будет выглядеть так:

      {"info":"Successfully created"}
    2. Запросите данные из базы:

      curl http://MINIKUBE_IP/kv_dump

      В случае успеха вывод в консоли будет выглядеть так:

      {"store":[{"key":"key_1","value":"value_1"}]}

Масштабирование приложения

  1. Увеличьте количество репликасетов-хранилищ:

    kubectl edit roles.tarantool.io storage

    В открывшемся текстовом редакторе поменяйте значение поля spec.numReplicasets на 3:

    spec:
      numReplicasets: 3

    Сохраните изменения и закройте редактор.

    В результате к существующему кластеру добавятся новые репликасеты.

    Проверьте в веб-интерфейсе, что топология изменилась.

  2. Увеличьте количество реплик внутри каждого репликасета-хранилища:

    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