Contêineres e VMs no mundo dos E-commerces (Devcommerce2016)

Post on 28-Jan-2018

140 views 0 download

transcript

Contêineres e VMs no mundo dos E-commerces

About me ▫ TI desde 2000▫ Técnico em Telecom▫ PHP ZCE▫ Devop na Global Fashion Group▫ Instrutor▫ Autor▫ Pai

Merchanhttp://aprendendodocker.com.br

Agenda Máquinas FísicasMáquinas VirtuaisContêineresComparativoOnde usar cada um

Disclaimer:I am not a cloud specialist

Máquinas Físicas

O início

▫ Escolher datacenterMáquinas Físicas

Máquinas Físicas ▫ Escolher datacenter▫ Contratar link de internet

▫ Escolher datacenter▫ Contratar link de internet▫ Contratar links de voz

Máquinas Físicas

▫ Escolher datacenter▫ Contratar link de internet▫ Contratar links de voz▫ Comprar e configurar roteadores

Máquinas Físicas

▫ Escolher datacenter▫ Contratar link de internet▫ Contratar links de voz▫ Comprar e configurar roteadores ▫ Comprar e configurar servidores

Máquinas Físicas

▫ Escolher datacenter▫ Contratar link de internet▫ Contratar links de voz▫ Comprar e configurar roteadores ▫ Comprar e configurar servidores▫ Aguardar terceiros provisionar e

fazer as instalações.

Máquinas Físicas

Máquinas Físicas ▫ Escolher datacenter▫ Contratar link de internet▫ Contratar links de voz▫ Comprar e configurar roteadores ▫ Comprar e configurar servidores▫ Aguardar terceiros provisionar e

fazer as instalações.▫ Botar para rodar

▫ Monitorar custosMáquinas Físicas

▫ Monitorar custos▫ Monitorar funcionamento

Máquinas Físicas

▫ Monitorar custos▫ Monitorar funcionamento▫ Monitorar utilização

Máquinas Físicas

▫ Monitorar custos▫ Monitorar funcionamento▫ Monitorar utilização▫ Escalabilidade lenta

Máquinas Físicas

▫ Monitorar custos▫ Monitorar funcionamento▫ Monitorar utilização▫ Escalabilidade lenta▫ Aplicações monolíticas

Máquinas Físicas

Máquinas Físicas ▫ Monitorar custos▫ Monitorar funcionamento▫ Monitorar utilização▫ Escalabilidade lenta▫ Aplicações monolíticas▫ Caso de falhas tinha que ir no

datacenter

On-Premises

AplicaçãoDados

RuntimeMiddleware

Sistema OperacionalVirtualização

ServidorArmazenamento

Rede

● Cliente● Fornecedor

Legenda

Quem trabalha com máquinas físicas?

Máquinas Virtuais

Evolução

▫ Escolher tipo de cloud (IAAS/PAAS)

Máquinas Virtuais

▫ Escolher tipo de cloud (IAAS/PAAS)

▫ Escolher provedor de Cloud

Máquinas Virtuais

▫ Escolher tipo de cloud (IAAS/PAAS)

▫ Escolher provedor de Cloud▫ Contratar os serviços do provedor

Máquinas Virtuais

▫ Escolher tipo de cloud (IAAS/PAAS)

▫ Escolher provedor de Cloud▫ Contratar os serviços do provedor▫ Provisionar e configurar via painel

de controle ou API

Máquinas Virtuais

▫ Escolher tipo de cloud (IAAS/PAAS)

▫ Escolher provedor de Cloud▫ Contratar os serviços do provedor▫ Provisionar e configurar via painel

de controle ou API▫ Faz o deploy da aplicação

Máquinas Virtuais

Máquinas Virtuais ▫ Escolher tipo de cloud

(IAAS/PAAS)▫ Escolher provedor de Cloud▫ Contratar os serviços do provedor▫ Provisionar e configurar via painel

de controle ou API▫ Faz o deploy da aplicação▫ Bota pra rodar

IAAS - Infrastructure As A Service

AplicaçãoDados

RuntimeMiddleware

Sistema OperacionalVirtualização

ServidorArmazenamento

Rede

● Cliente● Fornecedor

Legenda

