在 VerticalPodAutoscaler 的 API 版本之間遷移

本頁面說明如何將 VerticalPodAutoscaler 物件從 API v1beta1 版遷移至 v1beta2。

事前準備

如要準備這項工作,請執行下列步驟:

  • 確認您已啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 確認您已安裝 Cloud SDK
  • 設定預設的專案 ID
    gcloud config set project [PROJECT_ID]
  • 如果您使用區域叢集,請設定預設的運算區域
    gcloud config set compute/zone [COMPUTE_ZONE]
  • 如果您使用地區叢集,請設定預設的運算地區
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud 更新到最新版本:
    gcloud components update

為叢集啟用垂直 pod 自動調度資源功能

如要建立已啟用垂直 pod 自動調度資源功能的新叢集,請輸入以下指令:

gcloud beta container clusters create [CLUSTER_NAME] --enable-vertical-pod-autoscaling

其中 [CLUSTER_NAME] 是您為叢集選擇的名稱。

如要為現有叢集啟用垂直 pod 自動調度資源功能,請輸入以下指令:

cloud beta container clusters update [CLUSTER-NAME] --enable-vertical-pod-autoscaling

其中 [CLUSTER_NAME] 是叢集的名稱。

介紹 v1beta2 API

垂直 pod 自動調度資源功能是 GKE 1.11 版中導入的測試版功能。v1beta1 API 會使用標籤選取器來指定某些 VerticalPodAutoscaler 所屬的 Pod。我們蒐集了使用者意見回饋,並基於可用性而決定修改 API:

  • 使用選取器很容易造成設定錯誤。例如, VerticalPodAutoscaler 物件以叢集中的所有 Pod 為目標,或 Pod 屬於不只一個 VerticalPodAutoscaler 物件。
  • 目前為止,VerticalPodAutoscaler 最常見的用途是以整個部署為目標。
  • 這個變更會使 VPA 與 HorizontalPodAutoscaler API 保持一致。

使用 v1beta2 API 時,VerticalPodAutoscaler 物件會直接指向控制器,例如,部署或 DaemonSet。

從 v1beta1 遷移至 v1beta2 API

本指南說明如何安全地將 VerticalPodAutoscaler 調度的部署從 v1beta1 遷移至 v1beta2。

以下是部署的資訊清單:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: deployment-name
  labels:
    label: vpa-label
spec:
  replicas: 2
  template:
    metadata:
      labels:
        label: vpa-label
    spec:
      containers:
      - {...}

您會在 v1beta1 中,透過指定選取器來比對部署中的所有 Pod 來進行調度:

apiVersion: autoscaling.k8s.io/v1beta1
kind: VerticalPodAutoscaler
metadata:
  name: vpa-name
spec:
  selector:
    matchLabels:
      label: vpa-label
  updatePolicy:
    updateMode: {...}

在 v1beta2 中,VerticalPodAutoscaler 會直接以部署為目標:

apiVersion: autoscaling.k8s.io/v1beta2 # different API version
kind: VerticalPodAutoscaler
metadata:
  name: vpa-name
spec:
  targetRef:
    apiVersion: "extensions/v1beta1"
    kind:       Deployment
    name:       deployment-name
  updatePolicy:
    updateMode: {...}

將 v1beta2 資訊清單儲存至名為 vpa-v1beta2.yaml 的檔案。

如果 updateMode 設為「關閉」,您可以執行 kubectl apply -f vpa-v1beta2.yaml。VerticalPodAutoscaler 會在切換期間保留建議。

如果您開啟了機制 (updateMode "Initial""Auto""Recreate"),請以多個步驟進行遷移:

  1. 使用新名稱和 updateMode: "Off" 來建立 v1beta2 VerticalPodAutoscaler 資訊清單:
apiVersion: autoscaling.k8s.io/v1beta2
kind: VerticalPodAutoscaler
metadata:
  name: vpa-name-new # Different name
spec:
  targetRef:
    apiVersion: "extensions/v1beta1"
    kind:       Deployment
    name:       deployment-name
  updatePolicy:
    updateMode: "Off" # Recommendation only mode.
  1. 將此資訊清單儲存為 vpa-v1beta1-off.yaml
  2. 建立新 VerticalPodAutoscaler 物件:

    kubectl apply -f vpa-v1beta1-off.yaml

  3. 等待系統填入建議,並將該建議與原始 VerticalPodAutoscaler 物件上的建議相比較。

  4. 如果您對建議比對結果感到滿意,請刪除 v1beta1 VerticalPodAutoscaler 物件:

    kubectl delete vpa-name

  5. 將新的 VerticalPodAutoscaler 更新為原始更新策略。 例如:updateMode: "Auto"

    apiVersion: autoscaling.k8s.io/v1beta2
    kind: VerticalPodAutoscaler
    metadata:
      name: vpa-name-new
    spec:
      targetRef:
        apiVersion: "extensions/v1beta1"
        kind:       Deployment
        name:       deployment-name
      updatePolicy:
        updateMode: "Auto" # Mode switched to auto
    
  6. 將此資訊清單儲存為 vpa-v1beta1-final.yaml

  7. 套用新設定 kubectl apply -f vpa-v1beta1-final.yaml

