В этом блоге описывается развертывание Tigris на экземпляре Google Kubernetes Engine (GKE) Autopilot.

При установке будут использоваться рекомендуемые параметры резервирования, выделяя больше ресурсов, чем при простой установке на ноутбуке. Для получения дополнительной информации об установке на основе ноутбука обратитесь к нашему предыдущий блог!

Если вы предпочитаете посмотреть видео, посмотрите развертывание в действии на YouTube:


Ниже приведены требования к установочному блоку и целевой среде Kubernetes.

Список необходимых вещей:

  • Шлем
  • Облачный SDK Google
  • репозиторий git и tigris-deploy
  • Кластер GKE с достаточными квотами


Хост установки

Для установки нам потребуется Helm. Предполагается, что узел установки уже имеет доступ к целевому кластеру GKE развертывания.

Версия helm в этом блоге использовалось:

❯ helm version
version.BuildInfo{Version:"v3.10.1", GitCommit:"9f88ccb6aee40b9a0535fcc7efea6055e1ef72c9", GitTreeState:"clean", GoVersion:"go1.19.2"}
Войти в полноэкранный режим

Выйти из полноэкранного режима

Для взаимодействия с кластером GKE с помощью kubectl удобно, вы можете установить плагин GKE. Вы можете установить его с помощью этой команды:

❯ gcloud components install gke-gcloud-auth-plugin
Войти в полноэкранный режим

Выйти из полноэкранного режима

К счастью, кластеры GKE Autopilot автоматически поставляются с установленным набором контроллеров. Список включает Вход GKE это позволяет создавать внешние балансировщики нагрузки для ресурсов Ingress и контроллеров, которые управляют другими аспектами GCP, такими как постоянные диски.

Одной из проблем обеспечения успешного развертывания в GCP является эффективное управление квотами. Вы захотите убедиться, что квоты позволяют выделить достаточное количество ресурсов ЦП и SSD.

Используя настройки Helm Chart по умолчанию, оказалось достаточно следующих квот:

Квоты GCP

При установке развертываются следующие компоненты:

  • Оператор Kubernetes для FoundationDB
  • Базовая БД
  • Поиск Тигра (TypeSense)
  • Тигр сервер

Вы можете установить компоненты по отдельности или вместе, используя всеобъемлющую диаграмму tigris-stack Helm. Ниже я собираюсь использовать эту схему для установки Tigris.


Подготовьтесь к развертыванию

Затем проверьте репозиторий сценариев развертывания:

❯ git clone git@github.com:tigrisdata/tigris-deploy.git
Cloning into 'tigris-deploy'...
remote: Enumerating objects: 177, done.
remote: Counting objects: 100% (97/97), done.
remote: Compressing objects: 100% (60/60), done.
remote: Total 177 (delta 43), reused 68 (delta 34), pack-reused 80
Receiving objects: 100% (177/177), 87.68 KiB | 568.00 KiB/s, done.
Resolving deltas: 100% (63/63), done.
Войти в полноэкранный режим

Выйти из полноэкранного режима

Перейдите в папку, содержащую диаграмму руля tigris-stack:

❯ cd tigris-deploy/helm/tigris-stack
Войти в полноэкранный режим

Выйти из полноэкранного режима


Развертывание стека Tigris

Чтобы обеспечить первоначальный кворум для Tigris Search, мы должны сначала развернуть его с одной репликой.

❯ helm install tigris-stack . --set tigris-search.replicas=1
W1103 11:56:22.823655   12264 gcp.go:119] WARNING: the gcp auth plugin is deprecated in v1.22+, unavailable in v1.26+; use gcloud instead.
To learn more, consult 
W1103 11:56:30.072806   12264 warnings.go:70] Autopilot increased resource requests for Deployment default/tigris-server to meet requirements. See 
W1103 11:56:30.089432   12264 warnings.go:70] Autopilot increased resource requests for Deployment default/tigris-stack-fdb-operator to meet requirements. See 
W1103 11:56:30.232424   12264 warnings.go:70] Autopilot set default resource requests on StatefulSet default/tigris-search for container tigris-ts-node-mgr, as resource requests were not specified, and adjusted resource requests to meet requirements. See  and 
NAME: tigris-stack
LAST DEPLOYED: Thu Nov  3 11:56:25 2022
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
Войти в полноэкранный режим

Выйти из полноэкранного режима

