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

k6 - Fundamentos, Performance e Monitoramento do HPA no Kubernetes

285e58eafc0cffa03bdb9f612768434c?s=47 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.

285e58eafc0cffa03bdb9f612768434c?s=128

Kelvin

July 29, 2021
Tweet

Transcript

  1. Performance Engineering, k6 e teste de HPA na prática

  2. 2 Link da apresentação e demonstrações práticas no YouTube: Escaneie

    o QR Code ou https://youtu.be/m2kq5t2l_PY
  3. 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
  4. 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
  5. Motivação 5

  6. Motivação Fase de PoC - Mockup Fase de Desenvolvimento

  7. Motivação QA/Dev/Stage

  8. Motivação Production

  9. Motivação Pokémon Go - Launch

  10. Motivação Problemas de Performance

  11. Performance Engineering 11

  12. 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
  13. 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
  14. 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
  15. Testes de Performance 15

  16. Testes de Performance

  17. Teste de Carga

  18. Teste de Spike

  19. Teste de Soak

  20. Teste de Escalabilidade*

  21. 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
  22. Conhecendo seus clientes Webinar/Conferences 22

  23. Conhecendo seus clientes Streaming 23

  24. Conhecendo seus clientes E-commerce 24

  25. 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!
  26. 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
  27. Introdução ao k6 27

  28. 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
  29. 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
  30. k6 30

  31. k6: Comunidade 31

  32. k6 é performático? Memória 32 Intel Celeron, 4-Core, 8GB RAM

  33. k6 é performático? Max RPS 33 Intel Celeron, 4-Core, 8GB

    RAM
  34. k6 é performático? Concorrência 34 Intel Celeron, 4-Core, 8GB RAM

  35. Desenvolvendo testes 35

  36. Construindo e Testando uma solução escalável no Kubernetes 36

  37. 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
  38. 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
  39. 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.
  40. 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
  41. 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.
  42. 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.
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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.
  48. 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
  49. 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.
  50. 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
  51. Passo 10: Dashboard 5 1 No Grafana, selecione para importar

    um Dashboard e selecione o arquivo grafana/devtestbr-metrics- dashboard.json
  52. 52 Review

  53. 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
  54. Conclusões 54

  55. 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.
  56. Dicas 56

  57. Enfim, qual a melhor ferramenta de testes de performance? 57

  58. Resposta: A que resolve o seu problema! 58

  59. 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
  60. 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
  61. 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
  62. Q & A 62

  63. None