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