На данный момент ваш кластер, скорее всего, будет иметь только несколько узлов:

❯ kubectl get nodes
W1103 11:57:04.068108   12352 gcp.go:119] WARNING: the gcp auth plugin is deprecated in v1.22+, unavailable in v1.26+; use gcloud instead.
To learn more, consult 
NAME                                 STATUS   ROLES    AGE   VERSION
gk3-doc-default-pool-ddd321b8-4v8x   Ready    <none>   42h   v1.23.8-gke.1900
gk3-doc-default-pool-e88cea62-9b77   Ready    <none>   42h   v1.23.8-gke.1900



Войти в полноэкранный режим

Выйти из полноэкранного режима

Поддоны будут в Pending масштабирование состояния и триггера модуля:

❯ kubectl get pods
W1103 11:56:43.749022   12327 gcp.go:119] WARNING: the gcp auth plugin is deprecated in v1.22+, unavailable in v1.26+; use gcloud instead.
To learn more, consult 
NAME                                       READY   STATUS    RESTARTS   AGE
tigris-search-0                            0/2     Pending   0          14s
tigris-server-8646cb4b7b-fz6h4             0/1     Pending   0          14s
tigris-server-8646cb4b7b-hmxj9             0/1     Pending   0          14s
tigris-server-8646cb4b7b-qsjw7             0/1     Pending   0          14s
tigris-stack-fdb-operator-8fd845b9-wb4r5   0/1     Pending   0          14s


❯ kubectl describe pod tigris-search-0 | tail
W1103 11:58:18.395905   12695 gcp.go:119] WARNING: the gcp auth plugin is deprecated in v1.22+, unavailable in v1.26+; use gcloud instead.
To learn more, consult 
Node-Selectors:              <none>
Tolerations:                 kubernetes.io/arch=amd64:NoSchedule
                             node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason            Age   From                                   Message
  ----     ------            ----  ----                                   -------
  Warning  FailedScheduling  108s  gke.io/optimize-utilization-scheduler  0/2 nodes are available: 2 Insufficient cpu, 2 Insufficient memory.
  Warning  FailedScheduling  38s   gke.io/optimize-utilization-scheduler  0/3 nodes are available: 1 node(s) had taint {node.kubernetes.io/not-ready: }, that the pod didn't tolerate, 2 Insufficient cpu, 2 Insufficient memory.
  Normal   TriggeredScaleUp  26s   cluster-autoscaler 
Войти в полноэкранный режим

Выйти из полноэкранного режима

Тигр перезапустится несколько раз, прежде чем изменит состояние на Running. Это связано с недоступностью FoundationDB, хранилища ключей и значений, которое Tigris использует для хранения данных.

Как вы можете видеть ниже, fdb все еще находится в состоянии ожидания, когда tigris-server Поды уже готовы:

❯ kubectl get pods
W1103 12:05:30.762386   14893 gcp.go:119] WARNING: the gcp auth plugin is deprecated in v1.22+, unavailable in v1.26+; use gcloud instead.
To learn more, consult 
NAME                                       READY   STATUS              RESTARTS        AGE
fdb-cluster-log-1                          0/2     Pending             0               43s
fdb-cluster-log-2                          0/2     Pending             0               43s
fdb-cluster-log-3                          0/2     Pending             0               42s
fdb-cluster-log-4                          0/2     Pending             0               42s
fdb-cluster-log-5                          0/2     Pending             0               42s
fdb-cluster-stateless-1                    0/2     Pending             0               43s
fdb-cluster-stateless-10                   0/2     Pending             0               43s
fdb-cluster-stateless-2                    0/2     Pending             0               43s
fdb-cluster-stateless-3                    0/2     Pending             0               43s
fdb-cluster-stateless-4                    0/2     Pending             0               43s
fdb-cluster-stateless-5                    0/2     Pending             0               43s
fdb-cluster-stateless-6                    0/2     Pending             0               43s
fdb-cluster-stateless-7                    0/2     Pending             0               43s
fdb-cluster-stateless-8                    0/2     Pending             0               43s
fdb-cluster-stateless-9                    0/2     Pending             0               43s
fdb-cluster-storage-1                      0/2     Pending             0               43s
fdb-cluster-storage-2                      0/2     Pending             0               43s
fdb-cluster-storage-3                      0/2     Pending             0               43s
fdb-cluster-storage-4                      0/2     Pending             0               43s
fdb-cluster-storage-5                      0/2     Pending             0               43s
tigris-search-0                            2/2     Running             1 (5m49s ago)   9m1s
tigris-server-8646cb4b7b-fz6h4             0/1     ContainerCreating   0               9m1s
tigris-server-8646cb4b7b-hmxj9             0/1     CrashLoopBackOff    1 (6s ago)      9m1s
tigris-server-8646cb4b7b-qsjw7             0/1     CrashLoopBackOff    2 (7s ago)      9m1s
tigris-stack-fdb-operator-8fd845b9-zgr4t   1/1     Running             0               5m55s
Войти в полноэкранный режим

