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!

O poder dos microsserviços com Docker e Kubernetes

  • 1.
    O poder dosmicrosserviços com Docker e Kubernetes
  • 2.
    Quem vos fala? WillianAzevedo 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 Problemados 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 dosDeploys sem containers
  • 5.
    O Problema dosDeploys 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 dosDeploys sem containers Deploy manual dificulta a automação
  • 7.
    O Problema dosDeploys 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 dosDeploys 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 plataformade 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 plataformade 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 minhaaplicaçã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 minhaaplicação? Adicione um arquivo Dockerfile ao root directory da sua aplicação
  • 17.
    Como contêinerizar minhaaplicaçã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 deum 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 deorquestração de contêineres
  • 21.
    Kubernetes, a plataformade 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 Kubernetesfunciona como uma plataforma em forma de cluster rodando sob o cloud provider de sua preferência
  • 23.
    K8S Cluster Crie clustersdo 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êineressã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ãogerenciados 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 ● Principaisfeatures 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
  • 31.
  • 32.