Exercício – Implantar um objeto de escala no seu cluster do Serviço de Kubernetes do Azure

Concluído

Neste exercício, você implantará uma CRD (definição de recurso personalizado) de objeto de escala em seu cluster do AKS. O objeto do dimensionador contém o gatilho que conecta seu aplicativo implantado ao KEDA. Após a implantação no AKS, o KEDA monitora a lista do Redis e escala verticalmente se o tamanho da lista exceder o limite definido e reduz verticalmente se o comprimento da lista ficar abaixo dele.

Visão geral do manifesto ScaledObject

  • scaleTargetRef: Essa seção descreve qual carga de trabalho o KEDA observa.

      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 e maxReplicaCount: Esses atributos determinam o intervalo de réplicas que o KEDA usa para escalar. Nesse caso, você instruiu o KEDA a escalar de um mínimo de zero a um máximo de 20.

      minReplicaCount: 0            # Optional. Default: 0
      maxReplicaCount: 20           # Optional. Default: 100
    

    Observação

    O minReplicaCount: 0 leva nossa contagem de réplicas padrão da Implantação de um a zero. Isso ocorre se o serviço estiver ocioso e não estiver processando nenhum evento. Nesse caso, se não houver nenhum item na Lista do Redis e o serviço permanecer ocioso, o KEDA escalará para zero.

  • advanced: Essa seção geralmente está relacionada à personalização avançada do KEDA. O restoreToOriginalReplicaCount instrui o KEDA a retornar a contagem de réplicas para o valor original após eventos de dimensionamento vertical. Nesse caso, você o define como false, causando uma redução vertical para valor minReplicaCount de 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: Essa seção usa scalers para detectar se o objeto deve ser ativado ou desativado e alimentar métricas personalizadas para origens de evento específicas. Essa métrica listLength instrui o KEDA a escalar verticalmente quando há dez itens na 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 obter mais informações, confira Dimensionadores KEDA.

Criar o manifesto ScaledObject

  1. No Cloud Shell, crie um arquivo de manifesto para a Implantação do Kubernetes chamado scaled-object.yaml usando o comando touch:

    touch scaled-object.yaml
    
  2. Abra o editor integrado no Cloud Shell inserindo code .

  3. Abra o arquivo scaled-object.yaml e adicione a seguinte seção de código do 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. Salve o arquivo de manifesto (CTRL + S) e feche o editor (CTRL + Q).

Aplicar o manifesto

  1. Implante o manifesto no cluster usando o comando kubectl apply:

    kubectl apply -f ./scaled-object.yaml
    

    Seu resultado deve ser semelhante ao seguinte exemplo de saída:

    scaledobject.keda.sh/scaled-contoso created
    
  2. Verifique o número de pods em execução usando o comando kubectl get pods:

    kubectl get pods
    

    A saída deve ser semelhante à saída de exemplo a seguir, com um pod em execução:

    NAME                                  READY   STATUS    RESTARTS   AGE
    contoso-microservice-794d98b5-4flvg   1/1     Running   0          2m1s
    
  3. Execute periodicamente o comando kubectl get pods para verificar se a Implantação está escalando o número de pods de acordo com a lista de pendências do trabalho.

    Observação

    Se você tiver o utilitário do Linux instalado, poderá executar o comando watch kubectl get pods para ver a escala de pods para processar os itens de lista do Redis. Caso contrário, você poderá usar o comando kubectl get pods -w.

    Seu resultado deve ser semelhante ao seguinte exemplo de saída:

      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
    

Depois que todos os itens forem processados e o cooldownPeriod expirar, você verá que o número de pods é zero. Isso ocorre porque o KEDA removeu todas as réplicas em execução e não tem mais itens para processar.