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

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

服務 導入方式 資源調度
Cassandra ApigeeDatastore (CRD) 請參閱「調度 Cassandra 資源」。
Ingress/LoadBalancer 部署作業問題 Cloud Service Mesh 使用水平 Pod 自動調度資源 (HPA)。
記錄器 DaemonSet DaemonSet 會管理所有節點上的 Pod 副本,因此當您擴充 Pod 時,DaemonSet 也會擴充。
MART
Apigee Connect
Watcher
ApigeeOrganization (CRD)

如要透過設定進行調整,請增加 Deployment 的 replicaCountMin 設定屬性值,適用於 martwatcher 和/或 connectAgent 節。例如:

mart:
  replicaCountMax: 2
  replicaCountMin: 1

watcher:
  replicaCountMax: 2
  replicaCountMin: 1

connectAgent:
  replicaCountMax: 2
  replicaCountMin: 1

這些 Deployment 會使用水平 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_NAME=my-environment-name
    export ENV_RELEASE_NAME=$ENV_NAME # the Helm release name for the environment
    export APIGEE_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 $APIGEE_NAMESPACE \
      $(kubectl get apigeeenvironments -n $APIGEE_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 $APIGEE_NAMESPACE
    

以環境為基礎的資源調度

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

envs:
  # Apigee environment name
  - name: ENV_NAME>
    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 欄位,設定目標服務的擴充和縮減行為。混合式部署中的任何其他元件,都無法使用以指標為準的自動調度功能。

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

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

以下範例來自 overrides.yaml 中的 runtime 節,說明混合式實作中用於調整 apigee-runtime Pod 大小的標準參數 (和允許的範圍):

runtime:
  # the following parameters configure metrics-based scaling
  hpaMetrics:
    serverMainTaskWaitTime: 400M # (range: 300M to 450M)
    serverNioTaskWaitTime: 400M # (range: 300M to 450M)
    targetCPUUtilizationPercentage: 75
  hpaBehavior:
    scaleDown:
      percent:
        periodSeconds: 60 # (range: 30 - 180)
        value: 20 # (range: 5 - 50)
      pods:
        periodSeconds: 60 # (range: 30 - 180)
        value: 2 # (range: 1 - 15)
      selectPolicy: Min
      stabilizationWindowSeconds: 120 # (range: 60 - 300)
    scaleUp:
      percent:
        periodSeconds: 60 # (range: 30 - 120)
        value: 20 # (range: 5 - 100)
      pods:
        periodSeconds: 60 # (range: 30 - 120)
        value: 4 # (range: 2 - 15)
      selectPolicy: Max
      stabilizationWindowSeconds: 30 # (range:  30 - 120)
  

如要套用這些設定,請更新每個環境的 apigee-runtime 圖表。例如:

helm upgrade $ENV_RELEASE_NAME apigee-runtime/ \
  --namespace APIGEE_NAMESPACE \
  --atomic \
  --set env=$ENV_NAME \
  -f overrides.yaml

啟用或停用以指標為準的資源調度功能

系統預設會啟用以指標為準的資源調度功能。如要啟用或停用以指標為準的資源調度,請將 customAutoscaling.enabled 屬性設為 truefalse。更新 apigee-telemetry 圖表,即可將變更套用至 customAutoscaling.enabled 屬性。例如:

helm upgrade telemetry apigee-telemetry/ \
  --namespace APIGEE_NAMESPACE \
  --atomic \
  -f overrides.yaml

設定更積極的資源調度方式

提高擴充政策的 percentpods 值,會產生更積極的擴充政策。同樣地,增加 scaleDown 中的 percentpods 值,會導致積極的縮減政策。例如:

runtime:
  # ...
  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 設定值,實施較不激進的擴大和縮減政策。例如:

runtime:
  # ...
  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 減少至 1scaleUp.stablizationWindowSeconds 則增加至 180

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

疑難排解

本節說明如何排解設定縮放和自動縮放功能時可能遇到的常見錯誤。

HPA 會顯示指標值的 unknown

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

kubectl describe hpa HPA_NAME

執行指令時,請將 HPA_NAME 替換為要查看的 HPA 名稱。

輸出內容會顯示服務的 CPU 目標和使用率,指出在沒有以指標為準的調度機制時,CPU 調度機制會正常運作。如要瞭解 HPA 使用多個參數時的行為,請參閱「依據多個指標進行資源調度」。