Yandex Cloud
Поиск
Связаться с экспертомПопробовать бесплатно
  • Кейсы
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
  • Marketplace
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Искусственный интеллект
    • Безопасность
    • Инструменты DevOps
    • Бессерверные вычисления
    • Управление ресурсами
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
    • Акции и free tier
  • Кейсы
  • Документация
  • Блог
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ООО «Яндекс.Облако»
Yandex Cloud Stackland
  • Что нового
  • Установка
    • Все руководства
    • Установить Stackland на Yandex BareMetal
    • Настройка внешнего доступа к поду в кластере
    • Все инструкции
        • Создать кластер PostgreSQL
        • Изменить настройки кластера
        • Диагностика производительности
        • Создать резервную копию
        • Восстановить кластер
        • Удалить кластер
    • Проекты
    • Ресурсная модель
  • Управление доступом
  • Правила тарификации
  • Диагностика и устранение неполадок

В этой статье:

  • Через CLI
  • Защита от удаления
  • Через консоль управления
  1. Пошаговые инструкции
  2. Базы данных
  3. Managed Service for PostgreSQL
  4. Создать кластер PostgreSQL

Создать кластер PostgreSQL

Статья создана
Yandex Cloud
Обновлена 23 марта 2026 г.
  • Через CLI
  • Защита от удаления
  • Через консоль управления

Если у вас есть проект, создайте в нем кластер PostgreSQL.

