SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
O poder dos microsserviços com
Docker e Kubernetes
Quem vos fala?
Willian Azevedo
Programador há 3 anos
4o ano de Engenharia de Software - Unicesumar
Na MATERA desde Junho 2017
Desenvolvedor Back-End na célula Kenzan
Atuando com microsserviços, Docker e Kubernetes
Entusiasta de arquitetura em microsserviços
Entusiasta DevOps
Contatos:
willian-mga@hotmail.com
www.linkedin.com/in/willian-azevedo
https://github.com/willianmga
https://willianmga.github.io/
Agenda
● O Problema dos Deploys sem contêineres
● Docker, a plataforma de conteinerização
● Gerenciar containers não é tão fácil assim
● Kubernetes, a plataforma de gestão de containers agnóstico a clouds
O Problema dos Deploys sem containers
O Problema dos Deploys sem containers
● Perca de tempo com deploys
○ Deploys manuais
■ Dificultam a automação
■ São feitos diretamente no servidor de aplicação
■ Dependência do estado do servidor de aplicação
○ Deploys automatizados no entanto totalmente dependente da cloud
■ Ex: Utilizando AWS Elastic Beanstalk - preso a AWS
O Problema dos Deploys sem containers
Deploy manual dificulta a automação
O Problema dos Deploys sem containers
● Na minha máquina funciona
○ Aplicação depende totalmente do estado do host
○ Falta de libs, variáveis de ambiente e versões de dependências causa erros inesperados
○ Dificuldade de prever o comportamento da aplicação em diferentes ambientes dev/test/prod
O Problema dos Deploys sem containers
● Dificuldade para escalar novas instâncias da aplicação
○ Aplicação totalmente acoplada à API/Serviços da cloud
○ Cada cloud tem uma API diferente, difícil espalhar aplicação em clouds diferentes
○ Necessita de ferramentas de registro de serviços (ex: Netflix Eureka)
○ Necessita de ferramentas de deploy que sejam compatíveis com a cloud (ex: Netflix Asgard)
○ Necessidade de mudanças drásticas em caso de portabilidade para outra cloud.
Docker, a plataforma de conteinerização
O que é o Docker?
Docker é plataforma de conteinerização de software líder no mundo. Ele possibilita que você containerize - empacote o seu
software em um container - de forma a isolá-lo do sistema operacional da máquina
Este contêiner contêm tudo que seu software precisa para ser executado: libs, variáveis de ambientes, outros softwares - ex: Apache
Tomcat, JRE - e depende apenas que a máquina em que irá executá-lo tenha o Docker instalado.
Docker, a plataforma de conteinerização
A nova forma de fazer deploys
Por que Contêineres?
● Economia de Dinheiro e recursos computacionais
○ Contêineres são muito leves que VM’s - MB’s x GB’s
○ VM’s necessitam de mais recursos computacionais
○ Quanto maior a capacidade de processamento da instância na cloud maior o preço por hora
Por que Contêineres?
● Agilidade e imutabilidade no Deploy
○ A partir de uma imagem Docker seu software pode ser executado rapidamente em qualquer
ambiente.
Como rodar o Jenkins localmente?
docker run --name myjenkins -d -p 8080:8080 -p 50000:50000 -v /var/jenkins_home jenkins
O comando acima executa uma instância do Jenkins - software de integração e entrega contínua - em poucos segundos.
Quanto tempo levaria para executar o Jenkins se fosse necessário ir até o site, fazer download do
war, instalar e configurar um servidor de aplicação e por fim fazer o deploy do Jenkins?
Por que Contêineres?
● Portabilidade
○ Execute contêineres Docker em qualquer SO: Linux, Mac OS, Windows
○ Execute contêineres em Qualquer ambiente (dev/test/prod)
Como contêinerizar minha aplicação?
● Crie imagens Docker a partir de um Dockerfile!
○ Uma imagem é buildada a partir de uma base image e personalizada para sua aplicação
○ Base images são imagens previamente criadas. Sua nova imagem pode ser uma
○ A imagem é então armazenada em um repositório - local ou remoto
○ A imagem é utilizada para executar contêineres
○ Contêineres são instâncias de imagens Docker
Como contêinerizar minha aplicação?
Adicione um arquivo Dockerfile ao root directory da sua aplicação
Como contêinerizar minha aplicação?
Faça o build da imagem através do Dockerfile criado
docker build -t dockerhelloworld-image .
Execute um contêiner a partir da imagem
docker run -d -p 80:8080 dockerhelloworld-image
https://github.com/willianmga/dockerhelloworld
Gerenciar contêineres não é tão fácil assim
A necessidade de um orquestrador de contêineres
Os contêineres resolvem parte dos problemas relacionados a executar microsserviços em
produção. Eles isolam sua aplicação do host OS, no entanto os contêineres ainda precisam ser:
● Agendados
● Distribuidos
● Balanceados conforme a carga
● Dados precisam ser persistidos em algum lugar
● Gerenciados na rede
A plataforma de orquestração de contêineres
Kubernetes, a plataforma de orquestração de
contêineres
Kubernetes é uma plataforma portátil, extensível e de código aberto feito para gerenciar
contêineres.
Kubernetes providencia um ambiente de gerenciamento centralizado em contêineres. Ele orquestra
o processamento, rede e armazenamento de contêineres. Ele provê a simplicidade de plataforma como
serviço (PaaS) com a flexibilidade de infraestrutura como serviço (IaaS), e possibilita portabilidade
entre provedores de infraestrutura.
K8S como plataforma
Kubernetes funciona como uma plataforma em forma de cluster rodando sob o cloud provider de sua
preferência
K8S Cluster
Crie clusters do K8S em sua cloud provider para começar a orquestrar seus contêineres.
Cada cluster possui 1 ou mais nós master e no mínimo 2 nós comuns. Os nós são instâncias de sua
cloud provider
K8S Pods
Seus contêineres são deploiados dentro de pods, que podem possuir um ou vários contêineres.
Cada pod representa uma instância de sua aplicação e são gerenciados pelo K8S. Os pods expõem as
aplicações deploiadas dentro dos contêineres para serem usadas pelo seu client
K8S Services
Pods são gerenciados por um serviço criado para sua aplicação. Ex: account-service
Serviços são gerenciados pelo nó master do cluster
K8S Services
● Principais features dos serviços
○ Registro de serviços nativo
○ Controlador de Replicações
○ Balanceamento de carga
○ Gerenciador de deploys
○ Orquestração de armazenamento
Porque usar kubernetes?
● Use seu tempo para desenvolver o que mais importa
○ Não se preocupe em adicionar features como descoberta serviço, balanceamento de carga
em suas aplicações. Foque no que é mais importante para seu negócio
Porque usar kubernetes?
● Rollouts e Rollbacks simplificados e gerenciados
○ Algoritmos prontos para lançar uma nova versão de sua aplicação
Porque usar kubernetes?
● Escalabilidade fácil
○ Precisa de mais instâncias de sua aplicação? Mude alguns parâmetros e o K8S cuida disso
para você
Porque usar kubernetes?
● Portabilidade de infraestrutura
○ Crie a plataforma de sua aplicação com K8S, versone-a como código e replique-a como
desejar ou precisar em outros cloud-providers
Perguntas?
Obrigado!

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

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 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
 
