TWC DBaaS Operator — это дополнение для Kubernetes, которое позволяет создавать и управлять облачными базами данных напрямую из кластера.
Поддерживаемые базы данных:
Установка
Для установки дополнения перейдите в раздел «Дополнения» в панели управления кластером и выберите «TWC DBaaS Operator».
В открывшемся окне нажмите кнопку «Установить» и дождитесь завершения установки.
После завершения установки, убедитесь, что все работает корректно. Для этого выполните команду:
kubectl get pod -n tw-dbaas-operator
В выводе должен быть под со статусом Running
:
NAME READY STATUS RESTARTS AGE
tw-dbaas-operator-856f97b959-k5jvp 1/1 Running 0 27m
Оператор создает три ресурса CustomResourceDefinition (CRD):
instances.dbaas.timeweb.cloud
— управление инстансами DBaaS.databases.dbaas.timeweb.cloud
— управление базами данных внутри инстансов.users.dbaas.timeweb.cloud
— управление пользователями баз данных.
Использование
Работу с DBaaS через оператор можно разделить на три шага:
- Создание инстанса базы данных.
- Создание базы данных внутри инстанса.
- Создание пользователей.
Создание инстанса
Сперва необходимо создать инстанс — это сама облачная база данных, с заданным типом, версией, конфигурацией и параметрами резервного копирования.
Пример манифеста:
apiVersion: dbaas.timeweb.cloud/v1
kind: Instance
metadata:
name: mysqldbaas
spec:
type: "mysql" # mysql / redis / postgresql
name: "k8smysql" # отображаемое имя в панели
version: "8.0"
pass_hash_type: "sha2" # только для MySQL (sha2 или native)
backups:
copy_count: 2
period: "day"
enabled: true
config:
auto_increment_increment: "1"
replica_count: 1 # количество реплик. Поддерживается только для MySQL и PostgreSQL. Поддерживаемые значения: 1, 3, 5.
no_external_ip: false
instance_size:
preset_id: 123
Параметры в блоке config
уникальны для каждого типа базы данных. Список доступных параметров можно найти в отдельных статьях:
Подходящий preset_id
можно получить при помощи запроса к API:
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TIMEWEB_CLOUD_TOKEN" \
"https://api.timeweb.cloud/api/v1/presets/dbs"
Для удобства можно использовать команду с фильтрацией и форматированием:
curl -sS -H "Authorization: Bearer $TIMEWEB_CLOUD_TOKEN" \
"https://api.timeweb.cloud/api/v1/presets/dbs" \
| jq -r '.databases_presets[]
| select(.type=="mysql")
| [.id, .description_short, .location, .price]
| @tsv' \
| column -t
ID пресета будет указан в первом столбце. При необходимости измените type=="mysql"
на нужный тип базы данных.
Создание базы данных
После создания инстанса можно описать базы данных, которые будут в нем размещены.
Пример манифеста:
apiVersion: dbaas.timeweb.cloud/v1
kind: Database
metadata:
name: database-sample
spec:
database_list:
- name: "default_db"
description: ""
- name: "db0"
description: "new db"
dbaas_instance:
name: "mysqldbaas"
namespace: "default"
Поле dbaas_instance
должно указывать на соответствующий инстанс.
Создание пользователя
После того как базы данных созданы, можно добавить пользователей и выдать им права доступа. Пользователь привязывается к конкретному инстансу и может иметь разные права для разных баз внутри него.
Пример манифеста:
apiVersion: dbaas.timeweb.cloud/v1
kind: User
metadata:
name: user-sample
spec:
user: "user0"
passwordSecret: "user0Secret"
description: "cool user"
host: "192.168.%"
permissions:
- grants: ["ALTER", "UPDATE", "DELETE", "INSERT"]
database: "default_db"
- grants: ["SELECT"]
database: "db1"
dbaas_instance:
name: "mysqldbaas"
namespace: "default"
---
apiVersion: v1
kind: Secret
metadata:
name: user0Secret
type: Opaque
data:
password: cGFzc3dvcmQxMjM0
Пароль для пользователя хранится в Kubernetes Secret в поле password
, закодированном в base64. Создать его можно так:
echo -n 'пароль' | base64
В разделе permissions указываются права пользователя на конкретные базы данных. Права задаются в виде списка SQL-грантов для каждой базы. Список доступных привилегий можно найти в статьях: