Развертывание YDB в AWS EKS
Чтобы с помощью Kubernetes создать кластер YDB, выполните следующие действия.
Перед началом работы
-
Настройте утилиты
awscli
иeksctl
для работы с ресурсами AWS по документации. -
Установите Kubernetes CLI kubectl.
-
Создайте кластер Kubernetes.
Вы можете использовать уже работающий кластер Kubernetes или создать новый.
Важно
Убедитесь, что используется версия Kubernetes 1.20 или выше.
Как создать кластер KubernetesCLIeksctl 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 будет автоматически обновлена для работы с кластером после его создания.
-
Установите менеджер пакетов Kubernetes Нelm 3.
-
Добавьте в Helm репозиторий для Yandex.Cloud:
CLIВыполните команду:
helm repo add ydb https://charts.ydb.tech/
ydb
— алиас репозитория;https://charts.ydb.tech/
— URL репозитория.
Результат выполнения:
"ydb" has been added to your repositories
-
Обновите индекс чартов Helm:
CLIВыполните команду:
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:
-
Проверьте, что все узлы в состоянии
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
-
Запустите новый под с YDB CLI:
kubectl run -it --image=cr.yandex/yc/ydb:21.4.30 --rm ydb-cli bash
-
Выполните запрос к базе данных 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 читайте в документации.
Освободите неиспользуемые ресурсы
Если созданные ресурсы больше не нужны, удалите их:
-
Чтобы удалить базу данных YDB, достаточно удалить сопоставленный с ней ресурс
Database
:kubectl delete database.ydb.tech database-sample
-
Чтобы удалить кластер YDB, выполните следующие команды:
kubectl delete storage.ydb.tech storage-sample kubectl delete pvc -l app.kubernetes.io/name=ydb
-
Чтобы удалить контроллер YDB из кластера Kubernetes, удалите релиз, созданный Helm:
helm delete ydb-operator
ydb-operator
— имя релиза, с которым был установлен контроллер.