---
title: "Аддон DBaaS Operator для Kubernetes"
description: "Аддон DBaaS Operator для Kubernetes. Установка, настройка, примеры использования. Документация и инструкции по работе с облачными сервисами Timeweb Cloud."
---

> Полный индекс документации для ИИ-агентов: [llms.txt](https://timeweb.cloud/llms.txt).

TWC DBaaS Operator — это дополнение для Kubernetes, которое позволяет создавать и управлять облачными базами данных напрямую из кластера.

Поддерживаемые базы данных:

-   [MySQL](https://timeweb.cloud/docs/dbaas/mysql)
-   [PostgreSQL](https://timeweb.cloud/docs/dbaas/postgresql)
-   [Redis](https://timeweb.cloud/docs/dbaas/redis)

## Установка

Для установки дополнения перейдите в раздел «Дополнения» в панели управления кластером и выберите «TWC DBaaS Operator».

![Scr 20250806 Njjd](https://content.timeweb.com/assets/2e90274c-ef17-4522-939c-6081c1fcb368.png?width=2012&height=1444)

В открывшемся окне нажмите кнопку «Установить» и дождитесь завершения установки.

![Scr 20250806 Njnp](https://content.timeweb.com/assets/9be9e6d3-b25e-436d-bcd8-f98521a69cdb.png?width=2006&height=962)

После завершения установки, убедитесь, что все работает корректно. Для этого выполните команду:

```shell
kubectl get pod -n tw-dbaas-operator
```

В выводе должен быть под со статусом `Running`:

```shell
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 через оператор можно разделить на три шага:

1.  Создание инстанса базы данных.
2.  Создание базы данных внутри инстанса.
3.  Создание пользователей.

### Создание инстанса

Сперва необходимо создать инстанс — это сама облачная база данных, с заданным типом, версией, конфигурацией и параметрами резервного копирования.

Пример манифеста:

```yaml
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` уникальны для каждого типа базы данных. Список доступных параметров можно найти в отдельных статьях:

-   [MySQL](https://timeweb.cloud/docs/dbaas/mysql/parameters)
-   [PostgreSQL](https://timeweb.cloud/docs/dbaas/postgresql/parameters)
-   [Redis](https://timeweb.cloud/docs/dbaas/redis/parameters)

Подходящий `preset_id` можно получить [при помощи запроса к API](https://timeweb.cloud/api-docs#tag/Bazy-dannyh/operation/getDatabasesPresets):

```bash
curl -X GET \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $TIMEWEB_CLOUD_TOKEN" \
  "https://api.timeweb.cloud/api/v2/presets/dbs"
```

Для удобства можно использовать команду с фильтрацией и форматированием:

```bash
curl -sS -H "Authorization: Bearer $TIMEWEB_CLOUD_TOKEN" \
  "https://api.timeweb.cloud/api/v2/presets/dbs" \
| jq -r '.databases_presets[]
         | select(.type=="mysql")
         | [.id, .description_short, .location, .price]
         | @tsv' \
| column -t
```

ID пресета будет указан в первом столбце. При необходимости измените `type=="mysql"` на нужный тип базы данных.

### Создание базы данных

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

Пример манифеста:

```yaml
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` должно указывать на соответствующий инстанс.

### Включение расширений PostgreSQL

Для баз PostgreSQL можно включить расширения. Для этого в манифесте `Database` добавьте поле `extensions` и перечислите в нем нужные расширения.

Пример манифеста:

```yaml
apiVersion: dbaas.timeweb.cloud/v1
kind: Database
metadata:
 name: postgres-pgvector
 namespace: default
spec:
 database_list:
   - name: "default_db"
     description: "PostgreSQL база с расширениями"
 dbaas_instance:
   name: "postgres-instance"
   namespace: "default"
 extensions:
   - "pg_stat_statements"
   - "timescaledb"
   - "postgres_fdw"
   - "postgis"
   - "uuid-ossp"
   - "amcheck"
   - "pg_stat_kcache"
   - "pg_trgm"
   - "pgcrypto"
   - "pgvector"
   - "citext"
   - "pgagent"
   - "postgis_topology"
```

Поле `extensions` поддерживается только для PostgreSQL. Для MySQL и Redis его указывать не нужно.

Чтобы отключить расширения, передайте пустой список:

```yaml
apiVersion: dbaas.timeweb.cloud/v1
kind: Database
metadata:
 name: postgres-pgvector
 namespace: default
spec:
 database_list:
   - name: "default_db"
     description: "PostgreSQL база с расширениями"
 dbaas_instance:
   name: "postgres-instance"
   namespace: "default"
 extensions: []
```

### Создание пользователя

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

Пример манифеста:

```yaml
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-грантов для каждой базы. Список доступных привилегий можно найти в статьях:

-   [MySQL](https://timeweb.cloud/docs/dbaas/mysql/users-and-privileges#dostupnye-privilegii)
-   [PostgreSQL](https://timeweb.cloud/docs/dbaas/postgresql/users-and-privileges#dostupnye-privilegii)
-   [Redis](https://timeweb.cloud/docs/dbaas/redis/users-and-privileges#dostupnye-privilegii)
