[K8S] 設定 Keda 依據 Azure storage queue 的大小,來調整 deployment replica 數量
最近在改同事的程式,
看要怎麼用 Keda 來自動依據 Azure Storage Queue 的大小,
來調整 K8S pod replica 的數量,
就來簡單記錄一下吧~
下面是一個 K8S deployment,
我在裡面多加了一個環境變數 STORAGE_ACCOUNT_CONN_STR
,
用來儲存存取 Storage account 需要用到的 connection string:
apiVersion: apps/v1 kind: Deployment metadata: name: adapter labels: app: adapter namespace: {{ .Release.Namespace }} spec: replicas: 1 selector: matchLabels: app: adapter template: metadata: labels: app: adapter spec: containers: - name: adapter image: {{ .Values.appAcr.prefix }}/{{ .Values.images.agent }} env: - name: STORAGE_ACCOUNT_CONN_STR value: "{{ .Values.storageAccount.connString }}" command: - bash args: - /entry_point.sh
有了這個環境變數,Keda 的 ScaledObject
就可以取得 storage queue 的資訊,
進而根據 storage queue 的大小,來調整 replica 了。
- scaleTargetRef: 指定要調整的是 adapter 這個 deployment
- minReplicaCount/maxReplicaCount: 可伸縮的最小與最大 replica 數量
- triggers: 觸發的方式
- type: azure-queue 代表 Azure storage queue
- queueName: queue 的名稱
- queueLength: queue 在多大時要擴展
- connectionFromEnv: 要從哪個環境變數中取得 storage account connection string
- accountName: storage account 的名稱
- cloud: 這邊用 Private 是因為這是 Azure Stack Hub 的環境
- endpointSuffix: 在 private cloud 時需要指定 queue 的 url 後綴
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: adapter-sco namespace: {{ .Release.Namespace }} spec: scaleTargetRef: name: adapter pollingInterval: 30 cooldownPeriod: 300 minReplicaCount: 1 maxReplicaCount: 6 triggers: - type: azure-queue metadata: queueName: "{{ .Values.storageAccount.queueName }}" queueLength: "50" connectionFromEnv: STORAGE_ACCOUNT_CONN_STR accountName: "{{ .Values.storageAccount.name }}" cloud: Private endpointSuffix: "queue.{{ .Values.ashFqdn }}" - type: cpu metadata: type: Utilization value: "80"
這樣子就設定完成囉~
參考資料:
(本頁面已被瀏覽過 180 次)