Ejercicio: Implementación de un objeto de escala en el clúster de Azure Kubernetes Service

Completado

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 y maxReplicaCount: 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 en false, lo que hace que se reduzca verticalmente al valor minReplicaCount 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 usa scalers 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étrica listLength 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

  1. Cree un archivo de manifiesto en Cloud Shell para la implementación de Kubernetes denominado scaled-object.yaml mediante el comando touch:

    touch scaled-object.yaml
    
  2. Abra el editor integrado en Cloud Shell escribiendo code ..

  3. 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
    
  4. Guarde el archivo de manifiesto (CTRL + S) y cierre el editor(CTRL + Q).

Aplicación del manifiesto

  1. 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
    
  2. 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
    
  3. 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 comando kubectl 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.