你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 CLI(az 或 kubectl)纵向扩展和缩减 Azure Database for PostgreSQL 服务器

有时候你可能需要更改服务器的特征或定义。 例如:

  • 纵向扩展或缩减服务器使用的 vCore 数
  • 纵向扩展或缩减服务器使用的内存

本指南说明如何缩放 vCore 和/或内存。

纵向扩展或缩减服务器的 vCore 或内存设置意味着可以设置每个 vCore 和内存设置的最小值和/或最大值。 如要将服务器配置为使用特定的 vCore 数目或特定的内存量,请将最小值设置设为等于最大值设置。 在增加为 vCore 和内存设置的值之前,必须确保

  • 你在托管部署的物理基础结构中有足够的可用资源,并且
  • 并置在同一系统上的工作负载不会竞争相同的 vCore 或内存。

注意

作为预览版功能,本文中介绍的技术受制于 Microsoft Azure 预览版补充使用条款

发行说明中提供了最近的更新。

显示服务器的当前定义

若要显示服务器的当前定义并查看当前的 vCore 和内存设置,请运行以下命令之一:

使用 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
...

解释服务器的定义

在服务器的定义中,每个节点的最小/最大 vCore 数量设置和每个节点的最小/最大内存量设置显示在“计划”部分。 在该部分中,最大值设置保留在名为“限制”的子节中,最小值设置保留在“请求”子节中。

如果设置的最小值设置与最大值设置不同,则配置可保证在需要时为服务器分配所请求的资源。 它不会超过设置的限制。

服务器实际使用的资源(vCore 和内存)最高不能超过最大值设置,具体取决于工作负荷和群集上的可用资源。 如果没有使用最大值来设置上限,则服务器最多可能使用 Kubernetes 群集分配给 Kubernetes 节点(在该节点上规划服务器)的所有资源。

在默认配置中,仅将最小内存设置为 256Mi,因为它是运行 PostgreSQL 服务器时建议使用的最小内存量。

注意

设置最小值不意味着服务器将一定使用该最小值。 它意味着如果服务器需要最小值,则保证为其至少分配这个最小值。 比如说我们设置 --minCpu 2。 这不意味着服务器将始终使用至少 2 个 Vcore。 而是意味着,如果服务器不需要那么多的 vCore,开始时可以使用少于 2 个的 Vcore,并且以后如果需要,保证可以为其至少分配 2 个 Vcore。 这意味着,Kubernetes 群集将资源分配给其他工作负荷,并且在服务器需要时可以将 2 个 Vcore 分配给该服务器。 此外,纵向扩展和缩减不是一个联机操作,因为该操作需要重新启动 Kubernetes Pod。

注意

在修改系统配置之前,请确保在此处熟悉 Kubernetes 资源模型

纵向扩展和缩减服务器

纵向扩展是指增加服务器的 vCore 和/或内存设置的值。 纵向缩减是指减小服务器的 vCore 和/或内存设置的值。

要设置的设置必须纳入为 Kubernetes 群集所设置的配置的范围内进行考虑。 请确保未设置 Kubernetes 群集无法满足的值。 这可能导致出错或发生不可预测的行为,如数据库实例不可用。 例如,如果在更改配置后,服务器的状态长时间处于“正在更新”状态,则可能表示将以下参数设置为 Kubernetes 群集无法满足的值。 如果是这种情况,请还原更改或阅读 _troubleshooting_section。

应设置哪些设置?

  • 若要设置最小 vCore,请设置 --cores-request
  • 若要设置最大 vCore,请设置 --cores-limit
  • 若要设置最小内存,请设置 --memory-request
  • 若要设置最大内存,请设置 --memory-limit

注意

使用 Kubernetes,配置限制设置而不配置相应的请求设置时,系统会强制让请求值与限制保持一致。 这可能会导致服务器不可用,因此,如果没有提供充足资源的 Kubernetes 节点,则可能不会重新计划 Pod。 因此,为了避免出现这种情况,下面的示例演示了如何设置请求和限制设置。

常规语法为:

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

为内存设置指示的值是数字,其后是卷的单位。 例如,若要指示 1Gb,应指示 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 群集可以遵循的值。

例如,如要将协调器和工作器角色的以下设置设置为下值:

  • 最小 vCore = 2
  • 最大 vCore = 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

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