Выйти из полноэкранного режима

:info: Вы можете улучшить последовательность развертывания, используя более сложные методы развертывания, такие как Synchronization Waves в ArgoCD!

Дайте Autopilot достаточно времени для масштабирования узлов для развертывания. Скорее всего, FoundationDB сама инициирует отдельное событие масштабирования.

❯ kubectl get nodes
W1103 12:09:59.375610   16639 gcp.go:119] WARNING: the gcp auth plugin is deprecated in v1.22+, unavailable in v1.26+; use gcloud instead.
To learn more, consult 
NAME                                 STATUS     ROLES    AGE     VERSION
gk3-doc-default-pool-ddd321b8-4v8x   Ready      <none>   42h     v1.23.8-gke.1900
gk3-doc-default-pool-e88cea62-9b77   Ready      <none>   42h     v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-854c84a8-4qss   Ready      <none>   4m23s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-854c84a8-6fd2   Ready      <none>   4m21s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-854c84a8-m6hp   Ready      <none>   4m23s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-854c84a8-p8zq   Ready      <none>   4m21s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-854c84a8-r744   Ready      <none>   4m22s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-854c84a8-xj5b   Ready      <none>   4m20s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-9f9e9a3f-4m2r   Ready      <none>   4m18s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-9f9e9a3f-d6nm   Ready      <none>   4m18s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-9f9e9a3f-ggxv   Ready      <none>   4m17s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-9f9e9a3f-lfwl   Ready      <none>   4m18s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-9f9e9a3f-s456   Ready      <none>   4m18s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-9f9e9a3f-slg8   Ready      <none>   4m19s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-9f9e9a3f-vg27   Ready      <none>   11m     v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-9f9e9a3f-xf4k   Ready      <none>   4m18s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-9f9e9a3f-xptm   Ready      <none>   4m18s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-c0284c87-5hpx   Ready      <none>   4m13s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-c0284c87-96c2   Ready      <none>   4m12s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-c0284c87-c7h8   Ready      <none>   4m13s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-c0284c87-klm4   Ready      <none>   4m12s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-c0284c87-mrqp   Ready      <none>   4m12s   v1.23.8-gke.1900
gk3-doc-nap-10cyk06a-c0284c87-wwj2   Ready      <none>   4m12s   v1.23.8-gke.1900
gk3-doc-nap-qm2jb0jm-1393ada1-bgwt   Ready      <none>   11m     v1.23.8-gke.1900
gk3-doc-nap-qm2jb0jm-6d70fd3a-pxdr   Ready      <none>   12m     v1.23.8-gke.1900
Войти в полноэкранный режим

Выйти из полноэкранного режима

Вслед за масштабированием узлов медленно появляются и сервисы. Ожидая запуска основных служб,

Однако примерно через 15 минут поды должны стать доступными:

