An Interest In:
Web News this Week
- April 23, 2024
- April 22, 2024
- April 21, 2024
- April 20, 2024
- April 19, 2024
- April 18, 2024
- April 17, 2024
Escalando aplicaes automaticamente no Kubernetes usando KEDA
Para quem ainda no 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 padro, como o Horizontal Pod Autoscaler (HPA) e pode estender a funcionalidade sem sobrescrever ou duplicao.
Retirado da documentao oficial
Foi lanado no fim de 2019 (anncio oficial) e fruto de uma parceria entre Microsoft & Red Hat.
E ele cumpre bem o lema, que : Application autoscaling made simple.
Nativamente o Kubernetes s permite configurar HPA com as mtricas de CPU e memria.
Se quiser escalar as aplicaes utilizando outro tipo de mtrica, por exemplo, lags de eventos ou filas, voc precisa primeiro criar um adaptador de mtricas (custom metrics) para extrair as mtricas da fonte desejada. Entretanto se precisar obter mtricas de vrias fontes usando vrios adaptadores, voc est sem sorte porque apenas um por vez compatvel (a menos que tenha mudado recentemente).
J o KEDA extrai de uma variedade de fontes e dimensiona automaticamente suas implantaes de 0
a N-instncias
com base em sua configurao no ScaledObject.
Outro ponto interessante que o KEDA no reinventa a roda e no construiu seu prprio mecanismo de escalonamento, se aproveitando de HPAs do Kubernetes e dos secrets (TriggerAuthentication) j usados pelas aplicaes.
INSTALANDO O KEDA
As instrues para implantar o KEDA so muito simples e podem ser encontradas aqui.
Existem trs maneiras de implantar KEDA em seu cluster Kubernetes:
- Helm charts
- Operator Hub
- Implantar YAMLs
Vamos usar a primeira opo.
helm repo add kedacore https://kedacore.github.io/chartshelm repo updatekubectl create ns kedahelm install keda kedacore/keda --namespace keda
Aps a instalao teremos 2 deployments (KEDA Operator e KEDA Metrics API) rodando no cluster
kubectl get deployment -n kedaNAME READY UP-TO-DATE AVAILABLE AGEkeda-operator 1/1 1 1 1hkeda-operator-metrics-apiserver 1/1 1 1 1h
e mais alguns CRDs disponveis:
kubectl api-resources --api-group=keda.shNAME SHORTNAMES APIGROUP NAMESPACED KINDscaledjobs sj keda.sh true ScaledJobscaledobjects so keda.sh true ScaledObjecttriggerauthentications ta,triggerauth keda.sh true TriggerAuthentication
ScaledJobs*/ScaledObject: Os ScaledJobs/ScaledObjects mapeiam uma fonte de evento para a jobs/deployments que voc deseja dimensionar.
TriggerAuthentication: Se necessrio, este recurso contm a configurao de autenticao necessria para monitorar a origem do evento.
O "ScaledObject" tambm cria o HPA para voc.
- O KEDA no apenas dimensiona deployments, mas tambm pode dimensionar seus jobs do Kubernetes. Em vez de ter muitos eventos processados em sua implantao e aumentar ou diminuir com base no nmero de mensagens que precisam ser consumidas, o KEDA pode ativar um trabalho para cada mensagem na origem do evento.
EXEMPLO COM KAFKA
Vamos dar uma olhada mais de perto no ScaledObject e Kafka trigger.
apiVersion: keda.sh/v1alpha1kind: ScaledObjectmetadata: name: kafka-consumer-scaler labels: deploymentName: my-kafka-consumer-service namespace: samplespec: 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 implantao referenciada em deploymentName precisam estar no mesmo namespace.
- Apesar de serem valores opcionais, importante definir valores dentro dos padres para seu negcio nos parmetros
minReplicaCount
emaxReplicaCount
. Para evitar rebalanceamento de parties no Kafka E/OU evitar que muitos pods sejam iniciados - consumindo todos os recursos do cluster . - O parmetro
offsetResetPolicy
pode ser earliest ou latest. Como o KEDA vai percorrer todos os tpicos, vale a pena entender como o cdigo (negcio) se comporta com duplicidade de eventos.
Por padro, o nmero de rplicas no exceder o nmero de parties em um tpico. Ou seja, se maxReplicaCount for definido mais do que o nmero de parties, o escalonador no vai atingir o valor definido. Caso queira mudar este comportamento, ajuste o parmetro
allowIdleConsumers
paratrue
. Porm, se houver mais nmero de consumidores do que nmero de parties em um tpico, o consumidor extra ter que ficar ocioso.
Para facilitar criamos um usurio no Kafka com permisso de somente leitura (list
e describe
) em todos os grupos e tpicos e referenciamos no TriggerAuthentication o secret com este usurio:
apiVersion: keda.sh/v1alpha1kind: TriggerAuthenticationmetadata: name: keda-trigger-auth-kafka-credential namespace: samplespec: secretTargetRef: - key: sasl name: keda-credentials parameter: sasl - key: username name: keda-credentials parameter: username - key: password name: keda-credentials parameter: password
REFERNCIAS:
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/
AGRADECIMENTOS
Obrigado todos os envolvidos que me incentivaram a escrever este artigo e revisaram o texto:
- Felipe Lamaro Silva (@lipekis)
- Willian Itiho (@Willian_Itiho)
- Rafael Gomes (@gomex)
Original Link: https://dev.to/willianccs/escalando-aplicacoes-automaticamente-no-kubernetes-usando-keda-c41
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To