SlideShare uma empresa Scribd logo
1 de 62
Performance Engineering,
k6 e teste de HPA na prática
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
2
Quemsoueu
Lugares onde trabalhei e aprendi muito
3
Kelvin Silva – Arquiteto de Soluções na
Lugares onde aprendi muito
Coisas que eu gosto
Motivação
4
Motivação
Fase de PoC - Mockup Fase de Desenvolvimento
Motivação
QA/Dev/Stage
Motivação
Production
Motivação Pokémon Go - Launch
Motivação Problemas de Performance
Performance Engineering
10
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
Benefícios
Reduzcustosde
manutençãode sistemapor
problemas de performance
12
Identificafuturos gargalos
nosistema
Compreendemelhor o
próprio produto
Diminuiretrabalho Melhora o relacionamento
como seu cliente
Estratégias
Identificaçãoclarade
Requisitos não-funcionais
13
Otimizaçãode Código
Padrões deProjeto e
Arquitetura
Monitoramento
Testes de Performance
Testes de Performance
14
Testes de Performance
Teste de Carga
Teste de Spike
Teste de Soak
Teste de Escalabilidade*
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?
20
Conhecendo seus clientes
Webinar/Conferences
21
Conhecendo seus clientes
Streaming
22
Conhecendo seus clientes
E-commerce
23
Métricas de Performance
Número de Usuários
Chamadas por Segundo
Erros por Segundo
Tempo de Resposta
24
Throughput
Server Connect Time
Internal Integration Data
Conheça seu cliente!
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*
25
Monitore ambientes
produtivos para desenvolver
testes de performance
assertivos
Introdução ao k6
26
27
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
28
- 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
k6
29
k6: Comunidade
30
k6 é performático? Memória
31
Intel Celeron, 4-Core,
8GB RAM
k6 é performático? Max RPS
32
Intel Celeron, 4-Core,
8GB RAM
k6 é performático? Concorrência
33
Intel Celeron, 4-Core,
8GB RAM
Desenvolvendo testes
34
Construindo e Testando
uma solução escalável
no Kubernetes
35
Overview
• Utilizando o k6 para validar o que faremos agora, vamos construir uma aplicação no Kubernetes com
auto scaling configurado.
• HPA significa HorizontalPodAutoscaler
36
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
37
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.
38
NodeJS: Plataforma assíncrona orientada à eventos criada para
desenvolver sistemas escaláveis em Javascript.
Passo 2: Kubernetes
Kubernetes é uma plataforma de código aberto que automatiza a
implantação, dimensiona e gerencia aplicativos em contêineres.
39
Fazer deploy da nossa aplicação no Kubernetes
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
40
Entretanto, para este caso, iremos usar o minikube.
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.
41
Uma vez instalado o minikube, iremos fazer o deploy do nosso servidor utilizando o kubectl.
Passo 3: Configurando o kubernetes
42
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
Passo 4: Deploy do kube State Metrics
43
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
Passo 5: Deploy do Prometheus
44
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
Passo 6: Externalizar Prometheus
45
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
Passo 7: Instalar influxDB (V1) e Grafana local ou no k8s
46
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.
Passo 8: Adicionar dados para o Grafana
47
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
Passo 9: KEDA
48
KEDA significa Kubernetes Event Driven Autoscaler.
Com o KEDA, podemos configurar nossas pods ou
nossos deployments para escalar
conforme regras que estabelecemos.​
Passo 9: Configurando o KEDA
49
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
Passo 10: Dashboard
5
0
No Grafana, selecione para importar um
Dashboard e selecione o
arquivo grafana/devtestbr-metrics-
dashboard.json
51
Review
Passo 11: Enfim, vamos testar!
52
# 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
Conclusões
53
Algumas conclusões
54
• 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.
Dicas
55
Enfim, qual a
melhor ferramenta
de testes de performance?
56
Resposta:
A que resolve
o seu problema!
57
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
58
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
59
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/
60
Q & A
61
k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes

Mais conteúdo relacionado

Mais procurados

Accenture Liquid Application Studio
Accenture Liquid Application StudioAccenture Liquid Application Studio
Accenture Liquid Application StudioAccenture Technology
 
Splunk at Airbus
Splunk at AirbusSplunk at Airbus
Splunk at AirbusSplunk
 
FSI - Digital Transformation.pdf
FSI - Digital Transformation.pdfFSI - Digital Transformation.pdf
FSI - Digital Transformation.pdfYasmineBoudhina
 
Build vs Buy Strategy
Build vs Buy StrategyBuild vs Buy Strategy
Build vs Buy StrategyChris Halton
 