Через CLIЧерез CLI

  1. Если проект еще не создан, то создайте его: kubectl create namespace <название проекта>.

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

    Внешний S3
    Stackland Storage (внутреннее объектное хранилище Stackland)

    Создайте Secret с учётными данными доступа к S3-совместимому хранилищу:

    1. Создайте файл, например: touch s3-credentials.yaml.

    2. Вставьте конфигурацию и подставьте свои accessKey и secretKey:

      apiVersion: v1
      kind: Secret
      metadata:
        name: access-key-credentials
      type: Opaque
      stringData:
        accessKey: "<access_key_id>"
        secretKey: "<secret_access_key>"
      
      
    3. Примените манифест: kubectl apply -f s3-credentials.yaml -n <название проекта>.

    В манифесте кластера укажите spec.backup.storage.type: s3 и ссылку на этот секрет в spec.backup.storage.s3.credentialsSecretRef.name (например, access-key-credentials).

    Ничего создавать не нужно. В манифесте кластера укажите spec.backup.storage.type: stackland-storage — оператор создаст Bucket и AccessKey автоматически. При необходимости можно сослаться на существующие ресурсы через spec.backup.storage.stacklandStorage.bucketRef и accessKeyRef.

  3. Создайте файл ресурса PostgresqlCluster. Например, с помощью команды touch postgresqlcluster.yaml.

  4. Откройте файл и вставьте конфигурацию ниже:

    Минимальная конфигурация
    Максимальная конфигурация (резервное копирование во внешний S3)
    Максимальная конфигурация (резервное копирование в Stackland Storage)
    apiVersion: postgresql.stackland.yandex.cloud/v1alpha1
    kind: PostgresqlCluster
    metadata:
      name: cluster
      annotations:
        pgcl.io/description: "Минимальный пример PostgreSQL кластера"
    spec:
      instances: 1
      deletionProtection: false # true — запретить удаление кластера до явного отключения защиты
      storage:
        size: 2Gi
        readOnlyTriggerPercent: 90 # процент использования диска для перевода в режим только для чтения (по умолчанию 90)
      version: "17"
      enableSuperuserAccess: true # поле должно иметь значение true при создании кластера. можно изменить после создания кластера
      resources:
        requests: # запросы на ресурсы
          cpu: "500m"
          memory: "1Gi"
        limits: # лимиты на ресурсы
          cpu: "1"
          memory: "2Gi"
      postgresConfiguration: # параметры postgres
        logLevel: info
        parameters:
          max_connections: "100"
          shared_buffers: "128MB"
          work_mem: "16MB"
      poolers: # пуллеры для чтения и записи
        resources:
          requests:
            cpu: "0.1"
            memory: "64Mi"
          limits:
            cpu: "0.2"
            memory: "128Mi"
        rw: # пуллер для записи
          port: 6432 # порт для записи
          instances: 1 # кол-во инстансов
          type: ClusterIP # тип кластера
          odyssey:
            poolMode: session # режим работы пула (session или transaction)
        ro:
          port: 6433
          instances: 1
          type: ClusterIP
          odyssey:
            poolMode: session
        r:
          port: 6434
          instances: 1
          type: ClusterIP
          odyssey:
            poolMode: session
      backup:
        storage:
          type: stackland-storage
    

    Данные пользователя будут храниться в секрете с названием <название кластера>-superuser.

    Используйте, если на предыдущем шаге вы создали Secret с учётными данными внешнего S3.

    Примечание

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

    apiVersion: v1
    kind: Secret
    metadata:
      name: secret
    type: kubernetes.io/basic-auth
    stringData:
      username: postgres
      password: $2b$12$4T***** # пароль для доступа к базе данных
    ---
    apiVersion: postgresql.stackland.yandex.cloud/v1alpha1
    kind: PostgresqlCluster
    metadata:
      name: cluster
      annotations:
        pgcl.io/description: "Полный пример PostgreSQL кластера"
    spec:
      instances: 1
      deletionProtection: false # true — защита от случайного удаления кластера
      storage:
        size: 2Gi
    #    storageClass: "your-storage-class"
        autoScaling:
          enabled: false # включение автоскейлинга
          maxSize: 300Gi # максимальный размер хранилища
          standardIncreasePercent: 20 # процент увеличения размера хранилища
          resizeTriggerPercent: 80 # процент использования после которого будет запущено увеличение размера хранилища
        readOnlyTriggerPercent: 90 # процент использования диска для перевода в режим только для чтения (по умолчанию 90)
      version: "17"
      enableSuperuserAccess: true # поле должно иметь значение true при создании кластера. можно изменить после создания кластера
      superuserSecretRef:
        name: secret
      resources:
        requests: # запросы на ресурсы
          cpu: "500m"
          memory: "1Gi"
        limits: # лимиты на ресурсы
          cpu: "1"
          memory: "2Gi"
      postgresConfiguration: # параметры postgres
        logLevel: info
        parameters:
          max_connections: "100"
          shared_buffers: "128MB"
          work_mem: "16MB"
      poolers: # пуллеры для чтения и записи
        resources:
          requests:
            cpu: "0.1"
            memory: "64Mi"
          limits:
            cpu: "0.2"
            memory: "128Mi"
        rw: # пуллер для записи
          port: 6432 # порт для записи
          instances: 1 # кол-во инстансов
          type: ClusterIP # тип кластера
          odyssey:
            poolMode: session # режим работы пула (session или transaction)
        ro:
          port: 6433
          instances: 1
          type: ClusterIP
          odyssey:
            poolMode: session
        r:
          port: 6434
          instances: 1
          type: ClusterIP
          odyssey:
            poolMode: session
      backup:
        storage:
          type: s3
          s3:
            prefix: s3://bucket # бакет для резервных копий
            region: ru-central1
            endpointUrl:  https://storage.yandexcloud.net # endpoint для доступа к бакету
            forcePathStyle: false
            storageClass: STANDARD
            credentialsSecretRef:
              name: access-key-credentials
              accessKeyIdPath: accessKey
              secretAccessKeyPath: secretKey
        schedule: "0 0 2 * * *" # запустить резервное копирование по расписанию (https://pkg.go.dev/github.com/robfig/cron#hdr-CRON_Expression_Format)
    

    Подставьте в параметр spec.backup.schedule расписание резервного копирования. Формат — CRON Expression Format. В spec.backup.storage.s3 укажите endpointUrl, prefix, region и имя секрета в credentialsSecretRef.name. При желании можно убрать schedule и не создавать расписание.

    Вариант для резервного копирования во внутреннее объектное хранилище Stackland Storage. Укажите в манифесте spec.backup.storage.type: stackland-storage — бакет и ключ доступа оператор создаст автоматически.

    Примечание

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

    apiVersion: v1
    kind: Secret
    metadata:
      name: secret
    type: kubernetes.io/basic-auth
    stringData:
      username: postgres
      password: $2b$12$4T***** # пароль для доступа к базе данных
    ---
    apiVersion: postgresql.stackland.yandex.cloud/v1alpha1
    kind: PostgresqlCluster
    metadata:
      name: cluster
      annotations:
        pgcl.io/description: "Полный пример PostgreSQL кластера"
    spec:
      instances: 1
      deletionProtection: false # true — защита от случайного удаления кластера
      storage:
        size: 2Gi
    #    storageClass: "your-storage-class"
        autoScaling:
          enabled: false # включение автоскейлинга
          maxSize: 300Gi # максимальный размер хранилища
          standardIncreasePercent: 20 # процент увеличения размера хранилища
          resizeTriggerPercent: 80 # процент использования после которого будет запущено увеличение размера хранилища
        readOnlyTriggerPercent: 90 # процент использования диска для перевода в режим только для чтения (по умолчанию 90)
      version: "17"
      enableSuperuserAccess: true # поле должно иметь значение true при создании кластера. можно изменить после создания кластера
      superuserSecretRef:
        name: secret
      resources:
        requests: # запросы на ресурсы
          cpu: "500m"
          memory: "1Gi"
        limits: # лимиты на ресурсы
          cpu: "1"
          memory: "2Gi"
      postgresConfiguration: # параметры postgres
        logLevel: info
        parameters:
          max_connections: "100"
          shared_buffers: "128MB"
          work_mem: "16MB"
      poolers: # пуллеры для чтения и записи
        resources:
          requests:
            cpu: "0.1"
            memory: "64Mi"
          limits:
            cpu: "0.2"
            memory: "128Mi"
        rw: # пуллер для записи
          port: 6432 # порт для записи
          instances: 1 # кол-во инстансов
          type: ClusterIP # тип кластера
          odyssey:
            poolMode: session # режим работы пула (session или transaction)
        ro:
          port: 6433
          instances: 1
          type: ClusterIP
          odyssey:
            poolMode: session
        r:
          port: 6434
          instances: 1
          type: ClusterIP
          odyssey:
            poolMode: session
      backup:
        storage:
          type: stackland-storage
        schedule: "0 0 2 * * *" # запустить резервное копирование по расписанию (https://pkg.go.dev/github.com/robfig/cron#hdr-CRON_Expression_Format)
    

    Подставьте в параметр spec.backup.schedule расписание резервного копирования. Формат — CRON Expression Format.

  5. Примените манифест: kubectl apply -f postgresqlcluster.yaml -n <название проекта>. При необходимости можно прописать название проекта в параметр ресурса metadata.namespace и не использовать в команде.

