你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 CLI(az 或 kubectl)纵向扩展和缩减 Azure Database for PostgreSQL 服务器
有时候你可能需要更改服务器的特征或定义。 例如:
- 纵向扩展或缩减服务器使用的 vCore 数
- 纵向扩展或缩减服务器使用的内存
本指南说明如何缩放 vCore 和/或内存。
纵向扩展或缩减服务器的 vCore 或内存设置意味着可以设置每个 vCore 和内存设置的最小值和/或最大值。 如要将服务器配置为使用特定的 vCore 数目或特定的内存量,请将最小值设置设为等于最大值设置。 在增加为 vCore 和内存设置的值之前,必须确保
- 你在托管部署的物理基础结构中有足够的可用资源,并且
- 并置在同一系统上的工作负载不会竞争相同的 vCore 或内存。
显示服务器的当前定义
若要显示服务器的当前定义并查看当前的 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