您可以透過指令列或設定覆寫,擴充在 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 的 mart: replicaCountMax: 2 replicaCountMin: 1 watcher: replicaCountMax: 2 replicaCountMin: 1 connectAgent: replicaCountMax: 2 replicaCountMin: 1 這些 Deployment 會使用水平 Pod 自動配置器自動調度資源。將 Deployment 物件的 如要進一步瞭解如何設定屬性,請參閱「管理執行階段層元件」。 |
| 執行階段 Synchronizer UDCA |
ApigeeEnvironment (CRD) | 如要透過設定進行資源調度,請在覆寫檔案中,提高 udca、synchronizer 和/或 runtime 段落的 replicaCountMin 屬性值。例如:
synchronizer: replicaCountMax: 10 replicaCountMin: 1 runtime: replicaCountMax: 10 replicaCountMin: 1 udca: replicaCountMax: 10 replicaCountMin: 1 注意: 這些變更會套用至覆寫檔案中的「所有」環境。 如要自訂各環境的資源調度設定,請參閱下方的「進階設定」一節。 這些部署作業會使用水平 Pod 自動配置器自動調度資源。將 Deployment 物件的 如要進一步瞭解如何設定屬性,請參閱「管理執行階段層元件」。 |
進階設定
在某些情況下,您可能需要使用進階資源調度選項。情境範例包括:
- 為每個環境設定不同的資源調度選項。例如,env1 的
minReplica為 5,env2 的minReplica為 2。 - 為環境中的每個元件設定不同的資源調度選項。舉例來說,
udca元件的maxReplica為 5,synchronizer元件的maxReplica為 2。
以下範例說明如何使用 kubernetes patch 指令,變更 runtime 元件的 maxReplicas 屬性:
- 建立要與指令搭配使用的環境變數:
export ENV_NAME=my-environment-name
export ENV_RELEASE_NAME=$ENV_NAME # the Helm release name for the environmentexport APIGEE_NAMESPACE=apigee #the namespace where Apigee is deployedexport COMPONENT=runtime #can be udca or synchronizerexport MAX_REPLICAS=2export MIN_REPLICAS=1 - 套用修補程式。請注意,這個範例假設
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 - 確認變更:
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 Horizontal Pod Autoscaler (HPA) API 使用 hpaBehavior 欄位,設定目標服務的擴充和縮減行為。混合部署中的任何其他元件都不支援依據指標調度資源。
您可以根據下列指標調整資源調度:
| 指標 | 度量 | 注意事項 |
|---|---|---|
| serverMainTaskWaitTime | 在執行階段執行個體中,Proxy 要求處理政策的處理佇列平均等待時間 (以毫秒為單位)。 | 這項指標會評估 Proxy 要求流程中附加政策的複雜程度影響。 |
| serverNioTaskWaitTime | 在 HTTP 層,執行階段執行個體中 Proxy 要求的處理佇列平均等待時間 (以毫秒為單位)。 | 這項指標會評估 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 屬性設為 true 或 false,啟用或停用依指標調整資源配置功能。更新 apigee-telemetry 圖表,將變更套用至 customAutoscaling.enabled 屬性。例如:
helm upgrade telemetry apigee-telemetry/ \ --namespace APIGEE_NAMESPACE \ --atomic \ -f overrides.yaml
設定更積極的資源調度
提高擴充政策的 percent 和 pods 值,會使擴充政策更積極。同樣地,提高 scaleDown 中的 percent 和 pods 值,會導致縮減政策更積極。例如:
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 增加至 5,scaleUp.percent.value 增加至 30,scaleUp.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 減少至 10,scaleDown.pods.value 減少至 1,scaleUp.stablizationWindowSeconds 則增加至 180。
如要進一步瞭解如何使用 hpaBehavior 欄位,根據指標進行資源調度,請參閱「
資源調度政策」。
疑難排解
本節說明設定資源調度及自動調度資源時,可能遇到的常見錯誤,以及疑難排解方法。
HPA 顯示指標值為 unknown
如果指標式資源調度功能無法運作,且 HPA 顯示指標值為 unknown,請使用下列指令檢查 HPA 輸出內容:
kubectl describe hpa HPA_NAME
執行指令時,請將 HPA_NAME 替換為要查看的 HPA 名稱。
輸出內容會顯示服務的 CPU 目標和使用率,表示在沒有指標式資源調度功能的情況下,CPU 資源調度功能仍可運作。如要瞭解使用多個參數的 HPA 行為,請參閱「依據多項指標調度資源」。