調整及自動調整執行階段服務資源

您可以透過指令列或設定覆寫,調整在 Kubernetes 中執行的大部分服務。您可以在 overrides.yaml 檔案中設定 Apigee Hybrid 執行階段服務的資源調度參數。

服務 實作方式 資源調度
Cassandra ApigeeDatastore (CRD) 請參閱「調整 Cassandra 資源」。
Ingress/LoadBalancer 部署作業問題 Cloud Service Mesh 使用水平 Pod 自動調度資源 (HPA)。
Logger DaemonSet DaemonSet 會管理所有節點的 Pod 備份,因此在您縮放 Pod 時,這些備份也會縮放。
MART
Apigee Connect
Watcher
ApigeeOrganization (CRD)

如要透過設定進行調整,請針對 martwatcher 和/或 connectAgent 節,提高部署的 replicaCountMin 設定屬性值。例如:

mart:
 replicaCountMax: 2
 replicaCountMin: 1

watcher:
 replicaCountMax: 2
 replicaCountMin: 1

connectAgent:
 replicaCountMax: 2
 replicaCountMin: 1

這些部署會使用水平 Pod 自動配置器進行自動調度。將 Deployment 物件的 targetCPUUtilizationPercentage 屬性設為上限,當值超過這個值時,Kubernetes 會將 Pod 數量增加到 replicaCountMax 的值。

如要進一步瞭解如何設定設定屬性,請參閱「管理執行階段平面元件」。

執行階段
同步器
UDCA
ApigeeEnvironment (CRD) 如要透過設定進行縮放,請在覆寫檔案中,為 udcasynchronizer 和/或 runtime 段落增加 replicaCountMin 屬性的值。例如:
synchronizer:
 replicaCountMax: 10
 replicaCountMin: 1

runtime:
 replicaCountMax: 10
 replicaCountMin: 1

udca:
 replicaCountMax: 10
 replicaCountMin: 1

注意: 這些變更會套用至覆寫檔案中的所有環境。 如果您想為每個環境自訂調整,請參閱下方的「進階設定」。

這些部署作業會使用水平 Pod 自動配置器進行自動調度。將 Deployment 物件的 targetCPUUtilizationPercentage 屬性設為上限值,當值超過這個值時,Kubernetes 會將 Pod 數量增加到 replicaCountMax 的值。

如要進一步瞭解如何設定設定屬性,請參閱「管理執行階段平面元件」。

進階設定

在某些情況下,您可能需要使用進階縮放選項。情境範例包括:

  • 為每個環境設定不同的縮放選項。例如,env1 的 minReplica 為 5,env2 的 minReplica 為 2。
  • 為環境中的每個元件設定不同的縮放選項。舉例來說,udca 元件的 maxReplica 為 5,synchronizer 元件的 maxReplica 為 2。

以下範例說明如何使用 kubernetes patch 指令變更 runtime 元件的 maxReplicas 屬性:

  1. 建立要搭配指令使用的環境變數:
    export ENV=my-environment-name
    export NAMESPACE=apigee  #the namespace where apigee is deployed
    export COMPONENT=runtime #can be udca or synchronizer
    export MAX_REPLICAS=2
    export MIN_REPLICAS=1
  2. 套用修補程式。請注意,這個範例假設 kubectl 位於 PATH 中:
    kubectl patch apigeeenvironment -n $NAMESPACE \
      $(kubectl get apigeeenvironments -n $NAMESPACE -o jsonpath='{.items[?(@.spec.name == "'$ENV'" )]..metadata.name}') \
      --patch "$(echo -e "spec:\n  components:\n    $COMPONENT:\n      autoScaler:\n        maxReplicas: $MAX_REPLICAS\n        minReplicas: $MIN_REPLICAS")" \
      --type merge
  3. 驗證變更:
    kubectl get hpa -n $NAMESPACE

以環境為依據的資源調度

根據預設,資源配置會在機構層級說明。您可以在 overrides.yaml 檔案中指定環境專屬縮放比例,藉此覆寫預設設定,如以下範例所示:

envs:
  # Apigee environment name
  - name: test
    components:
    # Environment-specific scaling override
    # Otherwise, uses scaling defined at the respective root component
     runtime:
      replicaCountMin: 2
      replicaCountMax: 20
  

以指標為依據的調度

透過指標為基礎的調度功能,執行階段可以使用 CPU 和應用程式指標來調度 apigee-runtime Pod。Kubernetes 水平 Pod 自動配置器 (HPA) API 會使用 hpaBehavior 欄位來設定目標服務的縮放和縮減行為。混合式部署中其他元件無法使用以指標為依據的調整功能。

您可以根據下列指標調整資源調度:

