Развертывание YDB в AWS EKS

Чтобы с помощью Kubernetes создать кластер YDB, выполните следующие действия.

Перед началом работы

  1. Настройте утилиты awscli и eksctl для работы с ресурсами AWS по документации.

  2. Установите Kubernetes CLI kubectl.

  3. Создайте кластер Kubernetes.

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

    Важно

    Убедитесь, что используется версия Kubernetes 1.20 или выше.

    Как создать кластер Kubernetes
      eksctl create cluster \
        --name yandex-database \
        --nodegroup-name standard-workers \
        --node-type c5a.2xlarge \
        --nodes 3 \
        --nodes-min 1 \
        --nodes-max 4
    

    Будет создан кластер Kubernetes с именем yandex-database. Флаг --node-type указывает, что кластер будет развернут с использованием инстансов c5a.2xlarge (8vCPUs, 16 GiB RAM), что соответствует нашим рекомендациям по запуску YDB.

    Создание кластера занимает в среднем от 10 до 15 минут. Дождитесь завершения процесса перед переходом к следующим шагам развертывания YDB. Конфигурация kubectl будет автоматически обновлена для работы с кластером после его создания.

  4. Установите менеджер пакетов Kubernetes Нelm 3.

  5. Добавьте в Helm репозиторий для Yandex.Cloud:

    Выполните команду:

    helm repo add ydb https://charts.ydb.tech/
    
    • ydb — алиас репозитория;
    • https://charts.ydb.tech/ — URL репозитория.

    Результат выполнения:

    "ydb" has been added to your repositories
    
  6. Обновите индекс чартов Helm:

    Выполните команду:

    helm repo update
    

    Результат выполнения:

    Hang tight while we grab the latest from your chart repositories...
    ...Successfully got an update from the "ydb" chart repository
    Update Complete. ⎈Happy Helming!⎈
    

Установите контроллер YDB в кластер

Установите YDB в стандартной конфигурации:

Выполните команду:

helm install ydb-operator ydb/ydb-operator
  • ydb-operator — имя релиза;
  • ydb/ydb-operator — название чарта в добавленном ранее репозитории.

Результат выполнения:

NAME: ydb-operator
LAST DEPLOYED: Thu Aug 12 19:32:28 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

Создайте кластер YDB

Примените манифест для создания кластера YDB:

Выполните команду:

kubectl apply -f samples/storage-block-4-2.yaml

Эта команда создаст объект StatefulSet, который описывает набор контейнеров с предсказуемыми сетевыми именами и закрепленными за ними дисками, а также необходимые для работы кластера объекты Service и ConfigMap.

Прогресс создания кластера YDB можно посмотреть с помощью следующих команд:

kubectl get storages.ydb.tech
kubectl describe storages.ydb.tech

Дождитесь, когда ресурс типа Storage перейдет в состояние Ready.

Важно

Конфигурация кластера статична, контроллер не будет обрабатывать изменения при повторном применении манифеста. Изменение таких параметров кластера, как версия или размер дисков, возможно только через пересоздание кластера.

Стандартная конфигурация включает минимально необходимые 9 нод хранения, каждая с диском размером 80 ГБ.

Для эффективной работы YDB рекомендуется использовать физические (не виртуальные) диски объемом более 800 ГБ как блочные устройства.

Минимальный объем диска должен быть не менее 80 ГБ, при меньшем объеме узел YDB не сможет использовать устройство. Корректная и бесперебойная работа с дисками минимального объема не гарантируется. Использовать такие диски рекомендуется исключительно в ознакомительных целях.

Важно

Конфигурации с дисками объемом меньше 800 ГБ или с любыми видами виртуализации системы хранения нельзя использовать для сервисов, находящихся в промышленной эксплуатации, а также для тестирования производительности системы.

Мы не рекомендуем использовать для хранения данных YDB диски, которые используются другими процессами (в том числе операционной системой).

Создайте базу данных

Примените манифест для создания базы данных:

Выполните команду:

kubectl apply -f samples/database.yaml

Примечание

Значение ключа .spec.storageClusterRef.name должно совпадать с именем ресурса storage части кластера.

После обработки манифеста будет создан объект StatefulSet, который описывает набор динамических нод. Созданная БД будет доступна изнутри Kubernetes кластера по DNS-имени database-sample, или по FQDN-имени database-sample.<namespace>.svc.cluster.local, где namespace — название пространства имен, в котором был установлен релиз. Порт для подключения к БД — 2135.

Посмотрите статус созданного ресурса:

kubectl describe database.ydb.tech

Name:         database-sample
Namespace:    default
Labels:       <none>
Annotations:  <none>
API Version:  ydb.tech/v1alpha1
Kind:         Database
...
Status:
  State:  Ready
Events:
  Type     Reason              Age    From          Message
  ----     ------              ----   ----          -------
  Normal   Provisioning        8m10s  ydb-operator  Resource sync is in progress
  Normal   Provisioning        8m9s   ydb-operator  Resource sync complete
  Normal   TenantInitialized   8m9s   ydb-operator  Tenant /root/database-sample created

База данных готова к работе.

Проверьте работу

Проверьте работоспособность YDB:

  1. Проверьте, что все узлы в состоянии Ready:

    kubectl get pods
    
    NAME                READY   STATUS    RESTARTS   AGE
    database-sample-0   1/1     Running   0          1m
    database-sample-1   1/1     Running   0          1m
    database-sample-2   1/1     Running   0          1m
    database-sample-3   1/1     Running   0          1m
    database-sample-4   1/1     Running   0          1m
    database-sample-5   1/1     Running   0          1m
    storage-sample-0    1/1     Running   0          1m
    storage-sample-1    1/1     Running   0          1m
    storage-sample-2    1/1     Running   0          1m
    storage-sample-3    1/1     Running   0          1m
    storage-sample-4    1/1     Running   0          1m
    storage-sample-5    1/1     Running   0          1m
    storage-sample-6    1/1     Running   0          1m
    storage-sample-7    1/1     Running   0          1m
    storage-sample-8    1/1     Running   0          1m
    
  2. Запустите новый под с YDB CLI:

    kubectl run -it --image=cr.yandex/yc/ydb:21.4.30 --rm ydb-cli bash
    
  3. Выполните запрос к базе данных YDB:

    ydb \
      --endpoint grpc://database-sample-grpc:2135 \
      --database /root/database-sample \
      table query execute --query 'select 1;'
    
    • --endpoint — эндпоинт базы данных;
    • --database — имя созданной базы данных;
    • --query — текст запроса.

    Результат выполнения:

    ┌─────────┐
    | column0 |
    ├─────────┤
    | 1       |
    └─────────┘
    

    Подробнее о командах YDB CLI читайте в документации.

Освободите неиспользуемые ресурсы

Если созданные ресурсы больше не нужны, удалите их:

  1. Чтобы удалить базу данных YDB, достаточно удалить сопоставленный с ней ресурс Database:

    kubectl delete database.ydb.tech database-sample
    
  2. Чтобы удалить кластер YDB, выполните следующие команды:

    kubectl delete storage.ydb.tech storage-sample
    kubectl delete pvc -l app.kubernetes.io/name=ydb
    
  3. Чтобы удалить контроллер YDB из кластера Kubernetes, удалите релиз, созданный Helm:

    helm delete ydb-operator
    
    • ydb-operator — имя релиза, с которым был установлен контроллер.