PAAS - Platform As A Service

AplicaçãoDados

RuntimeMiddleware

Sistema OperacionalVirtualização

ServidorArmazenamento

Rede

● Cliente● Fornecedor

Legenda

▫ Monitorar custosMáquinas Virtuais

▫ Monitorar custos▫ Monitorar funcionamento

Máquinas Virtuais

▫ Monitorar custos▫ Monitorar funcionamento▫ Monitorar utilização

Máquinas Virtuais

▫ Monitorar custos▫ Monitorar funcionamento▫ Monitorar utilização▫ Escalabilidade rápida

Máquinas Virtuais

▫ Monitorar custos▫ Monitorar funcionamento▫ Monitorar utilização▫ Escalabilidade rápida▫ Aplicações quebrada em serviços

Máquinas Virtuais

Máquinas Virtuais ▫ Monitorar custos

▫ Monitorar funcionamento▫ Monitorar utilização▫ Escalabilidade rápida▫ Aplicações quebrada em serviços▫ Caso de falhas basta corrigir e re-

provisionar

Contêineres

Novo paradigma

Contêineres E aí como que se faz com contêineres?

Contêineres E aí como que se faz com contêineres?

Primeiramente veremos as características de cada um.

Máquinas Físicas

Sistema Operacional

Bins/Libs Bins/Libs

App1 App2

Máquinas Virtuais

Hypervisor

SO Guest SO Guest

App1 App2

Sistema Operacional

Bins/Libs Bins/Libs

Contêineres

Container Engine

App1 App2

Sistema Operacional

Bins/Libs Bins/Libs

Qual modelo você NÃO usaria no seu e-commerce hoje?

Comparativo entre VMs e Contêineres

● Isolamento no nível de sistema operacional

● Isolamento no nível de máquina

Máquinas Virtuais Contêineres

● Isolamento no nível de sistema operacional

● Aplicações são processos no Host

● Isolamento no nível de máquina

● Aplicações usam o kernel do guest

Máquinas Virtuais Contêineres

● Isolamento no nível de sistema operacional

● Aplicações são processos no Host

● Provisionamento rápido

● Isolamento no nível de máquina

● Aplicações usam o kernel do guest

● Provisionamento lento

Máquinas Virtuais Contêineres

Máquinas Virtuais Contêineres

● Isolamento no nível de máquina

● Aplicações usam o kernel do guest

● Provisionamento lento● KVM, Xen, OracleVM,

VMware, VirtualBox

● Isolamento no nível de sistema operacional

● Aplicações são processos no Host

● Provisionamento rápido● LXC, Docker, rkt,

kubernetes

Máquinas Virtuais Contêineres

● Isolamento no nível de máquina

● Aplicações usam o kernel do guest

● Provisionamento lento● KVM, Xen, OracleVM,

VMware, VirtualBox● Rodam outros SOs guest

● Isolamento no nível de sistema operacional

● Aplicações são processos no Host

● Provisionamento rápido● LXC, Docker, rkt,

kubernetes● Somente Linux*

Onde usar cada um?

Ambiente de Dev Quais os focos em montar um

ambiente de dev?

Quais os focos em montar um ambiente de dev?▫ Provisionar rápido

Ambiente de Dev

Ambiente de Dev Quais os focos em montar um

ambiente de dev?▫ Provisionar rápido▫ Fácil montar, destruir e remontar

Ambiente de Dev Quais os focos em montar um

ambiente de dev?▫ Provisionar rápido▫ Fácil montar, destruir e remontar

▫ E PRINCIPALMENTE:

Ambiente de Dev

Monte o mais parecido ao ambiente de produção possível. Inclusive as versões utilizadas.

Ambiente de Dev

Monolito => Vai de VM

Ambiente de Dev

Monolito => Vai de VM

PHP

MySQLRedis

Varnish

RabbitMQ

Ambiente de Dev

Microservice => Vai de container

Ambiente de Dev

Microservice => Vai de container

PHP

MySQL Redis

Varnish RabbitMQ

Esteira de entrega Quais os focos em montar ambientes

para a esteira de entrega?

Quais os focos em montar ambientes para a esteira de entrega?▫ Que o código seja integrado de

maneira contínua (CI)

