使用 CLI (az 或 kubectl) 擴大和縮小適用於 PostgreSQL 的 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
...
解譯伺服器的定義
在伺服器的定義中,每一節點的最小或最大虛擬核心數設定,以及每一節點最小或最大記憶體設定的區段,會包含在「排程」區段中。 在該區段中,最大值設定會保存在名為「限制」的子區段中,而最小值設定會保存在名為「要求」的子區段中。
如果您設定了與最大值設定不同的最小值設定,則設定會保證在需要時為您的伺服器配置其要求的資源。 這不會超過您設定的限制。
您的伺服器實際使用的資源 (虛擬核心和記憶體) 將不會超過最大值設定,且取決於叢集上可用的工作負載和資源。 如果您未以最大值來限制設定,則伺服器有可能會使用 Kubernetes 叢集為伺服器排程所在的 Kubernetes 節點配置的所有資源。
在預設設定中,只有最小記憶體會設定為 256Mi,因為這是建議用來執行 PostgreSQL 伺服器的最低記憶體數量。
注意
設定最小值,並不表示伺服器一定會使用該最小值。 這是表示在伺服器有此需要時,就絕對至少會獲得此最小值的配置。 例如,假設我們設定了 --minCpu 2
。 這並不表示伺服器會全程使用至少 2 個虛擬核心。 其真正意義是,如果伺服器不需要那麼多,則可以開始使用少於 2 個虛擬核心,而在後續有需要時,也絕對會獲得至少 2 個虛擬核心的配置。 這表示 Kubernetes 叢集會以適當方式將資源配置給其他工作負載,因而能在伺服器需要時為其配置 2 個虛擬核心。 此外,擴大和縮小需要重新啟動 kubernetes Pod,因此並非線上作業。
注意
在修改系統的設定之前,請務必先在此處熟悉 Kubernetes 資源模型
擴大和縮小伺服器
擴大是指增加伺服器的虛擬核心和/或記憶體設定的值。 縮小是指減少伺服器的虛擬核心和/或記憶體設定的值。
您即將進行的設定,必須在您為 Kubernetes 叢集進行的設定中納入考量。 請確定您並未設定 Kubernetes 叢集無法滿足的值。 這可能會導致錯誤或無法預期的行為,例如資料庫執行個體無法使用。 例如,如果伺服器的狀態在您變更設定後長時間保持在更新中狀態,則表示您可能將下列參數設定為 Kubernetes 叢集無法滿足的值。 若是如此,請還原變更或參閱 _troubleshooting_section。
您應設定哪些設定?
- 若要設定最小虛擬核心數,請設定
--cores-request
。 - 若要設定最大虛擬核心數,請設定
--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 叢集可接受的值。
例如,如果您想要將協調器和背景工作角色的下列設定都設為下列值:
- 最小虛擬核心數 =
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
或
az postgres server-arc edit -n postgres01 --cores-request '' --cores-limit '' --k8s-namespace arc --use-k8s