Esercizio - Distribuire un oggetto scale nel cluster del servizio Azure Kubernetes
In questo esercizio, si distribuirà una definizione di risorsa personalizzata (CRD) dell'oggetto scale nel cluster del servizio Azure Kubernetes. L'oggetto scale contiene il trigger che connette l'applicazione distribuita a KEDA. Dopo la distribuzione nel servizio Azure Kubernetes, KEDA monitora l'elenco Redis e aumenta le prestazioni, se la lunghezza dell'elenco supera la soglia definita o le riduce, se la lunghezza dell'elenco scende al di sotto della soglia definita.
ScaledObject
panoramica del manifesto
scaleTargetRef
: Questa sezione descrive il carico di lavoro osservato da 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
emaxReplicaCount
: Questi attributi determinano l'intervallo di repliche usate da KEDA per il ridimensionamento. In questo caso, si indica a KEDA di ridimensionare da un minimo di zero a un massimo di 20.minReplicaCount: 0 # Optional. Default: 0 maxReplicaCount: 20 # Optional. Default: 100
Nota
minReplicaCount: 0
porta il numero di repliche predefinito della distribuzione da uno a zero. Ciò si verifica se il servizio è inattivo e non elabora eventi. In questo caso, se sono presenti elementi nell'elenco Redis e il servizio rimane inattivo, KEDA si ridimensiona a zero.advanced
: Questa sezione è correlata alle personalizzazioni avanzate di KEDA.restoreToOriginalReplicaCount
indica a KEDA di restituire il conteggio delle repliche al valore originale dopo gli eventi di aumento delle prestazioni. In questo caso, lo si imposta sufalse
, che causa una riduzione delminReplicaCount
valore pari a zero.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
: Questa sezione usascalers
per rilevare se l'oggetto deve essere attivato o disattivato e per fornire metriche personalizzate per origini evento specifiche. La metricalistLength
specifica a KEDA di aumentare le prestazioni quando sono presenti dieci elementi nell'elenco.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
Per altre informazioni, vedere Utilità di scalabilità automatica KEDA.
Creare il manifesto ScaledObject
In Cloud Shell creare un file manifesto per la distribuzione Kubernetes con nome
scaled-object.yaml
usando il comandotouch
:touch scaled-object.yaml
Aprire l'editor integrato in Cloud Shell immettendo
code .
Aprire il file
scaled-object.yaml
e aggiungere la sezione di codice YAML seguente: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
Salvare il file manifesto (CTRL + S) e chiudere l'editor(CTRL + Q).
Applicare il manifesto
Distribuire il manifesto nel cluster usando il comando
kubectl apply
:kubectl apply -f ./scaled-object.yaml
L'output dovrebbe essere simile all'esempio di output seguente:
scaledobject.keda.sh/scaled-contoso created
Controllare il numero di pod in esecuzione usando il comando
kubectl get pods
:kubectl get pods
L'output dovrebbe essere simile all'output di esempio seguente, con un pod in esecuzione:
NAME READY STATUS RESTARTS AGE contoso-microservice-794d98b5-4flvg 1/1 Running 0 2m1s
Eseguire periodicamente il comando
kubectl get pods
per verificare che la distribuzione ridimensioni il numero di pod in base al backlog di lavoro.Nota
Se è installata l'utilità Linux Watch, è possibile usare il comando
watch kubectl get pods
per visualizzare la scalabilità dei pod per elaborare gli elementi elenco Redis. In caso contrario, è possibile usare il comandokubectl get pods -w
.L'output dovrebbe essere simile all'esempio di output seguente:
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
Dopo l'elaborazione di tutti gli elementi e la scadenza di cooldownPeriod
, si noterà che il numero di pod è zero. Ciò avviene perché KEDA ha rimosso tutte le repliche in esecuzione e non ha più elementi da elaborare.