Esteira de entrega

Quais os focos em montar ambientes para a esteira de entrega?▫ Que o código seja integrado de

maneira contínua (CI)▫ Testes sejam feitos

Esteira de entrega

Esteira de entrega Quais os focos em montar ambientes

para a esteira de entrega?▫ Que o código seja integrado de

maneira contínua (CI)▫ Testes sejam feitos▫ Um artefato "deployável" seja

gerado

Esteira de entrega Quais os focos em montar ambientes

para a esteira de entrega?▫ Que o código seja integrado de

maneira contínua (CI)▫ Testes sejam feitos▫ Um artefato "deployável" seja

gerado

Dê preferência para contêineres.

Esteira de entrega ▫ Com contêineres não é necessário

instalar todas as dependências para que suas aplicações sejam testadas e empacotadas.

Esteira de entrega ▫ Com contêineres não é necessário

instalar todas as dependências para que suas aplicações sejam testadas e empacotadas.

▫ Contêinerize comandos:docker run --rm --volume "$PWD":/app composer/composer install

E o ambiente de produção? Uso Contêineres ou VMs?

Quais os focos em montar um ambiente de produção?

Em produção

Quais os focos em montar um ambiente de produção?▫ Alta Disponibilidade

Em produção

Quais os focos em montar um ambiente de produção?▫ Alta Disponibilidade▫ Escalabilidade

Em produção

Quais os focos em montar um ambiente de produção?▫ Alta Disponibilidade▫ Escalabilidade▫ Redundâncias

Em produção

▫ VMs ainda são mais maduras out-of the-box

Em produção

▫ VMs ainda são mais maduras out-of the-box

▫ Contêineres sobre VMs overhead de 5-8% (bit.ly/research-ibm)

Em produção

▫ VMs ainda são mais maduras out-of the-box

▫ Contêineres sobre VMs overhead de 5-8% (bit.ly/research-ibm)

▫ Contêineres exigem muitos cuidados.

Em produção

Em produção ▫ VMs ainda são mais maduras out-of the-box

▫ Contêineres sobre VMs overhead de 5-8% (bit.ly/research-ibm)

▫ Contêineres exigem muitos cuidados.

▫ Em bare metal temos uma otimização de recursos usando contêineres

Contêineres em produçãoCuidados

Dev Prod

Contêineres em produção ▫ Migre apenas um serviço por vez

Contêineres em produção ▫ Migre apenas um serviço por vez

▫ Começe por serviços pequenos. Ex. APIs, load balancers.

▫ Migre apenas um serviço por vez▫ Começe por serviços pequenos.

Ex. APIs, load balancers.▫ Sistema de Deploy diferenciado

Contêineres em produção

▫ Migre apenas um serviço por vez▫ Começe por serviços pequenos.

Ex. APIs, load balancers.▫ Sistema de Deploy diferenciado

▫ Construção de nova imagem

Contêineres em produção

Contêineres em produção ▫ Migre apenas um serviço por vez

▫ Começe por serviços pequenos. Ex. APIs, load balancers.

▫ Sistema de Deploy diferenciado▫ Construção de nova imagem▫ Push da imagem para

repositório

Contêineres em produção ▫ Migre apenas um serviço por vez

▫ Começe por serviços pequenos. Ex. APIs, load balancers.

▫ Sistema de Deploy diferenciado▫ Construção de nova imagem▫ Push da imagem para

repositório▫ Imagem é testada no CI server

Contêineres em produção

▫ Serviço de registry rodando

Contêineres em produção

▫ Serviço de registry rodando▫ Registry de Alta disponibilidade

Contêineres em produção

▫ Serviço de registry rodando▫ Registry de Alta disponibilidade ▫ Na mesma network do CI

Contêineres em produção

▫ Serviço de registry rodando▫ Registry de Alta disponibilidade ▫ Na mesma network do CI▫ Storage de alta performance

Contêineres em produção

▫ Serviço de registry rodando▫ Registry de Alta disponibilidade ▫ Na mesma network do CI▫ Storage de alta performance▫ Gerencia de hosts

Contêineres em produção

