Você está na página 1de 101

CLOUD COMPUTING

ANDRÉ PONTES SAMPAIO

profandre.sampaio@fiap.com.br

2019
Prof. André Pontes Sampaio
https://www.linkedin.com/in/andre-pontes-sampaio/

Segmento de
Formação Certificações
atuação

SEFAZ-SP:
Mestrado em
Diretor de Service Offering
Engenharia de
Operações e and Agreement
Teleinformática
Infraestrutura

Banco: MBA em Planning


Consultor Gerenciamento Protection and
Técnico de Projetos Optimization

Telecom: Graduação em Operational


Engenharia Ciência da Support and
Comercial Computação Analysis
Objetivos do Curso

O que são e como funcionam os Contêineres?

Quais ferramentas podem ser utilizadas?

Arquiteturas de Projetos e Infraestrutura como Código (IaC)


Objetivos do Curso

Aulas com
Arquitetura de LABs
explicações e
Contêineres hands-on
muita prática

Adoção de Diferença entre


Kong API
ferramentas Imagens e
Gateway
DevOps Contêineres

Fornecimento de
Cluster Swarm
microserviços Dockerfile X
com Prometheus
com alta Docker-compose
& Grafana
disponibilidade

Laboratórios
Custer K8S com
baseado em
HELM & Istio
Docker e
Service Mesh
Kubernetes
Roteiro do Curso

Aula 01 • CONTÊINERES E ORQUESTRADORES

Aula 02 • CLUSTER SWARM

Aula 03 • KUBERNETES

Aula 04 • MONITORAÇÃO E OBSERVABILIDADE


Materiais de Estudo

Self-paced tutorials: Introduction to Docker and Containers


Disponível em https://container.training/
Maintained by Jérôme Petazzoni and contributors

Microservices Patterns: With examples in Java


1st Edition [2018], Chris Richards
Disponível em: https://microservices.io/patterns/

Building Microservices: Designing Fine-Grained Systems


1st Edition [2015], Sam Newman
CONTÊINERES E ORQUESTRADORES
Como lidar com as questões abaixo?

Serviços de TI Restrições de Questionamentos


Ambientes híbridos
devem atender as orçamento e equipe sobre os retornos
mais complexos de
necessidades dos investimentos
gerenciar
atuais e futuras Aumento dos riscos realizados em TI

AUTOMAÇÃO
+ AGILIDADE
Gestão de Serviços

MAS O QUE SÃO SERVIÇOS???


Onde entram os contêineres?

Ciclo de vida de um código de software


O QUE É INFRA
ESTRUTURA
IMUTÁVEL?
Onde entram os contêineres?

Ciclo de vida de um código de software

ONDE ENTRA A
UTILIZAÇÃO DE
CONTEINERES?
Gestão de Serviços
Gestão de Serviços

Microserviços são
pequenos serviços
autonômos que
funcionam de forma
integrada.

Fonte: Sam Newman


Building Microservices: Designing Fine-Grained Systems
Gestão de Serviços

Microserviços são pequenos:

Focado em fazer 1 coisa bem feita

Quando precisar mudar algo, que seja em um único lugar

Alta coesão: agrupa componentes relacionados no


mesmo código

Como saber quão pequeno? Dependo do contexto.


Gestão de Serviços

Microserviços são autônomos:

Alterados de forma independente uns dos outros

Seu deploy não pode afetar outros serviços

Possibilitam uma abstração de como eles funcionam

Escalabilidade: aumento de capacidade granular


Gestão de Serviços

Microserviços funcionam de forma integrada:

Comunicação por eventos/API

Funcionalidades consumidas por outros


serviços

Resiliência: falha deve ficar isolada e não


impactar o funcionamento global
O pivô das mudanças:
TRANSFORMAÇÃO DIGITAL
Agilidade com contêineres

TI precisa adaptar seus processos para operar e gerenciar


serviços em nuvem
Agilidade com contêineres
Utilização em contêineres

Visão geral do uso de Microserviços


Utilização em contêineres

Exemplo: MICROSERVIÇOS DE COMÉRCIO DIGITAL

Pesquisa de
produtos
Registro ou
Autenticação de
usuários