Desenvolvendo com PHP e Docker
Desenvolvendo com PHP e DockerDesenvolvendo com PHP e Docker
Desenvolvendo com PHP e Docker
 
Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers Docker
 
O que é docker?
O que é docker?O que é docker?
O que é docker?
 
Docker fundamentos
Docker fundamentosDocker fundamentos
Docker fundamentos
 
Docker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de usoDocker: uma visão geral e exemplos de uso
Docker: uma visão geral e exemplos de uso
 
Containers em produção!
Containers em produção!Containers em produção!
Containers em produção!
 
Docker: Uso no dia a dia de desenvolvimento
Docker: Uso no dia a dia de desenvolvimentoDocker: Uso no dia a dia de desenvolvimento
Docker: Uso no dia a dia de desenvolvimento
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Ab...
 
Workshop Docker
Workshop DockerWorkshop Docker
Workshop Docker
 
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...
 
Apresentação docker
Apresentação dockerApresentação docker
Apresentação docker
 
Olá docker
Olá dockerOlá docker
Olá docker
 
Docker para quem tem preguica
Docker para quem tem preguicaDocker para quem tem preguica
Docker para quem tem preguica
 
TDC 2016 Floripa - Workshop docker
TDC 2016 Floripa - Workshop dockerTDC 2016 Floripa - Workshop docker
TDC 2016 Floripa - Workshop docker
 
