Увеличение и уменьшение масштаба сервера База данных Azure для PostgreSQL с помощью ИНТЕРФЕЙСА командной строки (az или kubectl)

Иногда может потребоваться изменить характеристики или определение сервера. Например:

  • Увеличение или уменьшение числа виртуальных ядер, которые использует сервер
  • Увеличение или уменьшение объема памяти, используемой сервером

В этом руководстве объясняется, как масштабировать количество виртуальных ядер и (или) объем памяти.

Увеличение или уменьшение размера виртуальных ядер или параметров памяти сервера означает, что у вас есть возможность задать минимальное и (или) максимальное значение для каждого из параметров виртуального ядра и памяти. Если вы хотите настроить сервер для использования определенного количества виртуальных ядер или определенного объема памяти, необходимо задать минимальные параметры, равные максимальным параметрам. Прежде чем увеличивать набор значений для виртуальных ядер и памяти, необходимо убедиться, что

  • у вас достаточно ресурсов, доступных в физической инфраструктуре, где размещается развертывание и
  • Рабочие нагрузки, ссортированные в той же системе, не конкурируют за одни и те же виртуальные ядра или память.

Примечание.

В отношении технологии (как предварительной версии функции), описанной в этой статье, действуют дополнительные условия использования предварительных версий Microsoft Azure.

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

Отображение текущего определения сервера

Чтобы отобразить текущее определение сервера и просмотреть текущие параметры виртуального ядра и памяти, выполните любую из следующих команд:

С помощью Azure CLI (az)

az postgres server-arc show -n <server name> --k8s-namespace <namespace> --use-k8s

команда CLI kubectl.

kubectl describe postgresql/<server name> -n <namespace name>

Команда возвращает конфигурацию группы серверов. Если вы создали сервер с параметрами по умолчанию, вы увидите следующее определение:

Spec:
  Dev:  false
  Scheduling:
    Default:
      Resources:
        Requests:
          Memory:  256Mi
...

Интерпретация определения сервера

В определении сервера раздел, который содержит параметры минимального или максимального виртуального ядра на узел и минимальную или максимальную память на узел, — раздел "Планирование". В этом разделе максимальные значения указаны в подразделе limits (ограничения), а минимальные — в подразделе requests (запросы).

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

Ресурсы (виртуальные ядра и память), которые на самом деле будут использоваться сервером, имеют максимальные параметры и зависят от рабочих нагрузок и ресурсов, доступных в кластере. Если вы не окупите параметры с максимальным значением, сервер может использовать до всех ресурсов, выделенных кластером Kubernetes для узлов Kubernetes, на которые планируется сервер.

В конфигурации по умолчанию для минимальной памяти задано значение 256Mi, так как это минимальный объем памяти, который рекомендуется запустить сервер PostgreSQL.

Примечание.

Установка минимального значения не означает, что сервер обязательно будет использовать этот минимум. Это означает, что если сервер нуждается в нем, он гарантированно будет выделен по крайней мере на этот минимум. Предположим, мы установили значение --minCpu 2. Это не означает, что сервер будет использовать по крайней мере 2 виртуальных ядер в любое время. Вместо этого это означает, что сервер может начать использовать менее 2 виртуальных ядер, если он не нуждается в этом много, и он гарантированно будет выделен по крайней мере 2 виртуальных ядер, если он нуждается в них позже. Это означает, что кластер Kubernetes выделяет ресурсы другим рабочим нагрузкам таким образом, чтобы он мог выделить 2 виртуальных ядра на сервер, если он когда-либо нуждается в них. Кроме того, увеличение и уменьшение масштаба не является операцией в сети, поскольку требует перезапуска объектов pod Kubernetes.

Примечание.

Прежде чем вносить изменения в конфигурацию системы, обязательно ознакомьтесь с моделью ресурсов Kubernetes здесь.

Увеличение и уменьшение масштаба сервера

