Упражнение. Развертывание масштабируемого объекта в кластере Служба Azure Kubernetes

Завершено

В этом упражнении вы развернете определение пользовательского ресурса масштабируемого объекта (CRD) в кластере AKS. Объект scaler содержит триггер, который подключает развернутое приложение к 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принимает число реплика развертывания по умолчанию от одного до нуля. Это происходит, если служба неактивна и не обрабатывает никаких событий. В этом случае, если в списке Redis отсутствуют элементы, а служба остается бездействуемой, KEDA масштабируется до нуля.

  • advanced: этот раздел связан с расширенными настройками KEDA. 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 увеличить масштаб, если в списке есть десять элементов.

      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 Scalers.

Создание манифеста ScaledObject

  1. В Cloud Shell создайте файл манифеста для развертывания Kubernetes, вызываемого scaled-object.yaml touch с помощью команды:

    touch scaled-object.yaml
    
  2. Откройте интегрированный редактор в Cloud Shell, введя code .

  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. Проверьте количество выполняемых модулей pod с помощью kubectl get pods команды:

    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 удалил все запущенные реплика и не содержит элементов, которые не остались для обработки.