5. rodando containers docker na aws
5. rodando containers docker na aws5. rodando containers docker na aws
5. rodando containers docker na aws
 
containers-workshop
containers-workshopcontainers-workshop
containers-workshop
 
Docker: ganhe tempo e seja eficiente na entrega de serviços de TI
Docker: ganhe tempo e seja eficiente na entrega de serviços de TIDocker: ganhe tempo e seja eficiente na entrega de serviços de TI
Docker: ganhe tempo e seja eficiente na entrega de serviços de TI
 
Docker - minicurso utfpr 2017
Docker -  minicurso utfpr 2017Docker -  minicurso utfpr 2017
Docker - minicurso utfpr 2017
 

Semelhante a O poder dos microsserviços com Docker e Kubernetes

Semelhante a O poder dos microsserviços com Docker e Kubernetes (20)

DevOpsDays Brasilia 2017
DevOpsDays Brasilia 2017DevOpsDays Brasilia 2017
DevOpsDays Brasilia 2017
 
Usando Docker no desenvolvimento .NET
Usando Docker no desenvolvimento .NETUsando Docker no desenvolvimento .NET
Usando Docker no desenvolvimento .NET
 
Deploying Docker Containers
Deploying Docker ContainersDeploying Docker Containers
Deploying Docker Containers
 
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu DevelopersDesenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
Desenvolvimento em .NET utilizando Docker - Meetup 8 Itu Developers
 
Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes	Orquestrando ambientes com docker e kubernetes
Orquestrando ambientes com docker e kubernetes
 
[Unirede] Webinar: Transportando as aplicações entre vários ambientes com Docker
[Unirede] Webinar: Transportando as aplicações entre vários ambientes com Docker[Unirede] Webinar: Transportando as aplicações entre vários ambientes com Docker
[Unirede] Webinar: Transportando as aplicações entre vários ambientes com Docker
 
Apresentação Docker
Apresentação DockerApresentação Docker
Apresentação Docker
 
Docker meetup
Docker meetupDocker meetup
Docker meetup
 
Iniciando com docker
Iniciando com dockerIniciando com docker
Iniciando com docker
 
Docker.io:
Docker.io: Docker.io:
Docker.io:
 
Transportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com DockerTransportando as aplicações entre vários ambientes com Docker
Transportando as aplicações entre vários ambientes com Docker
 
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
Docker: Primeiros Passos, Dicas e Truques no Gerenciamento de Containers - Se...
 
Containers com docker #CPRecife4
Containers com docker #CPRecife4Containers com docker #CPRecife4
Containers com docker #CPRecife4
 
Docker
DockerDocker
Docker
 
Docker - Básico
Docker - BásicoDocker - Básico
Docker - Básico
 
Docker para iniciantes
Docker para iniciantesDocker para iniciantes
Docker para iniciantes
 
Docker basicão e sem mistérios
Docker basicão e sem mistériosDocker basicão e sem mistérios
Docker basicão e sem mistérios
 
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Fevereiro-2020
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Fevereiro-2020Docker de ponta a ponta: do Desenvolvimento à Nuvem - Fevereiro-2020
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Fevereiro-2020
 