Увеличение масштаба относится к увеличению значений для параметров виртуальных ядер и (или) памяти сервера. Уменьшение масштаба относится к уменьшению значений для параметров виртуальных ядер и (или) памяти сервера.

Параметры, которые вы будете настраивать, должны быть учтены в конфигурации, заданной для кластера Kubernetes. Убедитесь, что не заданы значения, которые кластер Kubernetes не сможет обеспечить. Это может привести к ошибкам или непредсказуемому поведению, например к недоступности экземпляра базы данных. Например, если состояние сервера остается в состоянии обновления состояния в течение длительного времени после изменения конфигурации, это может быть признаком того, что указанные ниже параметры соответствуют значениям, которые не может удовлетворить кластер Kubernetes. В этом случае отмените изменения или прочтите раздел "Устранение неполадок".

Какие параметры следует задать?

  • Чтобы задать минимальное количество виртуальных ядер, установите --cores-request.
  • Чтобы задать максимальное количество виртуальных ядер, установите --cores-limit.
  • Чтобы задать минимальный объем памяти, установите --memory-request.
  • Чтобы задать максимальный объем памяти, установите --memory-limit.

Внимание

При использовании Kubernetes настройка параметра ограничения без аналогичного параметра запроса приводит к тому, что всегда запрашивается значение ограничения. Это может привести к недоступности сервера, так как его модули pod не могут быть перепланированы, если узел Kubernetes недоступен с достаточными ресурсами. Чтобы избежать такой ситуации, правильно настройте запросы и ограничения, как описано в приведенных ниже примерах.

Далее приводится общий синтаксис ограничений.

az postgres server-arc edit -n <server name> --memory-limit/memory-request/cores-request/cores-limit <val> --k8s-namespace <namespace> --use-k8s

Значение параметра для памяти должно быть сочетанием числа и единицы измерения. Например, объем памяти в 1 ГБ можно указать как "1024Mi" или "1Gi". Чтобы указать число ядер, передайте только число без единиц измерения.

Примеры использования Azure CLI

Настройте сервер не более 2 ядер:

 az postgres server-arc edit -n postgres01 --cores-request 1, --cores-limit 2  --k8s-namespace arc --use-k8s

Примечание.

Чтобы получить дополнительные сведения об этих параметрах, выполните команду az postgres server-arc update --help.

Пример с использованием собственных средств Kubernetes, включая kubectl

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

kubectl edit postgresql/<server name> -n <namespace name>

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

Внимание

Ниже приведен пример, демонстрирующий внесение изменений в конфигурацию. Перед обновлением конфигурации убедитесь, что для параметров заданы значения, которые могут быть выполнены в кластере Kubernetes.

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

  • минимальное количество виртуальных ядер = 2;
  • максимальное количество виртуальных ядер = 4;
  • минимальный объем памяти = 512Mb;
  • максимальный объем памяти = 1Gb.

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

...
  spec:
  dev: false
  scheduling:
    default:
      resources:
        requests:
          cpu: "2"
          memory: 256Mi
        limits:
          cpu: "4"
          memory: 1Gi
...

Если вы плохо знакомы с редактором vi, изучите здесь описание команд, которые вам потребуются.

  • Режим правки: i
  • Перемещение с помощью стрелок
  • Выход из режима правки: esc
  • Выход без сохранения: :qa!
  • Выход с сохранением: :qw!

Восстановление значений по умолчанию

Чтобы восстановить значения по умолчанию для ограничений и запросов ядер и памяти, измените их и передайте пустую строку вместо фактического значения. Например, если требуется сбросить ограничение на количество ядер, выполните следующие команды.

az postgres server-arc edit -n postgres01 --cores-request '' --k8s-namespace arc --use-k8s
az postgres server-arc edit -n postgres01 --cores-limit '' --k8s-namespace arc --use-k8s

or

az postgres server-arc edit -n postgres01 --cores-request '' --cores-limit '' --k8s-namespace arc --use-k8s