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

Concluído

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

ScaledObject Visão geral do manifesto

  • scaleTargetRef: Esta seção descreve qual carga de trabalho a 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 dimensionamento. Nesse caso, você instrui a 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
    

    Nota

    minReplicaCount: 0 leva a contagem de réplicas padrão de implantação de um para zero. Isso ocorre se o serviço estiver ocioso e não processar nenhum evento. Nesse caso, se não houver itens na Lista Redis e o serviço permanecer ocioso, o KEDA será dimensionado para zero.

  • advanced: Esta seção está relacionada a personalizações avançadas do KEDA. O restoreToOriginalReplicaCount instrui o KEDA a retornar a contagem de réplicas ao valor original após eventos de expansão. Nesse caso, você o define como false, o que faz com que uma escala diminua para o minReplicaCount valor 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: Esta seção usa scalers para detetar se o objeto deve ser ativado ou desativado e alimentar métricas personalizadas para fontes de eventos específicas. A listLength métrica instrui o KEDA a aumentar a escala quando houver 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, consulte KEDA Scalers.

Criar o manifesto ScaledObject

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

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

  3. Abra o scaled-object.yaml arquivo 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 kubectl apply comando:

    kubectl apply -f ./scaled-object.yaml
    

    Sua saída deve ser semelhante à saída de exemplo a seguir:

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

    kubectl get pods
    

    Sua 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 kubectl get pods comando para verificar se a implantação está dimensionando o número de pods de acordo com a lista de pendências de trabalho.

    Nota

    Se você tiver o relógio do utilitário Linux instalado, poderá usar o watch kubectl get pods comando para ver a escala dos pods para processar os itens da lista Redis. Se não, você pode usar o kubectl get pods -w comando.

    Sua saída deve ser semelhante à saída de exemplo a seguir:

      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.