Conheça o Docker
Conheça o DockerConheça o Docker
Conheça o Docker
 
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
 

O poder dos microsserviços com Docker e Kubernetes

  • 1. O poder dos microsserviços com Docker e Kubernetes
  • 2. Quem vos fala? Willian Azevedo Programador há 3 anos 4o ano de Engenharia de Software - Unicesumar Na MATERA desde Junho 2017 Desenvolvedor Back-End na célula Kenzan Atuando com microsserviços, Docker e Kubernetes Entusiasta de arquitetura em microsserviços Entusiasta DevOps Contatos: willian-mga@hotmail.com www.linkedin.com/in/willian-azevedo https://github.com/willianmga https://willianmga.github.io/
  • 3. Agenda ● O Problema dos Deploys sem contêineres ● Docker, a plataforma de conteinerização ● Gerenciar containers não é tão fácil assim ● Kubernetes, a plataforma de gestão de containers agnóstico a clouds
  • 4. O Problema dos Deploys sem containers
  • 5. O Problema dos Deploys sem containers ● Perca de tempo com deploys ○ Deploys manuais ■ Dificultam a automação ■ São feitos diretamente no servidor de aplicação ■ Dependência do estado do servidor de aplicação ○ Deploys automatizados no entanto totalmente dependente da cloud ■ Ex: Utilizando AWS Elastic Beanstalk - preso a AWS
  • 6. O Problema dos Deploys sem containers Deploy manual dificulta a automação
  • 7. O Problema dos Deploys sem containers ● Na minha máquina funciona ○ Aplicação depende totalmente do estado do host ○ Falta de libs, variáveis de ambiente e versões de dependências causa erros inesperados ○ Dificuldade de prever o comportamento da aplicação em diferentes ambientes dev/test/prod
  • 8. O Problema dos Deploys sem containers ● Dificuldade para escalar novas instâncias da aplicação ○ Aplicação totalmente acoplada à API/Serviços da cloud ○ Cada cloud tem uma API diferente, difícil espalhar aplicação em clouds diferentes ○ Necessita de ferramentas de registro de serviços (ex: Netflix Eureka) ○ Necessita de ferramentas de deploy que sejam compatíveis com a cloud (ex: Netflix Asgard) ○ Necessidade de mudanças drásticas em caso de portabilidade para outra cloud.
  • 9. Docker, a plataforma de conteinerização
  • 10. O que é o Docker? Docker é plataforma de conteinerização de software líder no mundo. Ele possibilita que você containerize - empacote o seu software em um container - de forma a isolá-lo do sistema operacional da máquina Este contêiner contêm tudo que seu software precisa para ser executado: libs, variáveis de ambientes, outros softwares - ex: Apache Tomcat, JRE - e depende apenas que a máquina em que irá executá-lo tenha o Docker instalado.
  • 11. Docker, a plataforma de conteinerização A nova forma de fazer deploys
  • 12. Por que Contêineres? ● Economia de Dinheiro e recursos computacionais ○ Contêineres são muito leves que VM’s - MB’s x GB’s ○ VM’s necessitam de mais recursos computacionais ○ Quanto maior a capacidade de processamento da instância na cloud maior o preço por hora
  • 13. Por que Contêineres? ● Agilidade e imutabilidade no Deploy ○ A partir de uma imagem Docker seu software pode ser executado rapidamente em qualquer ambiente. Como rodar o Jenkins localmente? docker run --name myjenkins -d -p 8080:8080 -p 50000:50000 -v /var/jenkins_home jenkins O comando acima executa uma instância do Jenkins - software de integração e entrega contínua - em poucos segundos. Quanto tempo levaria para executar o Jenkins se fosse necessário ir até o site, fazer download do war, instalar e configurar um servidor de aplicação e por fim fazer o deploy do Jenkins?
  • 14. Por que Contêineres? ● Portabilidade ○ Execute contêineres Docker em qualquer SO: Linux, Mac OS, Windows ○ Execute contêineres em Qualquer ambiente (dev/test/prod)
  • 15. Como contêinerizar minha aplicação? ● Crie imagens Docker a partir de um Dockerfile! ○ Uma imagem é buildada a partir de uma base image e personalizada para sua aplicação ○ Base images são imagens previamente criadas. Sua nova imagem pode ser uma ○ A imagem é então armazenada em um repositório - local ou remoto ○ A imagem é utilizada para executar contêineres ○ Contêineres são instâncias de imagens Docker
  • 16. Como contêinerizar minha aplicação? Adicione um arquivo Dockerfile ao root directory da sua aplicação
  • 17. Como contêinerizar minha aplicação? Faça o build da imagem através do Dockerfile criado docker build -t dockerhelloworld-image . Execute um contêiner a partir da imagem docker run -d -p 80:8080 dockerhelloworld-image https://github.com/willianmga/dockerhelloworld
  • 18. Gerenciar contêineres não é tão fácil assim
  • 19. A necessidade de um orquestrador de contêineres Os contêineres resolvem parte dos problemas relacionados a executar microsserviços em produção. Eles isolam sua aplicação do host OS, no entanto os contêineres ainda precisam ser: ● Agendados ● Distribuidos ● Balanceados conforme a carga ● Dados precisam ser persistidos em algum lugar ● Gerenciados na rede
  • 20. A plataforma de orquestração de contêineres
  • 21. Kubernetes, a plataforma de orquestração de contêineres Kubernetes é uma plataforma portátil, extensível e de código aberto feito para gerenciar contêineres. Kubernetes providencia um ambiente de gerenciamento centralizado em contêineres. Ele orquestra o processamento, rede e armazenamento de contêineres. Ele provê a simplicidade de plataforma como serviço (PaaS) com a flexibilidade de infraestrutura como serviço (IaaS), e possibilita portabilidade entre provedores de infraestrutura.
  • 22. K8S como plataforma Kubernetes funciona como uma plataforma em forma de cluster rodando sob o cloud provider de sua preferência
  • 23. K8S Cluster Crie clusters do K8S em sua cloud provider para começar a orquestrar seus contêineres. Cada cluster possui 1 ou mais nós master e no mínimo 2 nós comuns. Os nós são instâncias de sua cloud provider
  • 24. K8S Pods Seus contêineres são deploiados dentro de pods, que podem possuir um ou vários contêineres. Cada pod representa uma instância de sua aplicação e são gerenciados pelo K8S. Os pods expõem as aplicações deploiadas dentro dos contêineres para serem usadas pelo seu client
  • 25. K8S Services Pods são gerenciados por um serviço criado para sua aplicação. Ex: account-service Serviços são gerenciados pelo nó master do cluster
  • 26. K8S Services ● Principais features dos serviços ○ Registro de serviços nativo ○ Controlador de Replicações ○ Balanceamento de carga ○ Gerenciador de deploys ○ Orquestração de armazenamento
  • 27. Porque usar kubernetes? ● Use seu tempo para desenvolver o que mais importa ○ Não se preocupe em adicionar features como descoberta serviço, balanceamento de carga em suas aplicações. Foque no que é mais importante para seu negócio
  • 28. Porque usar kubernetes? ● Rollouts e Rollbacks simplificados e gerenciados ○ Algoritmos prontos para lançar uma nova versão de sua aplicação
  • 29. Porque usar kubernetes? ● Escalabilidade fácil ○ Precisa de mais instâncias de sua aplicação? Mude alguns parâmetros e o K8S cuida disso para você
  • 30. Porque usar kubernetes? ● Portabilidade de infraestrutura ○ Crie a plataforma de sua aplicação com K8S, versone-a como código e replique-a como desejar ou precisar em outros cloud-providers