Ejercicio: Implementación de un objeto de escala en el clúster de Azure Kubernetes Service
En este ejercicio, implementará una definición de recursos personalizados (CRD) de objeto de escala en el clúster de AKS. El objeto de escala contiene el desencadenador que conecta la aplicación implementada a KEDA. Después de la implementación en AKS, KEDA supervisa la lista de Redis y realiza un escalado vertical si la longitud de la lista supera el umbral definido y una reducción vertical si la longitud de la lista está por debajo.
Información general del manifiesto de ScaledObject
scaleTargetRef
: en esta sección se describe qué carga de trabajo observa 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
ymaxReplicaCount
: estos atributos determinan el intervalo de réplicas que KEDA usa para el escalado. En este caso, se indica a KEDA que modifique la escala desde un mínimo de 0 a un máximo de 20.minReplicaCount: 0 # Optional. Default: 0 maxReplicaCount: 20 # Optional. Default: 100
Nota:
minReplicaCount: 0
toma el recuento predeterminado de réplicas de implementación de 1 a 0. Esto se produce si el servicio está inactivo y no procesa ningún evento. En este caso, si no hay elementos en la lista de Redis y el servicio permanece inactivo, KEDA se escala a 0.advanced
: esta sección está relacionada con personalizaciones avanzadas de KEDA.restoreToOriginalReplicaCount
indica a KEDA que devuelva el recuento de réplicas al valor original después de los eventos de escalado vertical. En este caso, se establece enfalse
, lo que hace que se reduzca verticalmente al valorminReplicaCount
de cero.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
: en esta sección se usascalers
para detectar si el objeto se debe activar o desactivar, y se proporcionan métricas personalizadas para orígenes de eventos específico. La métricalistLength
indica a KEDA que realice un escalado vertical cuando haya 10 elementos en la lista.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
Para más información, vea Modificadores de escala de KEDA.
Creación del manifiesto de ScaledObject
Cree un archivo de manifiesto en Cloud Shell para la implementación de Kubernetes denominado
scaled-object.yaml
mediante el comandotouch
:touch scaled-object.yaml
Abra el editor integrado en Cloud Shell escribiendo
code .
.Abra el archivo
scaled-object.yaml
y agregue la siguiente sección de código de 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
Guarde el archivo de manifiesto (CTRL + S) y cierre el editor(CTRL + Q).
Aplicación del manifiesto
Implemente el manifiesto en el clúster mediante el comando
kubectl apply
:kubectl apply -f ./scaled-object.yaml
El resultado debería ser similar al ejemplo siguiente:
scaledobject.keda.sh/scaled-contoso created
Compruebe el número de pods en ejecución usando el comando
kubectl get pods
:kubectl get pods
La salida debería tener un aspecto similar a la del ejemplo siguiente, con un pod en ejecución:
NAME READY STATUS RESTARTS AGE contoso-microservice-794d98b5-4flvg 1/1 Running 0 2m1s
Ejecute periódicamente el comando
kubectl get pods
para comprobar que la implementación escala el número de pods según el trabajo pendiente.Nota:
Si tiene instalada la utilidad de Linux watch, puede usar el comando
watch kubectl get pods
para ver el escalado de los pods para procesar los elementos de la lista de Redis. Si no, puede usar el comandokubectl get pods -w
.El resultado debería ser similar al ejemplo siguiente:
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
Una vez que se han procesado todos los elementos y ha expirado cooldownPeriod
, verá que el número de pods es cero. Esto se debe a que KEDA ha quitado todas las réplicas en ejecución y ya no tiene elementos que procesar.