Упражнение. Развертывание масштабируемого объекта в кластере службы 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.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
В Cloud Shell создайте файл манифеста для развертывания Kubernetes с именем
scaled-object.yaml
с помощью командыtouch
:touch scaled-object.yaml
Откройте интегрированный редактор в Cloud Shell, введя
code .
Откройте файл
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
Проверьте количество работающих pod с помощью команды
kubectl get pods
.kubectl get pods
Выходные данные должны выглядеть примерно так, как показано в следующем примере выходных данных, при этом выполняется один модуль pod:
NAME READY STATUS RESTARTS AGE contoso-microservice-794d98b5-4flvg 1/1 Running 0 2m1s
Периодически выполняйте команду
kubectl get pods
, чтобы убедиться, что развертывание увеличивает или уменьшает количество подов в соответствии с объемом невыполненной работы.Заметка
Если у вас установлена утилита Linux 'watch', вы можете использовать команду
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
вы увидите, что количество контейнеров равно ноль. Это связано с тем, что KEDA удалила все запущенные реплики и теперь не осталось элементов для обработки.