Carrinho de
compras eletrônico

Processamento de
pagamento
Utilização em contêineres

Chamadas síncronas de API: request X response:

Processamento de pagamento

HTTP POST
JSON

http://servidor/api/v1/pagamento/
Utilização em contêineres

Fazendo a solicitação

{ Processamento de pagamento
"Forma": "CartaoCredito",
"Instituicao": "Visa",
"Parcelas": "1",
"CartaoCredito": { PAYLOAD
"Numero": "4073020000000002", REQUEST
"Expiracao": "12/15",
"CodigoSeguranca": "123",
"Portador": {
"Nome": "Nome Sobrenome",
"DataNascimento": "30/12/1987",
}
}
}
Utilização em contêineres

Resposta de uma solicitação

Processamento de pagamento

PAYLOAD
{ RESPONSE
RESPONSE HEADER
"StatusPagamento": "Sucesso",
Request URL: "StatusInterno": "EmAnalise",
http://servidor/api/pagamento “ValorPago": ”37.94",
Request Method: POST "Mensagem": “Pago com sucesso",
Status Code: 201 CREATED "CodigoRetorno": "012345",
X-Requested-With: XMLHttpRequest
}
Utilização em contêineres

Serviço RESTful: arquitetura REST com API utilizada via HTTP

Processamento de pagamento

Ação Verbos
Recurso (Endpoint) Descrição
(CRUD) HTTPs
Create POST /api/v1/pagamento/ Criar novo pagamento
GET /api/v1/pagamento/ Listar todos os pagamentos
Read
GET /api/v1/pagamento/:id Informações de um pagamento
PATCH /api/v1/pagamento/:id Atualizar alguns campos de um pagamento
Updade
PUT /api/v1/pagamento/:id Atualizar todos os campos de um pagamento
Delete DELETE /api/v1/pagamento/:id Excluir um pagamento
Utilização em contêineres

Hospedando nosso COMÉRCIO DIGITAL em um Cluster

Cluster Docker Swarm


Utilização em contêineres

Onde hospedar nosso COMÉRCIO DIGITAL?


Utilização em contêineres

Novas Plataformas : Aplicação X Conteineres X Functions


AWS Amazon ECS AWS Lambda
Beanstalk Elastic Container Google Cloud Functions
Service Microsoft Azure Functions
Utilização em contêineres

Mobilidade entre diversos ambientes através de Docker


VMs versus Contêineres

Possibilidade de simplificar o deploy com a redução de


erros operacionais e facilitando o gerenciamento de
mudanças.
VMs versus Contêineres

Virtualização de Servidores: otimização de recursos


VMs versus Contêineres

Virtualização de Servidores: Tipos de Hypervisors


VMs versus Contêineres

VM Contêiner
Lenta inicialização: Rápida inicialização:

boot SO + aplicativos boot da aplicação

CPUs virtuais alocadas Definições de limites de


em núcleos físicos uso de CPU e memória

Disco compartilhado
Disco pré-alocado para o
através do sistema de
host da VM
arquivos
VMs versus Contêineres

VM Contêiner

Segurança: Excelente Segurança: Boa

Kernel impede acesso do


VMs vivem em mundos
espaço de memória uns
completamente separados
dos outros

Modificação gera nova


Podem utilizar
cópia do dado que é vista
disco rígido virtual (VHD)
apenas pelo contêiner
dedicado
(copy-on-write)
Utilização de Microserviços em Docker

Imagem portátil definida no Dockerfile

Permite reutilização de imagens prontas


Docker

Desnecessário instalar sistema operacional e


demais dependências da aplicação

Imagem pode ser disponibilizada em um Registro


(Docker Hub) para facilitar o deploy

Aplicação é executada da mesma forma


independente do ambiente
Utilização de Microserviços em Docker

Docker é flexível para encapsular microserviços em vários S.O.


Utilização de Microserviços em Docker
Uso de contêiner está cada vez mais popular

Flexibilidade Maioria das aplicações suportam execução em contêiner

Agilidade Suportam updates com as aplicações em execução (on the fly)

Execução Compartilham trechos do host para uma execução mais leve