❯ kubectl get pods
W1103 12:10:45.077224   16929 gcp.go:119] WARNING: the gcp auth plugin is deprecated in v1.22+, unavailable in v1.26+; use gcloud instead.
To learn more, consult 
NAME                                       READY   STATUS    RESTARTS        AGE
fdb-cluster-log-1                          2/2     Running   0               5m57s
fdb-cluster-log-2                          2/2     Running   0               5m57s
fdb-cluster-log-3                          2/2     Running   0               5m56s
fdb-cluster-log-4                          2/2     Running   0               5m56s
fdb-cluster-log-5                          2/2     Running   0               5m56s
fdb-cluster-stateless-1                    2/2     Running   0               5m57s
fdb-cluster-stateless-10                   2/2     Running   0               5m57s
fdb-cluster-stateless-2                    2/2     Running   0               5m57s
fdb-cluster-stateless-3                    2/2     Running   0               5m57s
fdb-cluster-stateless-4                    2/2     Running   0               5m57s
fdb-cluster-stateless-5                    2/2     Running   0               5m57s
fdb-cluster-stateless-6                    2/2     Running   0               5m57s
fdb-cluster-stateless-7                    2/2     Running   0               5m57s
fdb-cluster-stateless-8                    2/2     Running   0               5m57s
fdb-cluster-stateless-9                    2/2     Running   0               5m57s
fdb-cluster-storage-1                      2/2     Running   0               5m57s
fdb-cluster-storage-2                      2/2     Running   0               5m57s
fdb-cluster-storage-3                      2/2     Running   0               5m57s
fdb-cluster-storage-4                      2/2     Running   0               5m57s
fdb-cluster-storage-5                      2/2     Running   0               5m57s
tigris-search-0                            2/2     Running   1 (11m ago)     14m
tigris-server-8646cb4b7b-95lcf             1/1     Running   0               2m37s
tigris-server-8646cb4b7b-gff64             1/1     Running   2 (3m12s ago)   3m23s
tigris-server-8646cb4b7b-hmxj9             1/1     Running   5 (3m59s ago)   14m
tigris-stack-fdb-operator-8fd845b9-zgr4t   1/1     Running   0               11m
Войти в полноэкранный режим

Выйти из полноэкранного режима

Вот и все, ваше развертывание Tigris должно быть на подходе!


Проверить развертывание

На этот раз мы собираемся проверить Tigris Server с помощью интерфейса командной строки Tigris, используя небольшой модуль Linux, который был развернут в том же пространстве имен, что и Tigris Stack.

Сначала нам нужно установить CLI:

$ curl -sSL  | sudo tar -xz -C /usr/local/bin
...
$ ls -la /usr/local/bin/tigris
-rwxr-xr-x 1 1001 121 17264640 Nov  3 07:21 /usr/local/bin/tigris
Войти в полноэкранный режим

Выйти из полноэкранного режима

Установите TIGRIS_URL так, чтобы он указывал на конечную точку службы tigris-server:

$ export TIGRIS_URL=
Войти в полноэкранный режим

Выйти из полноэкранного режима

После этого посмотрите, сможете ли вы взаимодействовать с базой данных Tigris с помощью tigris полезность:

$ tigris quota limits
{
  "ReadUnits": 100,
  "WriteUnits": 25,
  "StorageSize": 104857600
}

$ tigris server info
{
  "server_version": "v1.0.0-beta.17"
}

$ tigris server version
tigris server version at  is v1.0.0-beta.17

$ tigris create database robert

$ tigris list databases
robert
Войти в полноэкранный режим

Выйти из полноэкранного режима


Масштабирование поиска

Чтобы поиск также был избыточным, после того, как развертывание преодолеет переходное состояние, Tigris Search следует масштабировать до нескольких реплик. Для поддержания кворума количество реплик должно быть нечетным, минимум 3.

Приведенная ниже команда увеличит количество реплик Tigris Search до 5, что должно быть достаточно большим количеством реплик для начального производственного развертывания:

❯ helm upgrade tigris-stack . --set tigris-search.replicas=5
W1103 18:12:06.790278   82440 gcp.go:119] WARNING: the gcp auth plugin is deprecated in v1.22+, unavailable in v1.26+; use gcloud instead.
To learn more, consult 
W1103 18:12:14.011524   82440 warnings.go:70] Autopilot increased resource requests for Deployment default/tigris-stack-fdb-operator to meet requirements. See 
W1103 18:12:14.362641   82440 warnings.go:70] Autopilot increased resource requests for Deployment default/tigris-server to meet requirements. See 
W1103 18:12:14.711610   82440 warnings.go:70] Autopilot increased resource requests for StatefulSet default/tigris-search to meet requirements. See 
Release "tigris-stack" has been upgraded. Happy Helming!
NAME: tigris-stack
LAST DEPLOYED: Thu Nov  3 18:12:08 2022
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
Войти в полноэкранный режим

Выйти из полноэкранного режима

Вы можете проверить, были ли запущены дополнительные реплики, используя kubectl:

