使用 KEDA 調整

已完成

Kube 事件導向自動調整

Kube 事件驅動自動調整 (KEDA) 是單一用途和輕量型元件,可簡化應用程式自動調整。 您可以將 KEDA 新增至任何 Kube 叢集,並將其與標準 Kube 元件搭配使用,例如水平 Pod 自動調整程式 (HPA) 或叢集自動調整程式,以擴充其功能。 透過 KEDA,您可以將目標設為想要利用事件驅動縮放的特定應用程式,並允許其他應用程式使用不同的縮放方法。 KEDA 是彈性且安全的選項,可與任意數量的 Kube 應用程式或架構一起執行。

主要功能和特徵

  • 建置具有 [調整至零] 功能的可持續且符合成本效益的應用程式
  • 使用 KEDA 調整程式調整應用程式工作負載以符合需求
  • 使用 ScaledObjects 自動調整應用程式
  • 使用 ScaledJobs 自動調整作業
  • 藉由將自動調整和驗證與工作負載分離,以使用生產等級的安全性
  • 自備外部調整程式以使用量身打造的自動調整設定

架構

KEDA 提供兩個主要元件:

  • KEDA 運算子:可讓終端使用者在支援 Kube Deployments、Jobs、StatefulSets 或任何定義 /scale 子資源的客戶資源情況下,將工作負載從零調整為 N 執行個體。
  • 計量伺服器:會將外部計量公開給 HPA (例如 Kafka 主題中的訊息或 Azure 事件中樞中的事件),以驅動自動調整動作。 由於上游限制,KEDA 計量伺服器必須是叢集中唯一安裝的計量配接器。

下圖顯示 KEDA 如何與 Kube HPA、外部事件來源和 Kube 的 API 伺服器整合,以提供自動調整功能:

描述 Kubernetes 中 KEDA 架構的圖表。

提示

如需詳細資訊,請參閱 KEDA 官方文件

事件來源與調整程式

KEDA 調整程式可以偵測應該啟用或停用部署,並摘要特定事件來源的自訂計量。 部署與 StatefulSet 是使用 KEDA 調整工作負載最常見的方式。 您也可以調整實作 /scale 子資源的自訂資源。 您可定義您希望 KEDA 根據調整觸發程序進行調整的 Kube 部署或 StatefulSet。 KEDA 會監視這些服務,並根據發生的事件自動調整它們。

在幕後,KEDA 會監視事件來源,並將該資料摘要至 Kube 和 HPA,以加速資源縮放。 資源的每個複本都會主動地從事件來源提取項目。 透過 KEDA 與 Deployments/StatefulSets,您可以根據事件進行調整,同時透過事件來源來保留豐富的連線和處理語意 (例如,依序處理、重試、信件無效化、檢查點檢查)。

調整物件規格

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: {scaled-object-name}
spec:
  scaleTargetRef:
    apiVersion:    {api-version-of-target-resource}  # Optional. Default: apps/v1
    kind:          {kind-of-target-resource}         # Optional. Default: Deployment
    name:          {name-of-target-resource}         # Mandatory. Must be in the same namespace as the ScaledObject
    envSourceContainerName: {container-name}         # Optional. Default: .spec.template.spec.containers[0]
  pollingInterval: 30                                # Optional. Default: 30 seconds
  cooldownPeriod:  300                               # Optional. Default: 300 seconds
  minReplicaCount: 0                                 # Optional. Default: 0
  maxReplicaCount: 100                               # Optional. Default: 100
  advanced:                                          # Optional. Section to specify advanced options
    restoreToOriginalReplicaCount: true/false        # Optional. Default: false
    horizontalPodAutoscalerConfig:                   # Optional. Section to specify HPA related options
      behavior:                                      # Optional. Use to modify HPA's scaling behavior
        scaleDown:
          stabilizationWindowSeconds: 300
          policies:
          - type: Percent
            value: 100
            periodSeconds: 15
  triggers:
  # {list of triggers to activate scaling of the target resource}

已調整的作業規格

作為將事件驅動程式代碼縮放為部署的替代方案,您也可以執行程式碼,並將程式碼縮放為 Kube 作業。 如果您需要處理長時間執行的執行作業,這會是考慮此選項的主要原因。 系統會針對每個偵測到的事件,排程其自己的 Kube 作業,而不是在部署內處理多個事件。 此方法可讓您隔離處理每個事件,並根據佇列中的事件數目來縮放並存執行次數。

apiVersion: keda.sh/v1alpha1
kind: ScaledJob
metadata:
  name: {scaled-job-name}
spec:
  jobTargetRef:
    parallelism: 1                            # [max number of desired pods](https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#controlling-parallelism)
    completions: 1                            # [desired number of successfully finished pods](https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#controlling-parallelism)
    activeDeadlineSeconds: 600                #  Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer
    backoffLimit: 6                           # Specifies the number of retries before marking this job failed. Defaults to 6
    template:
      # describes the [job template](https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/)
  pollingInterval: 30                         # Optional. Default: 30 seconds
  successfulJobsHistoryLimit: 5               # Optional. Default: 100. How many completed jobs should be kept.
  failedJobsHistoryLimit: 5                   # Optional. Default: 100. How many failed jobs should be kept.
  envSourceContainerName: {container-name}    # Optional. Default: .spec.JobTargetRef.template.spec.containers[0]
  maxReplicaCount: 100                        # Optional. Default: 100
  scalingStrategy:
    strategy: "custom"                        # Optional. Default: default. Which Scaling Strategy to use. 
    customScalingQueueLengthDeduction: 1      # Optional. A parameter to optimize custom ScalingStrategy.
    customScalingRunningJobPercentage: "0.5"  # Optional. A parameter to optimize custom ScalingStrategy.
  triggers:
  # {list of triggers to create jobs}

檢定您的知識

1.

KEDA 在 Kubernetes 中扮演哪些重要角色?

2.

KEDA 可以調整哪種類型的工作負載?

3.

使用調整的作業的主要原因是什麼?