练习 - 将缩放对象部署到 Azure Kubernetes 服务群集中
在本练习中,你要将缩放对象自定义资源定义 (CRD) 部署到 AKS 群集。 缩放程序对象包含将已部署的应用程序连接到 KEDA 的触发器。 部署到 AKS 后,KEDA 将监视 Redis 列表,在列表长度超出定义的阈值时进行纵向扩展,在列表长度低于定义的阈值时进行纵向缩减。
ScaledObject
清单概述
scaleTargetRef
:本部分介绍 KEDA 观察到的工作负载。scaleTargetRef: apiVersion: apps/v1 # Optional. Default: apps/v1 kind: deployment # Optional. Default: Deployment name: contoso-microservice # Mandatory. Must be in the same namespace as the ScaledObject envSourceContainerName: contoso-microservice # Optional. Default: .spec.template.spec.containers[0]
minReplicaCount
和maxReplicaCount
:这些属性决定了 KEDA 用于缩放的副本的范围。 在本例中,你指示 KEDA 从最小值零扩展到最大值 20。minReplicaCount: 0 # Optional. Default: 0 maxReplicaCount: 20 # Optional. Default: 100
注意
minReplicaCount: 0
将部署默认副本计数从 1 降到 0。 如果服务处于空闲状态且未处理任何事件,则会执行此操作。 在本例中,如果 Redis 列表中没有项目,并且服务保持空闲,则 KEDA 将缩放为零。advanced
:本部分与 KEDA 的高级自定义相关。restoreToOriginalReplicaCount
指示 KEDA 在纵向扩展事件后将副本计数返回到原始值。 在本例中,将它设置为false
,这会导致纵向缩减为minReplicaCount
值零。restoreToOriginalReplicaCount: 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
:本部分使用scalers
来检测是否应该激活或停用对象,并为特定事件源提供自定义指标。listLength
指标会指示 KEDA 在列表中有 10 个项时进行纵向扩展。triggers: - type: redis metadata: # address: # Format must be host:port passwordFromEnv: REDIS_KEY listName: keda # Required listLength: "10" # Required enableTLS: "false" # optional databaseIndex: "0" # optional hostFromEnv: REDIS_HOST portFromEnv: REDIS_PORT
有关详细信息,请参阅 KEDA 缩放程序。
创建 ScaledObject
清单
在 Cloud Shell 中,使用
touch
命令为名为scaled-object.yaml
的 Kubernetes 部署创建一个清单文件:touch scaled-object.yaml
输入
code .
,在 Cloud Shell 中打开集成编辑器打开
scaled-object.yaml
文件,并添加 YAML 的以下代码部分:apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: scaled-contoso spec: scaleTargetRef: apiVersion: apps/v1 # Optional. Default: apps/v1 kind: deployment # Optional. Default: Deployment name: contoso-microservice # Mandatory. Must be in the same namespace as the ScaledObject envSourceContainerName: contoso-microservice # Optional. Default: .spec.template.spec.containers[0] pollingInterval: 30 # Optional. Default: 30 seconds cooldownPeriod: 120 # Optional. Default: 300 seconds minReplicaCount: 0 # Optional. Default: 0 maxReplicaCount: 20 # Optional. Default: 100 advanced: # Optional. Section to specify advanced options restoreToOriginalReplicaCount: 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: - type: redis metadata: # address: # Format must be host:port passwordFromEnv: REDIS_KEY listName: keda # Required listLength: "10" # Required enableTLS: "false" # optional databaseIndex: "0" # optional hostFromEnv: REDIS_HOST portFromEnv: REDIS_PORT
保存清单文件(CTRL + S),并关闭编辑器(CTRL + Q)。
应用清单
使用
kubectl apply
命令将清单部署到群集:kubectl apply -f ./scaled-object.yaml
输出应类似于以下示例输出:
scaledobject.keda.sh/scaled-contoso created
使用
kubectl get pods
命令检查正在运行的 Pod 的数量:kubectl get pods
输出应类似于以下示例,其中一个 Pod 正在运行:
NAME READY STATUS RESTARTS AGE contoso-microservice-794d98b5-4flvg 1/1 Running 0 2m1s
定期运行
kubectl get pods
命令,以验证部署是否根据积压的工作来缩放 Pod 的数量。注意
如果安装了 Linux 实用程序监视,可以运行
watch kubectl get pods
命令查看 Pod 的规模以处理 Redis 列表项。 如果没有,可以使用kubectl get pods -w
命令。输出应类似于以下示例输出:
NAME READY STATUS RESTARTS AGE contoso-microservice-794d98b5-4flvg 1/1 Running 0 3m contoso-microservice-794d98b5-4jpxp 1/1 Running 0 3m contoso-microservice-794d98b5-4lw7b 1/1 Running 0 2m15s contoso-microservice-794d98b5-5fqj5 1/1 Running 0 3m contoso-microservice-794d98b5-5kdbw 1/1 Running 0 2m15s
处理完所有项且 cooldownPeriod
过期后,你将看到 Pod 数为零。 这是因为 KEDA 删除了所有正在运行的副本,并且没有要处理的项。