Portabilidade Possibilitam desenvolvimento local e distribuição com automação

Escalabilidade
Suportam o aumento horizontal para distribuir carga para novas
réplicas

Orquestração Agrupamento de serviços relacionados interdependentes (stacks)


Workspace Colaborativo
Ferramenta
colaborativa para
agilidade

bit.ly/fiapshift2019
LAB: 1, pausa para ver na prática
Infraestrutura para Microserviços

Visão geral da Arquitetura


Padrões de Arquitetura

Componentes da página: Servidor X Cliente

Interface do
Usuário
Notícias Anúncios

Ranking
Padrões de Arquitetura
Servidor: envia ao cliente trechos HTML

Interface do
Usuário

Cliente Microserviço

Agregação dos Implementa trechos


fragmentos de HTML HTML em cada
na página principal serviço
Padrões de Arquitetura
Cliente: monta e exibe toda a página
ex: Progressive Web App

Interface do
Usuário Semelhante a
aplicativos
Funciona
off-line com
cache local
Acessado de
qualquer
dispositivo e Suporta
navegador mensagens
push, HTTPS e
atualização
Infraestrutura para Microserviços

API Externa
Padrões de Arquitetura

API Gateway versus Backend For Front-end

API Externa

API Gateway

ponto único de entrada


para todos os clientes

pode agregar dados de


vários serviços
Padrões de Arquitetura

API Gateway versus Backend For Front-end

API Externa

Desktop BFF Mobile BFF

ponto de entrada
independente para tipo
de clientes
Padrões de Arquitetura
Token de acesso: autenticação e segurança

API Externa
Vamos nos Divertir!

1. Kahoot.it ou instalar o APP !

2. Baixar o volume do Celular

3. Ao entrar: clicar “Next”

4. Escolher perfil “As a


Student”

5. Idade > 18 ?

6. Clicar: ENTER PIN

7. Colocar Nome (Sobrenome)


Vamos nos Divertir!
Conteinêires e Orquestradores

O que vimos até aqui:

• Microserviços (conceitos e cenários de uso)

• VMs versus Contêineres


TEMPLATE
• Utilização de Microserviços
2 em Docker

• Agilidade com Contêineres


ALTA DISPONIBILIDADE COM CLUSTER SWARM
Gerenciamento Ágil

Gerenciamento ágil de microserviços

Negócios
• Novos serviços
• Agilidade
• Qualidade

TI
• Automação (1)
• Arquitetura escalável (2)
• Flexibilidade (3)
Ponto de atrito

• Outsourcing clássico da TI

• Outsourcing ágil baseado em nuvem


Utilização de Contêineres

Controles híbridos necessários na era da nuvem:


Utilização de Contêineres

Empresas precisam capacitar seus times para a inovação

Controle central Liberdade


Imposição Responsabilidade
Utilização de Contêineres

Pesquisa realizada em 2017 sobre iniciativas utilizando


tecnologias baseada em “Contêiner”:
Utilização de Contêineres

Contêineres permitem o deploy de Microserviços em


diversos ambientes
Frameworks WEB e Serverless

Componentes do nosso COMÉRCIO DIGITAL

Cluster Docker Swarm ou K8S


Utilização de Contêineres

Difícil é escolher quais plataformas utilizar


Utilização de Contêineres

Descobrir e comparar Stacks (Container Tools)

https://stackshare.io/container-tools

Legenda:
Utilização de Contêineres
“Conteinerização” Alta disponibilidade
em diversos nodes

Registro de uma
imagem no Hub
Implantação e Execução
distribuição da padronizada dos
imagem aplicativos

Desenvolvimento
em máquina local

Para
dimensionamento
do aplicativo,
Carateristicas: Aplicações não geram-se novos
Facilita as executáveis (e não
possuem dependências
práticas DevOps criar hosts ou VMs)
do sistema
Infraestrutura para Microserviços

Contêineres gerenciados
Padrões de Arquitetura

Docker: plataforma Runtime de contêineres

Contêineres
gerenciados
Padrões de Arquitetura

Componentes do Docker Engine

