多維度 Pod 自動調整資源配置可讓您擺脫單一的叢集調整資源配置方式。透過多維度自動調度 Pod 資源,您可以同時使用水平調度 (依據 CPU) 和垂直調度 (依據記憶體)。
MultidimPodAutoscaler 物件會修改記憶體要求並新增副本,讓每個副本的平均 CPU 使用率符合目標使用率。
必要條件
- GKE 叢集版本 1.19.4-gke.1700 以上。
- 如果是 Standard 叢集,請在叢集中啟用垂直自動調度 Pod 資源功能。Autopilot 叢集已啟用垂直自動調度 Pod 資源功能。
使用多維度自動調度 Pod 資源功能
這個範例說明如何建立 Deployment 和 MultidimPodAutoscaler 物件,自動調整 Deployment 的規模。
建立部署
您必須先建立要監控的工作負載,才能建立 MultidimPodAutoscaler。下列檔案 (php-apache.yaml) 會指定 CPU 要求的價值:
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 1
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
ports:
- containerPort: 80
resources:
# Since MPA does not specify CPU requests, you must specify a request in
# the Deployment
limits:
cpu: 500m
requests:
cpu: 200m
如要建立 Deployment,請套用 php-apache.yaml 資訊清單:
kubectl apply -f php-apache.yaml
建立 MultidimPodAutoscaler
建立 Deployment 後,您可以建立 MultidimPodAutoscaler 物件。下列 MultidimPodAutoscaler 資訊清單會根據您指定的值,自動調整副本數量和記憶體要求。
如要進一步瞭解這個範例中的欄位,請參閱「API 參考資料」一節。
apiVersion: autoscaling.gke.io/v1beta1
kind: MultidimPodAutoscaler
metadata:
name: php-apache-autoscaler
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
goals:
metrics:
- type: Resource
resource:
# Define the target CPU utilization request here
name: cpu
target:
type: Utilization
averageUtilization: 60
constraints:
global:
minReplicas: 1
maxReplicas: 5
containerControlledResources: [ memory ]
container:
- name: '*'
# Define boundaries for the memory request here
requests:
minAllowed:
memory: 1Gi
maxAllowed:
memory: 2Gi
policy:
updateMode: Auto
如要建立 MultidimPodAutoscaler,請套用 php-apache-autoscaler.yaml 資訊清單:
kubectl apply -f php-apache-autoscaler.yaml
查看 MultidimPodAutoscaler
使用 kubectl get 指令查看所有 MultidimPodAutoscaler 物件:
kubectl get mpa
刪除 MultidimPodAutoscaler
使用 kubectl delete 指令刪除 MultidimPodAutoscaler 物件:
kubectl delete -f php-apache-autoscaler.yaml
API 參考資料
以下各節說明可新增至 MultidimPodAutoscaler 物件的可能欄位。
所有欄位均適用於apiVersion v1beta1 autoscaling.gke.io。
MultidimPodAutoscaler
MultidimPodAutoscaler 是多維度 Pod 自動配置器的設定,可根據歷來和即時資源使用率,自動管理 Pod 資源和數量。
| 欄位 | 類型 | 說明 |
|---|---|---|
metadata |
ObjectMeta |
標準物件中繼資料。 |
spec |
MultidimPodAutoscalerSpec |
多維度 Pod 自動配置器的預期行為。 |
status |
MultidimPodAutoscalerStatus |
最近一次觀察到的多維度 Pod 自動配置器狀態。 |
MultidimPodAutoscalerSpec
MultidimPodAutoscalerSpec 是定義自動配置器行為的規格。
| 欄位 | 類型 | 說明 |
|---|---|---|
ScaleTargetRef |
autoscaling.CrossVersionObjectReference |
參照,指向要縮放的目標資源 (使用 Scale 子資源)。 |
Goals |
*MultidimGoals |
多維度 Pod 自動配置器嘗試達成及維持的目標。 |
Constraints |
*MultidimConstraints |
說明自動調度資源的限制。限制條件的優先順序高於目標。如果限制條件阻礙了某個目標,系統就不會達成該目標。舉例來說,即使副本可能需要擴充,達到副本數量上限也會阻止進一步擴充。 |
Policy |
*MultidimPolicy |
政策可讓您指定建議的套用方式。 |
MultidimGoals
MultidimGoals是多維度 Pod 自動配置器嘗試達成的目標。
| 欄位 | 類型 | 說明 |
|---|---|---|
Metrics |
[]MetricSpec |
包含指標清單和所需值。多維度 Pod 自動配置器會盡量接近所需值。 |
MultidimConstraints
MultidimConstraints 說明自動調度資源的限制。限制條件的優先順序高於目標。
| 欄位 | 類型 | 說明 |
|---|---|---|
Global |
*GlobalConstraints |
適用於整個自動調度資源應用程式的限制。 |
Pod |
*PodConstraints |
適用於目標應用程式中單一 Pod 的限制。 |
ContainerControlledResources |
[]ResourceName |
應由自動調整資源配置器控制的容器資源。memory 是唯一支援的值。 |
Container |
[]ContainerConstraints |
適用於 Pod 容器的限制。 |
ResourceConstraints
ResourceConstraints 定義可指派給容器、Pod 或應用程式的資源量下限和上限。
| 欄位 | 類型 | 說明 |
|---|---|---|
MinAllowed |
ResourceList |
可指派的資源數量下限。如未提供,則會使用 0。 |
MaxAllowed |
ResourceList |
可指派的資源數量上限。如未提供,則資源數量沒有上限。 |
GlobalConstraints
GlobalConstraints 定義適用於整個應用程式的限制。這些限制包括副本數量或資源總量。
| 欄位 | 類型 | 說明 |
|---|---|---|
MinReplicas |
*Int32 |
應用程式可擁有的副本數量下限。如未提供,則會使用 1。 |
MaxReplicas |
*Int32 |
應用程式可擁有的副本數量上限。如未提供,則副本數量上限不受限制。 |
Requests |
*ResourceConstraints |
應用程式可要求的資源數量上下限,以所有 Pod 的總和計算。 |
PodConstraints
PodConstraints 定義單一 Pod 可要求的資源量下限和上限,這些資源量是 Pod 中所有容器要求的總和。
| 欄位 | 類型 | 說明 |
|---|---|---|
Requests |
*ResourceConstraints |
單一 Pod 可要求的資源量下限和上限,是 Pod 中所有容器要求的資源量總和。 |
ContainerConstraints
ContainerConstraints 是套用至 Pod 容器的限制。
| 欄位 | 類型 | 說明 |
|---|---|---|
Name |
String |
指定限制的容器名稱。您也可以使用 * 為 Pod 中的所有容器指定限制。 |
Requests |
*ResourceConstraints |
指定容器可要求的最少和最多資源量。 |
UpdateMode
使用 UpdateMode 控制計算出的最佳化建議套用方式。
| 欄位 | 類型 | 說明 |
|---|---|---|
AutoUpdates |
UpdateMode = "Auto" |
AutoUpdates 表示所有自動配置器建議隨時都能套用。 |
MultidimPolicy
| 欄位 | 類型 | 說明 |
|---|---|---|
Update |
UpdateMode |
定義建議的套用方式。空值會導致驗證失敗。 |
MultidimPodAutoscalerStatus
MultidimPodAutoscalerStatus 說明自動配置器的執行階段狀態。
| 欄位 | 類型 | 說明 |
|---|---|---|
ObservedGeneration |
*Int64 |
這個自動配置器觀測到的最新世代。 |
RecommendedPodResources |
*RecommendedPodResources |
自動配置器為受控 Pod 建議的最新計算資源量。 |
CurrentReplicas |
Int32 |
CurrentReplicas 是自動配置器上次看到的備用 Pod 數量,由這個自動配置器管理。 |
DesiredReplicas |
Int32 |
DesiredReplicas 是這個自動配置器管理的 Pod 副本所需數量,由自動配置器上次計算得出。 |
CurrentMetrics |
[]autoscaling.MetricStatus |
這個自動配置器使用的指標上次讀取狀態。 |
Conditions |
[]metav1.Condition |
Conditions 是自動配置器調度目標時必須符合的一組條件,並指出是否符合這些條件。 |
後續步驟
- 進一步瞭解如何設定水平自動調度 Pod 資源功能。
- 進一步瞭解如何設定垂直自動調度 Pod 資源功能。