Accenture Communications Industry 2021 - Connectivity Optimizer
Accenture Communications Industry 2021 - Connectivity OptimizerAccenture Communications Industry 2021 - Connectivity Optimizer
Accenture Communications Industry 2021 - Connectivity Optimizeraccenture
 
Smart Factories: How can manufacturers realize the potential of digital indus...
Smart Factories: How can manufacturers realize the potential of digital indus...Smart Factories: How can manufacturers realize the potential of digital indus...
Smart Factories: How can manufacturers realize the potential of digital indus...Capgemini
 
Reimagining the Agenda | Accenture
Reimagining the Agenda | AccentureReimagining the Agenda | Accenture
Reimagining the Agenda | Accentureaccenture
 
Apresentação - Luby Fábrica de Software
Apresentação - Luby Fábrica de SoftwareApresentação - Luby Fábrica de Software
Apresentação - Luby Fábrica de SoftwareAlon Lubieniecki
 
Data Center of the Future: Designing a modernized, high performance computing...
Data Center of the Future: Designing a modernized, high performance computing...Data Center of the Future: Designing a modernized, high performance computing...
Data Center of the Future: Designing a modernized, high performance computing...Capgemini
 
Cloud-native Enterprise Data Science Teams
Cloud-native Enterprise Data Science TeamsCloud-native Enterprise Data Science Teams
Cloud-native Enterprise Data Science TeamsBoston Consulting Group
 
Das perfekte Pitch Deck
Das perfekte Pitch DeckDas perfekte Pitch Deck
Das perfekte Pitch DeckOliver Pitsch
 
Saúde da Criança para o Brasil do Futuro: diagnóstico e propostas
Saúde da Criança para o Brasil do Futuro: diagnóstico e propostas Saúde da Criança para o Brasil do Futuro: diagnóstico e propostas
Saúde da Criança para o Brasil do Futuro: diagnóstico e propostas Prof. Marcus Renato de Carvalho
 
Tech and Venture Capital in the Time of Corona
Tech and Venture Capital in the Time of Corona Tech and Venture Capital in the Time of Corona
Tech and Venture Capital in the Time of Corona Dave McClure
 
EY-introducing-EYs-advisory-services
EY-introducing-EYs-advisory-servicesEY-introducing-EYs-advisory-services
EY-introducing-EYs-advisory-servicesStephen Stone
 
Creating SaaS Startups that Rock: Scaling to Millions of Users
Creating SaaS Startups that Rock: Scaling to Millions of UsersCreating SaaS Startups that Rock: Scaling to Millions of Users
Creating SaaS Startups that Rock: Scaling to Millions of UsersHasan Basri AKIRMAK, MSc,ExecMBA
 
Accenture Cloud Platform: Control, Manage and Govern the Enterprise Cloud
Accenture Cloud Platform: Control, Manage and Govern the Enterprise CloudAccenture Cloud Platform: Control, Manage and Govern the Enterprise Cloud
Accenture Cloud Platform: Control, Manage and Govern the Enterprise Cloudaccenture
 
World's Best Bank - The presentation
World's Best Bank - The presentationWorld's Best Bank - The presentation
World's Best Bank - The presentationRobin Speculand
 
Jpm big data and ai strategies final
Jpm big data and ai strategies finalJpm big data and ai strategies final
Jpm big data and ai strategies finalJordan Carson
 

Mais procurados (19)

Accenture Liquid Application Studio
Accenture Liquid Application StudioAccenture Liquid Application Studio
Accenture Liquid Application Studio
 
Splunk at Airbus
Splunk at AirbusSplunk at Airbus
Splunk at Airbus
 
FSI - Digital Transformation.pdf
FSI - Digital Transformation.pdfFSI - Digital Transformation.pdf
FSI - Digital Transformation.pdf
 
Build vs Buy Strategy
Build vs Buy StrategyBuild vs Buy Strategy
Build vs Buy Strategy
 
Accenture Communications Industry 2021 - Connectivity Optimizer
Accenture Communications Industry 2021 - Connectivity OptimizerAccenture Communications Industry 2021 - Connectivity Optimizer
Accenture Communications Industry 2021 - Connectivity Optimizer
 
Smart Factories: How can manufacturers realize the potential of digital indus...
Smart Factories: How can manufacturers realize the potential of digital indus...Smart Factories: How can manufacturers realize the potential of digital indus...
Smart Factories: How can manufacturers realize the potential of digital indus...
 
