Upgrade to Pro — share decks privately, control downloads, hide ads and more …

k6 - Fundamentos, Performance e Monitoramento do HPA no Kubernetes

Kelvin
July 29, 2021

k6 - Fundamentos, Performance e Monitoramento do HPA no Kubernetes

Sabia que aplicando Performance Engineering você consegue aprender mais sobre seu projeto? Já ouviu falar do k6, o antigo "Load Impact"?
O que acha de juntar Performance, k6 e Monitoramento para ver um teste de AutoScaling na prática?

O objetivo desta apresentação é trazer uma introdução aos principais itens de Performance Engineering, uma introdução ao k6 e o uso básico do mesmo, encerrando com uma aplicação prática utilizando o próprio k6 para testar um sistema rodando no Kubernetes, configurado com Keda para AutoScaling, e usando Grafana e Prometheus para monitorarmos os resultados ao vivo.

Kelvin

July 29, 2021
Tweet

Other Decks in Technology

Transcript

  1. Motivação Performance Engineering Teste de Performance e Monitoramento Introdução ao

    k6 Desenvolvendo testes Construindo e Testando uma solução escalável no Kubernetes Agenda Conclusões 3
  2. Quem sou eu Lugares onde trabalhei e aprendi muito 4

    Kelvin Silva – Arquiteto de Soluções na Lugares onde aprendi muito Coisas que eu gosto
  3. Performance Engineering Performance Engineering, ou Engenharia de Performance, é um

    conjunto de técnicas e estratégias aplicadas no ciclo de vida de um sistema para tentar garantir requisitos não funcionais de estabilidade, confiabilidade, escalabilidade e, enfim, capacidade de resposta do sistema em meio à um caos
  4. Benefícios Reduz custos de manutenção de sistema por problemas de

    performance 13 Identifica futuros gargalos no sistema Compreende melhor o próprio produto Diminui retrabalho Melhora o relacionamento com o seu cliente
  5. Estratégias Identificação clara de Requisitos não- funcionais 14 Otimização de

    Código Padrões de Projeto e Arquitetura Monitoramento Testes de Performance
  6. Testes de Performance Como criar meus testes de performance? Quantos

    usuários devo suportar? Quantos usuários temos previsão para suportar? Meu sistema está crescendo? Qual o meu tempo de resposta aceitável? Quanto estou disposto a gastar? Quanto estou disposto a perder?? Conheço meus clientes? 21
  7. Métricas de Performance Número de Usuários Chamadas por Segundo Erros

    por Segundo Tempo de Resposta 25 Throughput Server Connect Time Internal Integration Data Conheça seu cliente!
  8. Monitoramento + KPIs Monitoramento de KPIs em teste e produção

    Como seu sistema está se comportando durante a semana? Serviços mais usados Tendência de métricas* 26 Monitore ambientes produtivos para desenvolver testes de performance assertivos
  9. 28 K6 é uma ferramenta open-source de teste de performance.

    - Dockerizado por natureza - Integração facilitada para integrações externas (influxDB, Grafana, etc) - Suporta NPM com Webpack - Escrita em GoLang, interface em Javascript - Facilidade em criar um framework de testes de performance - Facilidade e liberdade em customizar os testes - Extremamente performático k6
  10. 29 - Lançado em 2017 - Escrito em Go -

    Originalmente, chamado e mantido pela Load Impact – "Load Testing as a Service". Embora seja OpenSource, e dado o devido sucesso do k6, a empresa passou a se chamar k6. - Nome k6: o projeto se chamava "speedboat", avaliaram o nome como Kapablo, mas ouve um desacordo sobre o nome final. Para ser fácil via CLI, resumiram, então, o nome para k6. Como k6 também é o nome de uma montanha, a logo é uma homenagem à montanha e à gráficos de testes de performance! k6
  11. Overview • Utilizando o k6 para validar o que faremos

    agora, vamos construir uma aplicação no Kubernetes com auto scaling configurado. • HPA significa HorizontalPodAutoscaler 37
  12. Passo 0: Clonar o repositório do projeto • Clonar o

    repositório do exemplo. $ git clone https://github.com/KelvinKSPS/example-kubernetes-autoscaling-nodejs-api • Acompanhar post que motivou este exemplo da apresentação: $ open shorturl.at/psLOT 38
  13. Passo 1: Server • Vamos criar um servidor que gerencia

    os dados de todos os eventos do DevTestBR. Vamos adicionar as métricas preparadas para o Prometheus - uma plataforma open source de monitoramento. 39 NodeJS: Plataforma assíncrona orientada à eventos criada para desenvolver sistemas escaláveis em Javascript.
  14. Passo 2: Kubernetes Kubernetes é uma plataforma de código aberto

    que automatiza a implantação, dimensiona e gerencia aplicativos em contêineres. 40 Fazer deploy da nossa aplicação no Kubernetes
  15. Passo 2: Instalação do Kubernetes O Minikube é uma implementação

    leve do Kubernetes que cria uma VM em sua máquina local e implanta um cluster simples contendo apenas um nó. O Minikube está disponível para sistemas Linux, macOS e Windows 41 Entretanto, para este caso, iremos usar o minikube.
  16. Passo 2: Instalação do Kubernetes Kubectl é um utilitário de

    linha de comando que se conecta ao servidor API, usado pelos administradores para criar pods, deployments, serviços, etc. Vamos usa-lo bastante para gerenciar nosso cluster. 42 Uma vez instalado o minikube, iremos fazer o deploy do nosso servidor utilizando o kubectl.
  17. Passo 3: Configurando o kubernetes 43 Com o kubectl, vamos

    configurar alguns itens para facilitar nosso desenvolvimento no Kuberbetes. # habilitando o dashboard do kubernetes $ minikube addons enable dashboard # habilitando o ingress, uma interface via API para definir regras e permitir acesso externo para os serviços dentro do cluster: $ minikube addons enable ingress $ minikube addons enable ingress-dns # habilitando o tunnel para acessar as portas do cluster através da web: $ minikube tunnel # acessando o dashboard do kubernetes $ minikube dashboard
  18. Passo 4: Deploy do kube State Metrics 44 kube State

    Metrics coleta várias métrricas sobre os serviços que estão rodando no Kubernetes, através das APIs. # Clona o repositório do kube State Metrics $ git clone https://github.com/devopscube/kube-state-metrics-configs.git # Cria os objetos do repositório recém criado: $ kubectl apply -f kube-state-metrics-configs/ # Verifica se o deploy foi realizado corretamente. $ kubectl get deployments kube-state-metrics -n kube-system
  19. Passo 5: Deploy do Prometheus 45 Prometheus é um sistema

    de monitoramento para serviços e aplicações. Ele coleta as métricas de seus alvos em determinados intervalos, avalia expressões de regras, exibe os resultados e também pode acionar alertas se alguma condição for observada como verdadeira. Na pasta raíz do projeto: # Criar um namespace no kubernetes $ kubectl create namespace monitoring # Criar um clusterRole $ kubeclt create –f prometheus/clusterRole.yaml # Criar um Config Map para não precisar buildar o Prometheus toda hora que for # adicionar ou remover configurações $ kubectl create –f prometheus/config-map.yaml # Enfim, deploy do prometheus $ kubectl create -f prometheus/prometheus-deployment.yaml
  20. Passo 6: Externalizar Prometheus 46 Externalizando o Prometheus, podemos acessar

    o mesmo do lado de fora do k8s. # Copiar o nome da pod do Prometheus $ kubectl get pods --namespace=monitoring # Criar o encaminhamento de porta pelo kubectl $ kubectl port-forward prometheus-monitoring-<id-da-pod> 8080:9090 -n monitoring
  21. Passo 7: Instalar influxDB (V1) e Grafana local ou no

    k8s 47 Depende do OS, mas, basicamente, é como se fosse instalar uma aplicação comum ou fazer deploy de uma imagem. InfluxDB => É um banco de dados de código aberto designado para lidar com um alto volume de consultas e escritas por segundo sem causar muito impacto no sistema operaciona Grafana => O Grafana é uma plataforma para visualizar e analisar métricas por meio de gráficos. Ele tem suporte para diversos tipos de bancos de dados — tanto gratuitos quanto pagos — e pode ser instalado em qualquer sistema operacional.
  22. Passo 8: Adicionar dados para o Grafana 48 Iremos indicar

    ao Grafana as fontes de dados que devem ser monitoradas. No Grafana, vá em Configuration > Data Sources. Adicione os seguintes sources: • influxDB: Name: InfluxDB-K6 • URL: http://localhost:8086 • Access: Server • Database: k6 • HTTP Method: GET • Min time interval: 5s • Prometheus: *Name: InfluxDB-K6 •URL: http://<prometheus ip address>:8080/ •Access: Server •Scrape interval: 5s •Query timeout: 30s •HTTP Method: GET
  23. Passo 9: KEDA 49 KEDA significa Kubernetes Event Driven Autoscaler.

    Com o KEDA, podemos configurar nossas pods ou nossos deployments para escalar conforme regras que estabelecemos.
  24. Passo 9: Configurando o KEDA 50 Configurando o KEDA #

    Deploy KEDA to Kubernetes $ kubectl apply -f https://github.com/kedacore/keda/releases/download/v2.2.0/ked a-2.2.0.yaml # Deploy our scalers configurations to keda $ kubectl apply -f keda/keda-prometheus-scaledobject
  25. Passo 10: Dashboard 5 1 No Grafana, selecione para importar

    um Dashboard e selecione o arquivo grafana/devtestbr-metrics- dashboard.json
  26. Passo 11: Enfim, vamos testar! 53 # Pegar o IP

    do serviço $ kubectl get services ENDPOINT=http://{ip serviço}:4000/devtestbr k6 run -o influxdb=http://localhost:8086/k6 performance-test.js ou ENDPOINT=http://{ip serviço}:4000/devtestbr k6 run performance-test.js
  27. Algumas conclusões 55 • Performance não é apenas teste de

    carga. Teste de carga sem conhecer e investigar as necessidades de seu projeto pode ser uma perda de tempo. • Existem diferentes tipos de teste de performance. Novamente, basta investigar as necessidades de seu projeto. • Monitoramento e Análise de Dados ajudam a compreender melhor sua aplicação. • Estratégias de Arquitetura do projeto pode ajudar a evitar problemas futuros de performance. • k6 é uma ferramenta muito poderosa e leve para executar testes. • k6 é poderoso por ser escrito em Go. Acessível por possuir a interface em Javascript. • Utilizando uma boa ferramenta de teste com estratégias de monitoramento ajuda a verificar configurações de infra-estrutura, mesmo em produção.
  28. Repositórios • Framework com npm: https://github.com/KelvinKSPS/k6-with-npm • K6 com K8s:

    https://github.com/KelvinKSPS/example-kubernetes-autoscaling-nodejs-api • Contato: https://linkedin.com/in/kelvin-ksps 59
  29. Referências: Performance •Correlsense, 2012. An Introduction to Software Performance Engineering

    •Rebecca Clinard, 2017. Top 10 performance engineering techniques that work •Amber Race, 2017. How to create highly effective performance tests •Peco Karayanev, 2018. Why a Big Data Approach is Key for APM •Mark Tomlinson, Perze Ababa, et al., 2017. A Quick Start Guide To Learning Performance Testing •TangoWhisky37 - Peformance BOK 60
  30. Referências: Ferramentas • K6 website: https://k6.io/ • K6: Testando aplicações

    no k8s na prática: https:// shorturl.at/sAP78 • Keda: https://keda.sh/docs • Prometheus: https://prometheus.io/ • Grafana: https://grafana.com/ • InfluxDB: https://www.influxdata.com/ • NodeJS: https://nodejs.org/en/ 61