Защита от удаленияЗащита от удаления

Чтобы запретить случайное удаление кластера, включите защиту от удаления: в манифесте укажите spec.deletionProtection: true. Пока защита включена, удаление ресурса PostgresqlCluster через kubectl delete или через консоль управления будет отклонено. Чтобы удалить кластер, сначала отключите защиту — установите spec.deletionProtection: false и примените манифест, после чего можно удалить кластер.

В консоли управления переключатель Защита от удаления доступен при создании и при редактировании кластера.

Примечание

Ссылка для подключения к базе данных генерируется по шаблону: jdbc:postgresql://<название кластера>.<название проекта>.svc.<домен кластера>:6432/<название базы данных>?user=postgres&password=<пароль>&ssl=true&sslmode=require.

Для первого подключения можно использовать название базы данных postgres и имя суперпользователя postgres.

Через консоль управленияЧерез консоль управления

  1. Если вы еще не открыли проект, выберите проект.

  2. В левом меню выберите PostgreSQL Clusters.

  3. Нажмите Создать.

  4. Заполните поля:

    • Название кластера. Только строчные буквы, цифры и дефисы.
    • Количество инстансов, количество копий кластера.
    • Версия PostgreSQL, выберите из списка доступных версий.
    • Вычислительные ресурсы, где Лимиты — верхняя граница, Запросы — нижняя граница.
    • Хранилище, где Тип диска — это Storage Class (stackland-nvme, stackland-ssd, stackland-hdd, stackland-other). Подробнее о Storage Classes см. в разделе Дисковая подсистема.
    • База данных, раздел с данными для аутентификации.
    • Менеджер соединений, сервис для записи и чтения, используется для всех операций изменения данных и критически важных транзакций.
    • Резервные копии, настройки резервного копирования базы данных в S3-бакет.
    • Защита от удаления — переключатель. Включённая защита запрещает удаление кластера через API и консоль до её отключения.
  5. Нажмите Создать.

Готово, кластер появился в списке PostgreSQL Clusters. Чтобы скопировать ссылку для подключения:

  1. Выберите кластер в списке.

  2. Нажмите Подключиться и скопируйте ссылку.

    Примечание

    Ссылка генерируется по шаблону: jdbc:postgresql://<название кластера>.<название проекта>.svc.<домен кластера>:6432/<название базы данных>?user=postgres&password=<пароль>&ssl=true&sslmode=require. Подставьте пароль от базы данных для подключения.

    Для первого подключения можно использовать название базы данных postgres и имя суперпользователя postgres.

Была ли статья полезна?

Предыдущая
Назначить права доступа
Следующая
Изменить настройки кластера
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ООО «Яндекс.Облако»