Reimagining the Agenda | Accenture
Reimagining the Agenda | AccentureReimagining the Agenda | Accenture
Reimagining the Agenda | Accenture
 
Apresentação - Luby Fábrica de Software
Apresentação - Luby Fábrica de SoftwareApresentação - Luby Fábrica de Software
Apresentação - Luby Fábrica de Software
 
Data Center of the Future: Designing a modernized, high performance computing...
Data Center of the Future: Designing a modernized, high performance computing...Data Center of the Future: Designing a modernized, high performance computing...
Data Center of the Future: Designing a modernized, high performance computing...
 
Cloud-native Enterprise Data Science Teams
Cloud-native Enterprise Data Science TeamsCloud-native Enterprise Data Science Teams
Cloud-native Enterprise Data Science Teams
 
Das perfekte Pitch Deck
Das perfekte Pitch DeckDas perfekte Pitch Deck
Das perfekte Pitch Deck
 
Saúde da Criança para o Brasil do Futuro: diagnóstico e propostas
Saúde da Criança para o Brasil do Futuro: diagnóstico e propostas Saúde da Criança para o Brasil do Futuro: diagnóstico e propostas
Saúde da Criança para o Brasil do Futuro: diagnóstico e propostas
 
Data centers on the Edge
Data centers on the EdgeData centers on the Edge
Data centers on the Edge
 
Tech and Venture Capital in the Time of Corona
Tech and Venture Capital in the Time of Corona Tech and Venture Capital in the Time of Corona
Tech and Venture Capital in the Time of Corona
 
EY-introducing-EYs-advisory-services
EY-introducing-EYs-advisory-servicesEY-introducing-EYs-advisory-services
EY-introducing-EYs-advisory-services
 
Creating SaaS Startups that Rock: Scaling to Millions of Users
Creating SaaS Startups that Rock: Scaling to Millions of UsersCreating SaaS Startups that Rock: Scaling to Millions of Users
Creating SaaS Startups that Rock: Scaling to Millions of Users
 
Accenture Cloud Platform: Control, Manage and Govern the Enterprise Cloud
Accenture Cloud Platform: Control, Manage and Govern the Enterprise CloudAccenture Cloud Platform: Control, Manage and Govern the Enterprise Cloud
Accenture Cloud Platform: Control, Manage and Govern the Enterprise Cloud
 
World's Best Bank - The presentation
World's Best Bank - The presentationWorld's Best Bank - The presentation
World's Best Bank - The presentation
 
Jpm big data and ai strategies final
Jpm big data and ai strategies finalJpm big data and ai strategies final
Jpm big data and ai strategies final
 

Semelhante a k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes

ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...Renato Groff
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...Renato Groff
 
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018Renato Groff
 
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Renato Groff
 
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Renato Groff
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Renato Groff
 
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...Renato Groff
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes Rhuan Karlus Silva
 
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...Renato Groff
 
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020Renato Groff
 
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Renato Groff
 
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Renato Groff
 
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...Renato Groff
 
Kubernetes - do Pod ao Deployment Automatizado - DevOps Professionals - Janei...
Kubernetes - do Pod ao Deployment Automatizado - DevOps Professionals - Janei...Kubernetes - do Pod ao Deployment Automatizado - DevOps Professionals - Janei...
Kubernetes - do Pod ao Deployment Automatizado - DevOps Professionals - Janei...Renato Groff
 
Re pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersRe pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersFrancisco Gonçalves
 
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...tdc-globalcode
 
Publicando WSO2 API Manager no Kubernetes (Portuguese)
Publicando WSO2 API Manager no Kubernetes (Portuguese)Publicando WSO2 API Manager no Kubernetes (Portuguese)
Publicando WSO2 API Manager no Kubernetes (Portuguese)WSO2
 
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
Workshop Microservices - Microservices com Spring Cloud e Netflix OSSWorkshop Microservices - Microservices com Spring Cloud e Netflix OSS
Workshop Microservices - Microservices com Spring Cloud e Netflix OSSRodrigo Cândido da Silva
 

Semelhante a k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes (20)

ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
 
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
 
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
 
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
 
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
 
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
Orquestrando Containers na Nuvem com o Azure Kubernetes Service - ThorArch #1...
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes
 
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
 
Iniciando com kubernetes
Iniciando com kubernetesIniciando com kubernetes
Iniciando com kubernetes
 
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
 
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
 
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
Docker + Kubernetes: Orquestrando containers e escalando rapidamente suas apl...
 
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
Docker + Kubernetes: Turbinando seus projetos Web - Open Source Saturday - Ag...
 
