Escalando aplicações automaticamente no Kubernetes usando KEDA

8411 단어 kedakubernetes
Para quem ainda não conhece o KEDA (Kubernetes Event-Driven Autoscaling) , é:

Um componente leve e de finalidade única que pode ser adicionado a qualquer cluster do Kubernetes. Funciona junto com componentes Kubernetes padrão, como o Horizontal Pod Autoscaler (HPA) e pode estender a funcionalidade sem sobrescrever ou duplicação.
Retirado da documentação oficial



Foi lançado no fim de 2019 (anúncio oficial) e é fruto de uma parceria entre Microsoft & Red Hat.

E ele cumpre bem o lema, que é: “Application autoscaling made simple”.

Kubernetes의 기본 구성 허용 구성HPA은 CPU 및 메모리 메트릭으로 제공됩니다.
Se quiser escalar as aplicações utilizando outro tipo de métrica, por exemplo, lags de eventos ou filas, você precisa primeiro criar um adaptador de métricas (custom metrics) para extrair as métricas da fonte desejada. Entretanto se precisar obter métricas de várias fontes usando vários adaptadores, você está sem sorte porque apenas um por vez é compatível (a menos que tenha mudado최근).

Já o KEDA extrai de umavariedade de fontes는 ScaledObject가 없는 구성에서 0N-instâncias 컴베이스에 이식된 자동 크기를 자동으로 설정합니다.


Outro ponto interessante é que o KEDA não "reinventa a roda"and não construiu seu próprio mecanismo de escalonamento, se aproveitando de Kubernetes and dos secrets (TriggerAuthentication) já usados ​​pelas aplicações.

인스탈란도 오 케다



As instruções para implantar o KEDA são muito simples e podem ser encontradasaqui .

기존 KEDA는 클러스터 Kubernetes에 이식할 수 있습니다.
  • 투구 차트
  • 운영자 허브
  • 임플란트 YAML

  • Vamos는 전성기 기회를 사용합니다.

    helm repo add kedacore https://kedacore.github.io/charts
    helm repo update
    
    kubectl create ns keda
    helm install keda kedacore/keda --namespace keda
    


    teremos 2 배포(KEDA Operator 및 KEDA Metrics API) 설치 시 클러스터 없음…

    kubectl get deployment -n keda
    NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
    keda-operator                     1/1     1            1           1h
    keda-operator-metrics-apiserver   1/1     1            1           1h
    


    e mais alguns CRDs disponíveis:

    kubectl api-resources --api-group=keda.sh
    NAME                     SHORTNAMES       APIGROUP   NAMESPACED   KIND
    scaledjobs               sj               keda.sh    true         ScaledJob
    scaledobjects            so               keda.sh    true         ScaledObject
    triggerauthentications   ta,triggerauth   keda.sh    true         TriggerAuthentication
    


    ScaledJobs*/ScaledObject: ScaledJobs/ScaledObjects 맵은 작업/배포가 차원을 넘어설 때 발생합니다.
    TriggerAuthentication: 이벤트를 모니터링하기 위해 자동 구성에 필요한 재귀적 인증이 필요합니다.

    또는 HPA 음성으로 "ScaledObject"항목이 있습니다.

    • O KEDA não apenas dimensiona deployments, mas também pode dimensionar seus jobs do Kubernetes. Em vez de ter muitos eventos processados ​​em sua implantação e aumentar ou diminuir com base no número de mensagens que precisam ser consumidas, o KEDA pode ativar um trabalho para cada mensagem na origem do evento.

    EXEMPLO COM 카프카



    Vamos dar uma olhada mais de perto noScaledObject eKafka trigger .

    apiVersion: keda.sh/v1alpha1
    kind: ScaledObject
    metadata:
      name: kafka-consumer-scaler
      labels:
        deploymentName: my-kafka-consumer-service
      namespace: sample
    spec:
      scaleTargetRef:
        deploymentName: my-kafka-consumer-service
      pollingInterval: 1        # Optional. Default: 30 seconds
      cooldownPeriod:  30       # Optional. Default: 300 seconds
      minReplicaCount: 0        # Optional. Default: 0
      maxReplicaCount: 10   # Optional. Default: 100
      triggers:
        - type: kafka
          metadata:
            topic: test-topic-1
            # brokerList: my-cluster-kafka-bootstrap.kafka:9092 - deprecated
            bootstrapServers: my-cluster-kafka-bootstrap.kafka:9092    
            consumerGroup: my-kafka-consumerGroup
            lagThreshold: '5'       # Default: 10
            offsetResetPolicy: latest
            allowIdleConsumers: false
          authenticationRef:
            name: keda-trigger-auth-kafka-credential
        ## Optional: list of topics to trigger
        #- type: kafka
        #   metadata:
        #     topic: test-topic-2
        #     bootstrapServers: my-cluster-kafka-bootstrap.kafka:9092    
        #     consumerGroup: my-kafka-consumerGroup
        #     lagThreshold: '5'     # Default: 10
        #     offsetResetPolicy: latest
        #     allowIdleConsumers: false
        #   authenticationRef:
        #     name: keda-trigger-auth-kafka-credential
    


    O ScaledObject, TriggerAuthentication e a implantação referenciada em deploymentName precisam estar no mesmo namespace.


  • Apesar de serem valores opcionais, é importante definir valores dentro dos padrões para seu negócio nos paraâmetros minReplicaCount e maxReplicaCount . Para evitar rebalanceamento de partições no Kafka E/OU evitar que muitos pods sejam iniciados - consumindo todos os recursos do cluster 💥.
  • 매개변수offsetResetPolicy는 가장 초기 또는 최신입니다. Como o KEDA vai percorrer todos os tópicos, vale a pena entender como o código (negócio) se comporta com duplicidade de eventos.

  • Por padrão, o número de réplicas não excederá o número de partições em um tópico. Ou seja, se maxReplicaCount for definido mais do que o número de partições, o escalonador não vai atingir o valor definido. Caso queira mudar este comportamento, ajuste o parâmetro allowIdleConsumers para true. Porém, se houver mais número de consumidores do que número de partições em um tópico, o consumidor extra terá que ficar ocioso.



    Kafka com permissão de somente leitura(list e describe )는 TriggerAuthentication에서 비밀 인증을 허용하지 않고 주제와 참조를 허용하지 않습니다.

    apiVersion: keda.sh/v1alpha1
    kind: TriggerAuthentication
    metadata:
      name: keda-trigger-auth-kafka-credential
      namespace: sample
    spec:
      secretTargetRef:
      - key: sasl
        name: keda-credentials
        parameter: sasl
      - key: username
        name: keda-credentials
        parameter: username
      - key: password
        name: keda-credentials
        parameter: password
    


    참조:



    https://keda.sh/docs/2.3/
    https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/
    https://cloudblogs.microsoft.com/opensource/2020/04/06/kubernetes-event-driven-autoscaling-keda-cncf-sandbox-project/
    https://keda.sh/resources/

    아그라데시멘토스



    Obrigado à que me incentivaram a escrever este artigo e revisaram o texto:
  • Felipe Lamarão 실바(@lipekis)
  • 윌리안 이티호 (@Willian_Itiho)
  • 라파엘 고메즈(
    )
  • 좋은 웹페이지 즐겨찾기