指標 測量 注意事項
serverNioTaskWaitTime 在 HTTP 層級,代理要求在執行階段執行個體中處理佇列的平均等待時間 (以毫秒為單位)。 這個指標可評估 Proxy 要求和回應的數量和酬載大小。
serverMainTaskWaitTime 代理要求處理政策在執行階段執行個體中處理佇列的平均等待時間 (以毫秒為單位)。 這項指標會評估附加至 Proxy 要求流程的政策複雜度所造成的影響。

以下範例取自 overrides.yaml 中的 runtime 節,說明在混合式實作中,縮放 apigee-runtime Pod 的標準參數 (和允許範圍):

hpaMetrics:
      serverMainTaskWaitTime: 400M (300M to 450M)
      serverNioTaskWaitTime: 400M (300M to 450M)
      targetCPUUtilizationPercentage: 75
    hpaBehavior:
      scaleDown:
        percent:
          periodSeconds: 60 (30 - 180)
          value: 20 (5 - 50)
        pods:
          periodSeconds: 60 (30 - 180)
          value: 2 (1 - 15)
        selectPolicy: Min
        stabilizationWindowSeconds: 120 (60 - 300)
      scaleUp:
        percent:
          periodSeconds: 60 (30 - 120)
          value: 20 (5 - 100)
        pods:
          periodSeconds: 60 (30 - 120)
          value: 4 (2 - 15)
        selectPolicy: Max
        stabilizationWindowSeconds: 30 (30 - 120)
  

設定更積極的資源調度

提高擴大政策的 percentpods 值,可讓擴大政策更積極。同樣地,如果在 scaleDown 中增加 percentpods 值,就會導致縮減規模的政策過於激進。例如:

hpaMetrics:
    serverMainTaskWaitTime: 400M
    serverNioTaskWaitTime: 400M
    targetCPUUtilizationPercentage: 75
  hpaBehavior:
    scaleDown:
      percent:
        periodSeconds: 60
        value: 20
      pods:
        periodSeconds: 60
        value: 4
      selectPolicy: Min
      stabilizationWindowSeconds: 120
    scaleUp:
      percent:
        periodSeconds: 60
        value: 30
      pods:
        periodSeconds: 60
        value: 5
      selectPolicy: Max
      stabilizationWindowSeconds: 30

在上述範例中,scaleDown.pods.value 會增加至 5scaleUp.percent.value 會增加至 30scaleUp.pods.value 則會增加至 5

設定較不積極的資源調度

您也可以調降 hpaBehavior 設定值,以便實施較溫和的縮放政策。例如:

hpaMetrics:
    serverMainTaskWaitTime: 400M
    serverNioTaskWaitTime: 400M
    targetCPUUtilizationPercentage: 75
  hpaBehavior:
    scaleDown:
      percent:
        periodSeconds: 60
        value: 10
      pods:
        periodSeconds: 60
        value: 1
      selectPolicy: Min
      stabilizationWindowSeconds: 180
    scaleUp:
      percent:
        periodSeconds: 60
        value: 20
      pods:
        periodSeconds: 60
        value: 4
      selectPolicy: Max
      stabilizationWindowSeconds: 30

在上例中,scaleDown.percent.value 會減少至 10scaleDown.pods.value 會減少至 1,而 scaleUp.stablizationWindowSeconds 會增加至 180

如要進一步瞭解如何使用 hpaBehavior 欄位以指標為基礎執行資源調度,請參閱 資源調度政策

停用以指標為依據的調整資源配置功能

雖然系統預設會啟用以指標為依據的資源調度功能,且無法完全停用,但您可以將指標閾值設為不會觸發以指標為依據的資源調度功能的等級。產生的縮放行為會與 CPU 型縮放相同。舉例來說,您可以使用下列設定,避免觸發以指標為依據的縮放功能:

hpaMetrics:
      serverMainTaskWaitTime: 4000M
      serverNioTaskWaitTime: 4000M
      targetCPUUtilizationPercentage: 75
    hpaBehavior:
      scaleDown:
        percent:
          periodSeconds: 60
          value: 10
        pods:
          periodSeconds: 60
          value: 1
        selectPolicy: Min
        stabilizationWindowSeconds: 180
      scaleUp:
        percent:
          periodSeconds: 60
          value: 20
        pods:
          periodSeconds: 60
          value: 4
        selectPolicy: Max
        stabilizationWindowSeconds: 30

疑難排解

本節將說明設定調整和自動調整功能時可能遇到的常見錯誤,以及如何排解這些錯誤。

HPA 會顯示指標值 unknown

如果以指標為依據的資源調度功能無法運作,且 HPA 顯示指標值為 unknown,請使用下列指令檢查 HPA 輸出內容:

kubectl describe hpa HPA_NAME

執行指令時,請將 HPA_NAME 替換為要查看的水平 Pod 自動配置器名稱。

輸出結果會顯示服務的 CPU 目標和使用率,表示在沒有以指標為依據的調整功能時,CPU 調整功能會運作。如要瞭解使用多個參數的 HPA 行為,請參閱「根據多個指標進行調度」。