Kubernetes - do Pod ao Deployment Automatizado - DevOps Professionals - Janei...
Kubernetes - do Pod ao Deployment Automatizado - DevOps Professionals - Janei...Kubernetes - do Pod ao Deployment Automatizado - DevOps Professionals - Janei...
Kubernetes - do Pod ao Deployment Automatizado - DevOps Professionals - Janei...
 
Re pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersRe pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containers
 
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
TDC2018SP | Trilha Containers - Provisionando um cluster Kubernetes multi-mas...
 
Desafio Rest API
Desafio Rest APIDesafio Rest API
Desafio Rest API
 
Publicando WSO2 API Manager no Kubernetes (Portuguese)
Publicando WSO2 API Manager no Kubernetes (Portuguese)Publicando WSO2 API Manager no Kubernetes (Portuguese)
Publicando WSO2 API Manager no Kubernetes (Portuguese)
 
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
Workshop Microservices - Microservices com Spring Cloud e Netflix OSSWorkshop Microservices - Microservices com Spring Cloud e Netflix OSS
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
 

k6: Performance Engineering, Monitoramento e Teste de um HPA no Kubernetes

  • 1. Performance Engineering, k6 e teste de HPA na prática
  • 2. 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 2
  • 3. Quemsoueu Lugares onde trabalhei e aprendi muito 3 Kelvin Silva – Arquiteto de Soluções na Lugares onde aprendi muito Coisas que eu gosto
  • 5. Motivação Fase de PoC - Mockup Fase de Desenvolvimento
  • 11. 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
  • 12. Benefícios Reduzcustosde manutençãode sistemapor problemas de performance 12 Identificafuturos gargalos nosistema Compreendemelhor o próprio produto Diminuiretrabalho Melhora o relacionamento como seu cliente
  • 20. 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? 20
  • 24. Métricas de Performance Número de Usuários Chamadas por Segundo Erros por Segundo Tempo de Resposta 24 Throughput Server Connect Time Internal Integration Data Conheça seu cliente!
  • 25. 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* 25 Monitore ambientes produtivos para desenvolver testes de performance assertivos
  • 27. 27 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
  • 28. 28 - 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
  • 29. k6 29
  • 31. k6 é performático? Memória 31 Intel Celeron, 4-Core, 8GB RAM
  • 32. k6 é performático? Max RPS 32 Intel Celeron, 4-Core, 8GB RAM
  • 33. k6 é performático? Concorrência 33 Intel Celeron, 4-Core, 8GB RAM
  • 35. Construindo e Testando uma solução escalável no Kubernetes 35
  • 36. Overview • Utilizando o k6 para validar o que faremos agora, vamos construir uma aplicação no Kubernetes com auto scaling configurado. • HPA significa HorizontalPodAutoscaler 36
  • 37. 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 37
  • 38. 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. 38 NodeJS: Plataforma assíncrona orientada à eventos criada para desenvolver sistemas escaláveis em Javascript.
  • 39. Passo 2: Kubernetes Kubernetes é uma plataforma de código aberto que automatiza a implantação, dimensiona e gerencia aplicativos em contêineres. 39 Fazer deploy da nossa aplicação no Kubernetes
  • 40. 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 40 Entretanto, para este caso, iremos usar o minikube.
  • 41. 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. 41 Uma vez instalado o minikube, iremos fazer o deploy do nosso servidor utilizando o kubectl.
  • 42. Passo 3: Configurando o kubernetes 42 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
  • 43. Passo 4: Deploy do kube State Metrics 43 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
  • 44. Passo 5: Deploy do Prometheus 44 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
  • 45. Passo 6: Externalizar Prometheus 45 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
  • 46. Passo 7: Instalar influxDB (V1) e Grafana local ou no k8s 46 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.
  • 47. Passo 8: Adicionar dados para o Grafana 47 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
  • 48. Passo 9: KEDA 48 KEDA significa Kubernetes Event Driven Autoscaler. Com o KEDA, podemos configurar nossas pods ou nossos deployments para escalar conforme regras que estabelecemos.​
  • 49. Passo 9: Configurando o KEDA 49 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
  • 50. Passo 10: Dashboard 5 0 No Grafana, selecione para importar um Dashboard e selecione o arquivo grafana/devtestbr-metrics- dashboard.json
  • 52. Passo 11: Enfim, vamos testar! 52 # 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. Algumas conclusões 54 • 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. Enfim, qual a melhor ferramenta de testes de performance? 56
  • 57. Resposta: A que resolve o seu problema! 57
  • 58. 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 58
  • 59. 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 59
  • 60. 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/ 60