❯ kubectl get pods | grep tigris
W1103 18:12:33.301669   82537 gcp.go:119] WARNING: the gcp auth plugin is deprecated in v1.22+, unavailable in v1.26+; use gcloud instead.
To learn more, consult 
tigris-search-0                            2/2     Running   8 (25m ago)    6h16m
tigris-search-1                            0/2     Pending   0              19s
tigris-search-2                            0/2     Pending   0              19s
tigris-search-3                            0/2     Pending   0              18s
tigris-search-4                            0/2     Pending   0              18s
tigris-server-8646cb4b7b-95lcf             1/1     Running   0              6h4m
tigris-server-8646cb4b7b-gff64             1/1     Running   2 (6h5m ago)   6h5m
tigris-server-8646cb4b7b-hmxj9             1/1     Running   5 (6h5m ago)   6h16m
tigris-stack-fdb-operator-8fd845b9-zgr4t   1/1     Running   0              6h12m
Войти в полноэкранный режим

Выйти из полноэкранного режима

Реплики должны быстро наверстать упущенное, так как не так много поискового индекса для синхронизации. Однако GKE Autopilot может потребоваться предварительно масштабировать узлы:

❯ kubectl describe pod tigris-search-1 | tail
W1103 18:14:04.069915   83269 gcp.go:119] WARNING: the gcp auth plugin is deprecated in v1.22+, unavailable in v1.26+; use gcloud instead.
To learn more, consult 
Node-Selectors:              <none>
Tolerations:                 kubernetes.io/arch=amd64:NoSchedule
                             node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason            Age   From                                   Message
  ----     ------            ----  ----                                   -------
  Warning  FailedScheduling  110s  gke.io/optimize-utilization-scheduler  0/24 nodes are available: 24 Insufficient cpu, 24 Insufficient memory.
  Normal   TriggeredScaleUp  74s   cluster-autoscaler                     pod triggered scale-up: [{ 0->1 (max: 1000)} { 0->1 (max: 1000)}]
  Warning  FailedScheduling  23s   gke.io/optimize-utilization-scheduler  0/26 nodes are available: 2 node(s) had taint {node.kubernetes.io/not-ready: }, that the pod didn't tolerate, 24 Insufficient cpu, 24 Insufficient memory.
Войти в полноэкранный режим

Выйти из полноэкранного режима

Это займет всего минуту или две, чтобы поднять их. Running:

❯ kubectl get pods | grep tigris-search
W1103 18:15:05.957816   83699 gcp.go:119] WARNING: the gcp auth plugin is deprecated in v1.22+, unavailable in v1.26+; use gcloud instead.
To learn more, consult 
tigris-search-0                            2/2     Running   8 (27m ago)    6h18m
tigris-search-1                            2/2     Running   0              2m52s
tigris-search-2                            2/2     Running   0              2m52s
tigris-search-3                            2/2     Running   0              2m51s
tigris-search-4                            2/2     Running   0              2m51s
Войти в полноэкранный режим

Выйти из полноэкранного режима


Завершение TLS

Для производственной установки вам потребуется добавить сертификат в балансировщик нагрузки. Однако, поскольку этот шаг не содержит каких-либо конкретных деталей, связанных с Тигром, мы пропустим этот шаг.

Надеюсь, вышеизложенное проиллюстрировало, насколько просто развернуть Tigris на GKE Autopilot! Не стесняйтесь сравнивать его с статья о развертывании Tigris на EKS где мы обсудили шаги, необходимые для его развертывания на AWS!

Если у вас есть какие-либо предложения по темам, связанным с Tigris, которые, по вашему мнению, могут быть интересны людям, не стесняйтесь обращаться к нам на нашем канале сообщества Tigris в Slack или на нашем сервере Tigris Discord!

Надеюсь, вам понравилось читать или смотреть этот блог или видеоблог! Если вы это сделали, следите за обновлениями, так как далее мы рассмотрим несколько интересных тем, таких как выполнение логического резервного копирования и восстановления с помощью Tigris!


Tigris — это платформа данных, созданная для разработчиков! Используйте его в качестве масштабируемого ACID-транзакционного сервера реального времени для ваших бессерверных приложений. Создавайте функции с большим объемом данных, не беспокоясь о медленных запросах или отсутствующих индексах. Беспрепятственно реализуйте поиск в своих приложениях с помощью встроенной поисковой системы. Подключайте бессерверные функции к своим потокам событий, чтобы создавать быстродействующие приложения с автоматическим масштабированием.

Подпишитесь на бета-версию

Получить ранний доступ и попробуйте Tigris для вашего следующего приложения. Присоединяйтесь к нашему Слабый или же Раздор сообщества, чтобы задать любые вопросы, которые могут у вас возникнуть.