Contêineres
gerenciados
Padrões de Arquitetura
Dockerfile: arquivo de configuração de uma
imagem
Contêineres
gerenciados
Aplicação é executada da mesma forma

Dockerfile independente do ambiente

Contém uma série de instruções definindo


como a imagem é construída

Exemplos nos LABs executados no curso


Padrões de Arquitetura
Dockerfile: arquivo de configuração de uma
imagem
Contêineres
gerenciados Exemplos de Instruções:

Dockerfile FROM: indica a imagem base para construção

RUN: execução de comandos não interativos


durante a compilação

EXPOSE: informa as portas que devem ser


publicadas na imagem

COPY: adiciona arquivos e conteúdo do host


na imagem
Padrões de Arquitetura
Dockerfile: arquivo de configuração de uma
imagem
Contêineres Exemplos de Instruções:
gerenciados ADD: é um COPY com funções extras, pois

Dockerfile
permite obter arquivos remotos e
descompactá-los

WORKDIR: define o diretório de trabalho para


instruções subsequentes

ENV: especifica variáveis ​de ambiente em


contêiner lançado a partir da imagem

USER: define o usuário ou o UID a ser usado


durante a execução da imagem
Padrões de Arquitetura

O que são Imagens?

Contêineres
gerenciados Sistema de arquivos somente leitura

Imagem = arquivos + metadados

Camadas empilhadas umas sobre outras

Otimizam : uso do disco, tempos de


transferência e uso da memória
Padrões de Arquitetura
O que são Imagens?

Contêineres
gerenciados
Padrões de Arquitetura

O que são Contêineres?

Contêineres
Conjunto encapsulado de processos em execução
gerenciados

Execução a partir de uma imagem que permite


leitura & gravação

Se uma imagem é somente leitura, como podemos


efetuar mudanças?

Não mudamos. Criamos um novo contêiner a partir


dessa imagem e fazemos alterações nesse contêiner

Quando as alterações forem concluídas, uma nova imagem


deve ser criada
Padrões de Arquitetura
Contêineres versus Imagens

Contêineres
gerenciados
Padrões de Arquitetura

Exemplo de Fluxo de Implantação

Contêineres
gerenciados
Padrões de Arquitetura

Volumes: armazenamento de informações

Contêineres
gerenciados
Utilizados para compartilhar :
• diretório entre vários contêineres
• diretório entre o host e um contêiner
• único arquivo entre o host e um contêiner

Volumes existem independentemente


de contêineres
• Se um contêiner for removido, seus volumes
ainda estarão disponíveis
Padrões de Arquitetura

Volumes: comando -v monta um diretório do


host no contêiner
Contêineres
gerenciados Tratam-se dos mesmos arquivos
entre o host e o contêiner

Semelhantes às ligações
simbólicas

As alterações feitas no host ou no


contêiner serão visíveis entre si
Padrões de Arquitetura
Mapeamento de vol : sintaxe do comando '-v’

[caminho do host]: [caminho do contêiner]: [rw | ro]


Contêineres
gerenciados
Padrões de Arquitetura

Redes: comunicação com o mundo externo

Contêineres
Os contêineres não podem ter endereços IPv4
gerenciados públicos (utilizam endereços privados)

Os serviços internos devem estar expostos


através de IP : porta

Conceitualmente no Docker, uma rede é um


switch virtual

Os ‘nomes’ dos contêineres podem ser resolvidos


por meio de um servidor DNS interno
Padrões de Arquitetura
Redes: comunicação via ‘switch virtual’

Contêineres
gerenciados
Padrões de Arquitetura

Redes: configurações de
contêineres em único host
Contêineres
gerenciados
Porta publicada = 80 Porta publicada = 81 N/A Porta publicada
Padrões de Arquitetura

Drivers de rede suportados pelo Docker


docker run --net
Contêineres
gerenciados
Padrões de Arquitetura

Drivers de rede suportados pelo Docker

Contêineres bridge (default): contêiner recebe uma interface virtual


gerenciados eth0 conectado via bridge com a rede do host

none: contêiner obtém só a interface lo loopback,


não sendo possível enviar/receber tráfego de rede

host: utiliza a própria interface do host com


