练习 - 将缩放对象部署到 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]
    
  • minReplicaCountmaxReplicaCount:这些属性决定了 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 清单

  1. 在 Cloud Shell 中,使用 touch 命令为名为 scaled-object.yaml 的 Kubernetes 部署创建一个清单文件:

    touch scaled-object.yaml
    
  2. 输入 code .,在 Cloud Shell 中打开集成编辑器

  3. 打开 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
    
  4. 保存清单文件(CTRL + S),并关闭编辑器(CTRL + Q)。

应用清单

  1. 使用 kubectl apply 命令将清单部署到群集:

    kubectl apply -f ./scaled-object.yaml
    

    输出应类似于以下示例输出:

    scaledobject.keda.sh/scaled-contoso created
    
  2. 使用 kubectl get pods 命令检查正在运行的 Pod 的数量:

    kubectl get pods
    

    输出应类似于以下示例,其中一个 Pod 正在运行:

    NAME                                  READY   STATUS    RESTARTS   AGE
    contoso-microservice-794d98b5-4flvg   1/1     Running   0          2m1s
    
  3. 定期运行 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 删除了所有正在运行的副本,并且没有要处理的项。