▫ Serviço de registry rodando▫ Registry de Alta disponibilidade ▫ Na mesma network do CI▫ Storage de alta performance▫ Gerencia de hosts▫ Gerencia de configurações

Contêineres em produção

▫ Serviço de registry rodando▫ Registry de Alta disponibilidade ▫ Na mesma network do CI▫ Storage de alta performance▫ Gerencia de hosts▫ Gerencia de configurações

▫ Cluster e Envs

Contêineres em produção

▫ Serviço de registry rodando▫ Registry de Alta disponibilidade ▫ Na mesma network do CI▫ Storage de alta performance▫ Gerencia de hosts▫ Gerencia de configurações

▫ Cluster e Envs▫ Chaves e senhas

Contêineres em produção

▫ Health checks melhores que em VMs

Contêineres em produção

▫ Health checks melhores que em VMs

▫ Possibilidade de RollBack

Contêineres em produção

▫ Health checks melhores que em VMs

▫ Possibilidade de RollBack▫ Logs centralizados e indexados

Contêineres em produção

▫ Health checks melhores que em VMs

▫ Possibilidade de RollBack▫ Logs centralizados e indexados▫ Métricas diferentes,

monitoramento diferenciado

▫ Repositório de imagensContêineres em produção

▫ Repositório de imagens▫ Gerenciamento de hosts

Contêineres em produção

▫ Repositório de imagens▫ Gerenciamento de hosts▫ Gerenciamento de configurações

Contêineres em produção

▫ Repositório de imagens▫ Gerenciamento de hosts▫ Gerenciamento de configurações

▫ Locais

Contêineres em produção

▫ Repositório de imagens▫ Gerenciamento de hosts▫ Gerenciamento de configurações

▫ Locais▫ Do cluster

Contêineres em produção

▫ Gerencia de OrquestraçãoContêineres em produção

▫ Gerencia de Orquestração▫ Como organizar o cluster

Contêineres em produção

▫ Gerencia de Orquestração▫ Como organizar o cluster▫ Organizar contêineres nos

clusters

Contêineres em produção

▫ Gerencia de Orquestração▫ Como organizar o cluster▫ Organizar contêineres nos

clusters▫ Definir estratégia de schedule

Contêineres em produção

▫ Gerencia de Orquestração▫ Como organizar o cluster▫ Organizar contêineres nos

clusters▫ Definir estratégia de schedule▫ Definir como balancear o

tráfego entre os contêineres

Contêineres em produção

▫ Gerencia de Orquestração▫ Como organizar o cluster▫ Organizar contêineres nos

clusters▫ Definir estratégia de schedule▫ Definir como balancear o

tráfego entre os contêineres▫ Configurar service discovery

Contêineres em produção

▫ SegurançaContêineres em produção

▫ Segurança▫ Imagem (docker bench,

nautilus, etc.)

Contêineres em produção

▫ Segurança▫ Imagem (docker bench,

nautilus, etc.)▫ Acesso, remover Linux

capabilities --cap-drop sys_chroot

Contêineres em produção

▫ Segurança▫ Imagem (docker bench,

nautilus, etc.)▫ Acesso, remover Linux

capabilities --cap-drop sys_chroot

▫ Mudar contêineres para rodar sem root

Contêineres em produção

▫ Utilizar framework do kernel (SELinux ApArmor) --selinux-enabled

Contêineres em produção

▫ Utilizar framework do kernel (SELinux ApArmor) --selinux-enabled

▫ Limitar recursos--cpu-shares=512

Contêineres em produção

▫ MonitoramentoContêineres em produção

▫ Monitoramento▫ Sysdig

Contêineres em produção

▫ Monitoramento▫ Sysdig▫ Datadog

Contêineres em produção

▫ Monitoramento▫ Sysdig▫ Datadog▫ New Relic

Contêineres em produção

▫ Monitoramento▫ Sysdig▫ Datadog▫ New Relic▫ Stats (docker stats)

Contêineres em produção

▫ Não utilizar SSH, gerencie contêineres via Host

Contêineres em produção

São cuidados para evitar isso:

Não existe bala de prata, cada problema tem algumas soluções possíveis, é questão de analisar e escolher.

Fontes Imagens: baixandowallpapers.com e clipartpanda.com

Apresentação: slidescarnival.com