desempenho nativo (ex: VOIP, jogos, streaming ...)

container: reutiliza a pilha de outro contêiner,


compartilhando interfaces, IPs, rotas, regras, etc

overlay: permite o uso da rede de maneira idêntica em


vários hosts (padrão VXLAN)
Padrões de Arquitetura
Overlay de rede : possibilita o uso
em múltiplos hosts (Cluster Swarm)
Contêineres
gerenciados
Padrões de Arquitetura
Swarm: alta disponibilidade nativa do Docker

Contêineres
gerenciados
Padrões de Arquitetura

Swarm: alta disponibilidade nativa do Docker

Contêineres
Swarm Mode fornece clustering e balanceamento
gerenciados

Criação de redes e aliases automatizada

Swarm possui um DNS interno com


balanceamento de carga em round robin

Rede Overlay cria um Virtual IP que faz o


balanceamento entre os nós do cluster
Padrões de Arquitetura
Swarm: arquivo de configuração
docker-compose.yml
Contêineres
gerenciados
5000 7000
Padrões de Arquitetura
Swarm: DNS nativo e endereço VIP

Contêineres
gerenciados
Infraestrutura para Microserviços

Automação CI/CD
Padrões de Arquitetura

Integração Contínua (CI)

Entrega Contínua (CD)


Padrões de Arquitetura

Detalhes de um Fluxo CI/CD com Docker

Automação
CI/CD
Padrões de Arquitetura
Variáveis de ambiente no docker-compose.yml

Automação Configurações específicas de


CI/CD ambiente (DEV/QA/PROD)

version: '3'
services:
web:
build: .
ports:
- "5000:5000"
LAB: 2
Gerenciamento Ágil

Desafios que devem ser atendidos

Integração
entre:
Microserviços
Obter alta (Baixa Armazenar
Resiliência em
disponibilidade Plataforma) dezenas de
sistemas de
de terabytes de
missão crítica e
Microserviços informação
Mainframe
(Alta
Plataforma)
Gerenciamento Ágil

Automação : acelerando a inovação

• # Instalações disparadas ao mesmo tempo


• # Repositórios utilizados para inspeção e verificação
Gerenciamento Ágil

Arquitetura escalável:
Verticalmente (scale
up/down)
• Adição de recursos:
Horizontalmente
(scale out/in)

Aumento automático
para manter a qualidade
de serviço
• Elasticidade

Remoção da capacidade
excessiva quando a
demanda diminuir,
evitando gastos
Utilização em Alta Disponibilidade

Automação para resolução de incidentes

Cenário 1: ‘VM’ versus ‘Conteineres’ ?


Cenário 2: ‘mesmo site’ versus ‘multi-site’ ?
Utilização em Alta Disponibilidade

Falha segurança isolada: serviço retirado do ar


(network = none)
Serviço comprometido
colocado Offline

Serviço recuperado
colocado Online
Utilização em Alta Disponibilidade

Disponibilidade versus Continuidade

Continuar a
prestar Define as etapas
serviços de TI necessárias para
visando a recuperar após
sobrevivência um DESASTRE
do negócio

Quanto tempo Manter em


será funcionamento
necessário? os serviços
críticos
Qual o SLA alinhados com
definido? as prioridades
de negócio
(PCN)
Utilização em Alta Disponibilidade

RTO: Medidas de redução de risco (Tempo de ativação)


Utilização em Alta Disponibilidade

RPO: Opções de recuperação

(A) Desastre as 10 hrs

15 hrs

(B) Desastre as 16 hrs


Vamos nos Divertir!
Alta Disponibilidade com Cluster Swarm

O que vimos até aqui:

• Utilização do Docker em Alta Disponibilidade

• Gerenciamento Ágil
TEMPLATE
• Arquitetura Escalável2

• Disponibilidade versus Continuidade


- RTO
- RPO
Copyright © 2019 Prof. André Pontes Sampaio
https://www.linkedin.com/in/andre-pontes-sampaio/

Todos direitos reservados. Reprodução ou divulgação


total ou parcial deste documento é expressamente
proíbido sem o consentimento formal, por escrito, do
Professor (autor).

Você também pode gostar