多維度自動調度 Pod 資源功能可讓您擺脫只能選擇單一方式調度叢集資源的限制,透過多維度自動調度 Pod 資源,您可以同時使用水平調度 (依據 CPU) 和垂直調度 (依據記憶體)。
MultidimPodAutoscaler
物件會修改記憶體要求並新增副本,讓每個副本的平均 CPU 使用率符合目標使用率。
必要條件
- GKE 叢集版本 1.19.4-gke.1700 以上。
- 如果是 Standard 叢集,請在叢集中啟用垂直 Pod 自動調度資源功能。Autopilot 叢集已啟用垂直 Pod 自動調度資源功能。
使用多維度 Pod 自動調度功能
這個範例說明如何建立 Deployment 和 MultidimPodAutoscaler
物件,自動調度 Deployment 的資源。
建立部署
必須先建立 MultidimPodAutoscaler
要監控的工作負載,才能建立該 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 |
UpdateMode = "Off" |
如果啟用「自動更新」,系統就不會套用任何自動調整最佳化建議。 |
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 資源。