參照

這是 v1beta1 API 參考。您還可以查看 v1beta2 參考

VerticalPodAutoscaler v1beta1 autoscaling.k8s.io

欄位

TypeMeta

API 群組、版本和種類。

metadata

ObjectMeta

標準物件中繼資料

spec

VerticalPodAutoscalerSpec

期望的 VerticalPodAutoscaler 行為。

status

VerticalPodAutosclerStatus

最近一次觀察到的 VerticalPodAutoscaler 狀態。

VerticalPodAutoscalerSpec v1beta1 autoscaling.k8s.io

欄位
selector

LabelSelector

標籤查詢,會判斷 VerticalPodAutoscaler 控制的一組 Pod。

updatePolicy

PodUpdatePolicy

指定在啟動 Pod 時是否套用建議的更新,以及在 Pod 的生命週期內是否套用建議的更新。

resourcePolicy

PodResourcePolicy

指定有關如何針對個別容器調整 CPU 和記憶體要求的政策。

VerticalPodAutoscalerList v1beta1 autoscaling.k8s.io

欄位

TypeMeta

API 群組、版本和種類。

metadata

ObjectMeta

標準物件中繼資料

items

VerticalPodAutoscaler array

VerticalPodAutoscaler 物件清單。

PodUpdatePolicy v1beta1 autoscaling.k8s.io

欄位
updateMode

string

指定在啟動 Pod 時是否套用建議的更新,以及在 Pod 的生命週期內是否套用建議的更新。可能的值為「Off」(關)、「Initial」(初始)、「Recreate」(重新建立) 和「Auto」(自動)。

PodResourcePolicy v1beta1 autoscaling.k8s.io

欄位
containerPolicies

ContainerResourcePolicy array

個別容器的資源政策系列。

ContainerResourcePolicy v1beta1 autoscaling.k8s.io

欄位
containerName

string

政策套用的容器名稱。若未指定,該政策將作為預設政策使用。

mode

ContainerScalingMode

指定在啟動容器時是否套用建議的更新,以及在容器的生命週期內是否套用建議的更新。可能的值為「Off」(關閉) 和「Auto」(自動)。

minAllowed

ResourceList

指定容器允許的最小 CPU 要求和記憶體要求。

maxAllowed

ResourceList

指定容器允許的最大 CPU 要求和記憶體要求。

VerticalPodAutoscalerStatus v1beta1 autoscaling.k8s.io

欄位
recommendation

RecommendedPodResources

最近建議的 CPU 和記憶體要求。

conditions

VerticalPodAutoscalerCondition array

描述目前的 VerticalPodAutoscaler 狀態。

RecommendedPodResources v1beta1 autoscaling.k8s.io

欄位
containerRecommendation

RecommendedContainerResources array

個別容器的資源建議系列。

RecommendedContainerResources v1beta1 autoscaling.k8s.io

欄位
containerName

string

建議套用的容器名稱。

target

ResourceList

容器的建議 CPU 要求和記憶體要求。

lowerBound

ResourceList

容器的最小建議 CPU 要求和記憶體要求。此數量不足以使應用程式穩定。若使用較小的 CPU 和記憶體要求來執行,可能會對效能或可用性產生重大影響。

upperBound

ResourceList

容器的最大建議 CPU 要求和記憶體要求。高於這些值的 CPU 和記憶體要求可能會被浪費。

uncappedTarget

ResourceList

由自動調度資源功能所計算的最新資源建議,僅根據實際資源使用情況計算,並未考慮 ContainerResourcePolicy。如果實際資源使用率導致目標違反 ContainerResourcePolicy,則可能與受限的建議不同。此欄位僅用於指示狀態;並不會影響實際的資源分配。

VerticalPodAutoscalerCondition v1beta1 autoscaling.k8s.io

欄位
type

VerticalPodAutoscalerConditionType

已說明的條件類型。可能的值為「RecommendationProvided」、「LowConfidence」、「NoPodsMatched」和「FetchingHistory」。

status

ConditionStatus

條件的狀態。可能的值為「True」、「False」和「Unknown」。

lastTransitionTime

Time

條件最近一次從一個狀態轉變為另一個狀態的時間。

reason

string

上次從一種狀態轉換到另一種狀態的原因。

message

string

人類可讀的字串,提供有關從一個狀態到另一個狀態最後一次轉換的詳情。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Kubernetes Engine 說明文件