SlideShare uma empresa Scribd logo
Workshop Microservices
Distribuindo os microservices com
Docker e Kubernetes
Objetivos
Ao final desta unidade você irá:
• Compreender como empacotar os projetos de micro
services com Docker
• Publicar imagens em repositórios Docker
• Compor um grupo de imagens Docker em uma
arquitetura de microservices com Docker Compose
• Orquestrar a arquitetura de microservices com
Kubernetes
Agenda
• Containers
• Docker
• Docker Registry
• Docker Compose
• Kubernetes
Deployment
Deployment
• Multiple services per host
Deployment
• Service instances per VM
Deployment
• Service instances per Container
Containers vs Virtualization
Virtualization Container
• Minutos para iniciar uma VM, e… segundos para iniciar um
container
Docker
Docker engine Docker Hub
“Open platform for building, shipping and
running distributed applications"
Docker
• Versão
• Community Edition (CE) - Free
• Enterprise Edition (EE) - Pago
• Basic, Standard, Advanced
• https://www.docker.com/pricing
Docker
• Instalação
• Native
• Windows
• https://docs.docker.com/docker-for-windows/install/
• Mac
• https://docs.docker.com/docker-for-mac/install/
• Ubuntu / Debian / Fedora
• https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/
• https://docs.docker.com/engine/installation/linux/docker-ce/debian/
• https://docs.docker.com/engine/installation/linux/docker-ce/fedora/
• Toolbox
• Windows
• https://docs.docker.com/toolbox/toolbox_install_windows/
• Mac
• https://docs.docker.com/toolbox/toolbox_install_mac/
Docker
Docker
• Principais comandos
• docker run
• Roda um determinado container
• docker build
• Constrói novas imagens a partir de um Dockerfile
• docker ps
• Lista todos os containers em execução
• docker start
• Inicia um determinado container já executado anteriormente
• docker stop
• Finaliza um container em execução
• docker rm
• Remove um determinado container da máquina
Docker
• Principais comandos
• docker rmi
• Remove uma determinada image da máquina
• docker tag
• Cria uma tag para uma determinada imagem
• docker login
• Realiza uma sessão de login em um determinado Docker repo privado
• docker pull
• Busca uma imagem pré-construído de um Docker repo publico
• docker logs
• Verifica os logs de execução de um determinado container
• docker commit
• Salva o estado de um container como uma imagem
Docker
• Principais comandos
• docker diff
• Lista as mudanças em arquivos e diretórios
• docker images
• Lista todas as imagens disponíveis no Docker repo local
• docker inspect
• Inspeciona informações sobre containers e imagens
• docker attach
• Interage com containers em execução
• docker kill
• Finaliza o processo de execução de um determinado container
Dockerfile
# Use an official Python runtime as a parent image
FROM python:2.7-slim
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
ADD . /app
# Install any needed packages specified in requirements.txt
RUN pip install -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]
Docker
• Exemplo de utilização
• docker build -t friendlyhello.
• docker images
REPOSITORY TAG IMAGE ID
friendlyhello latest 326387cea398
• docker run -p 4000:80 friendlyhello
• docker run -d -p 4000:80 friendlyhello
• docker ps
CONTAINER ID IMAGE COMMAND CREATED
1fa4ab2cf395 friendlyhello "python app.py" 28 seconds ago
• docker stop 1fa4ab2cf395
• docker rm 1fa4ab2cf395
• docker rmi friendlyhello
Docker
• Integração com Maven
• docker-maven-plugin (Spotify)
• https://github.com/spotify/docker-maven-plugin
• mvn clean package docker:build
• mvn … docker:build -DpushImageTags -DdockerImageTags=latest
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>${project.groupId}/${project.artifactId}</imageName>
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
Laboratório 1 (docker-lab01)
• Empacote os projetos de microservices com
Docker
Docker Registry
Docker Registry
Nexus
• Repositório de artefatos opensource
• Maven, Bower, Npm, Rubygems, Pypl, Nuget, Docker
• Popularmente utilizado para projetos Maven
• Fornece uma interface Web de administração
• Suporta repositórios Docker
• A partir da versão 3.x
Nexus
Docker Registry
• Exemplo de push de imagens no Nexus
• docker build -t friendlyhello.
• docker login -u user -p pass nexus-ip:8081
Login Succeeded
• docker tag friendlyhello nexus-ip:8081/friendlyhello
• docker push nexus-ip:8081/friendlyhello
The push refers to a repository [nexus-ip:18081/friendlyhello]
2261473fba2b: Preparing
ce6c8756685b: Waiting
2261473fba2b: Pushed
qa: digest: sha256:f64205d492c2f3b15a1b6c146b36e493ec764c7e2cc330 size: 2424
Docker Registry
• Exemplo de pull de imagens no Nexus
• docker login -u user -p pass nexus-ip:8081
Login Succeeded
• docker pull nexus-ip:8081/friendlyhello
latest: Pulling from amazonlinux
8e3fa21c4cc4: Pull complete
Digest:
sha256:59895a93ba4345e238926c0f4f4a3969b1ec5aa0a291a182816a4630c62df769
• docker run -d -p 4000:80 friendlyhello
• docker ps
CONTAINER ID IMAGE COMMAND CREATED
1fa4ab2cf395 friendlyhello "python app.py" 28 seconds ago
Laboratório 2 (docker-lab02)
• Publique as imagens Docker dos microservices
no Nexus
Docker Compose
• Define um agrupamento de containers em uma única
definição
• Configuração centralizada em um único arquivo
• docker-compose.yml
• Define dependências entre containers
• Fornece mecanismo de service discovery
• Embedded Docker DNS
• Permite mapear
• Portas, volumes, variáveis, etc
Docker Compose
• docker-compose.yml
Docker Compose
Docker Compose
• Principais comandos
• docker-compose pull
• Buscar a lista de images definidas pela composição em um repo
público
• docker-compose logs
• Verificar os logs de execução dos containers definidos na
composição
• docker-compose build
• Construir as imagens definidas pela composição
• docker-compose up
• Criar e iniciar os containers definidos pela composição
• docker-compose down
• Destruir os containers definidos pela composição
Docker Compose
• Principais comandos
• docker-compose start
• Iniciar os containers definidos pela composição
• docker-compose stop
• Parar os containers definidos pela composição
• docker-compose restart
• Reiniciar os containers definidos pela composição
• docker-compose run
• Rodar um comando em um serviço definido pela composição
• docker-compose exec
• Rodar um comando em um container em execução
• docker-compose kill
• Finalizar um container em execução definido pela composição
Microservices Compose
Microservices Compose
version: '2'
services:
config-server:
image: microservices/config-server:latest
mem_limit: 1073741824 # RAM 1GB
environment:
- SPRING_PROFILES_ACTIVE=${PROFILE}
expose:
- "8888"
ports:
- "8888:8888"
networks:
- microservices
eureka-server:
image: microservices/eureka-server:latest
mem_limit: 1073741824 # RAM 1GB
environment:
- SPRING_PROFILES_ACTIVE=${PROFILE}
links:
- config-server
expose:
- "8761"
ports:
- "8761:8761"
networks:
- microservices
...
• docker-compose up
• docker-compose stop
• docker-compose start
• docker-compose down
Laboratório 3 (docker-lab03)
• Componha a arquitetura de microservices
utilizando Docker Compose
Orquestração
• Gerenciamento da comunicação dos serviços em containers
diferentes
Ferramentas
AWS ECS
Kubernetes
• Ferramenta para orquestração de containers
• Suporta múltiplos ambientes cloud
• É possível rodar localmente
• Suporta múltiplos containers runtime
• 100% open source, escrito em Go
• Eficiente, Portável, Extensível, …
Kubernetes
• High-level Overview
Kubernetes
• Clustering Model
Kubernetes
• Instalação Local
• VirtualBox
• https://www.virtualbox.org/wiki/Downloads
• Vagrant
• https://www.vagrantup.com/
• Minikube
• https://github.com/kubernetes/minikube
• Kubeclt
• https://kubernetes.io/docs/tasks/tools/install-kubectl/
• Outras alternativas
• https://kubernetes.io/docs/setup/pick-right-solution/
Vagrant
• Permite a criação de ambientes de desenvolvimento, automatizando
a geração de máquina virtual
• VMs são criadas a partir de imagens denominadas Boxes
• Suporta VirtualBox, VMWare, Hyper-V e outros
• Instalação e download
• https://www.vagrantup.com/downloads.html
• Principais comandos
• vagrant init [box]
• vagrant up
• vagrant halt
• vagrant destroy
• vagrant reload
• vagrant ssh
• vagrant status
Minikube
• Uma opção para rodar Kubernetes localmente
• https://github.com/kubernetes/minikube
• Principais comandos
• minikube start
• Cria e inicia o Kubernetes cluster
• minikube stop
• Desliga o Kubernetes cluster
• minikube dashboard
• Acessa o Kubernetes dashboard
• minikube ssh -v 7
• Acesso via SSH no Kubernetes cluster
• minikube service [name]
• Acessa um serviço disponibilizado pelo Kubernetes cluster
• minikube ip
• Verifica o ip de acesso para o Kubernetes cluster
Minikube Dashboard
Kubectl CLI
• Utilitário para executar comandos no Kubernetes cluster
• https://kubernetes.io/docs/user-guide/kubectl-overview/
• Principais comandos
• kubectl get pods / deployments
• kubectl create -f [filename]
• kubectl run [name] —image=[imagename]
• kubectl logs [name]
• kubectl update [name]
• kubectl delete [name]
• kubectl resize
• kubectl expose
• kubectl describe
Laboratório 4 (docker-lab04)
• Realize a instalação do Kubernetes cluster na sua
máquina local
Kubernetes
• Pods
• Representa um container em
execução
• Pode agrupar múltiplos containers
• Define um host lógico no
cluster
• Cada Pod recebe um IP
• Evita o conflito de portas
• Comunicam-se entre si sem
precisar de NAT
10.1.2.0/24
10.1.1.0/24
10.1.1.211 10.1.1.2
10.1.2.106
10.1.3.0/24
10.1.3.4510.1.3.17
10.1.3.0/24
Kubernetes
• Pods
• Para rodar um Pod
• kubectl run app --image=app/image --port=8080
• kubectl create -f pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: wildfly-pod
labels:
name: wildfly-pod
spec:
containers:
- name: wildfly
image: jboss/wildfly:10.1.0.Final
ports:
- containerPort: 8080
pod.yaml
Kubernetes
• Services
• Um agrupamento lógico de Pods que
realizam uma mesma função
• Define o conceito de load balancer
• A escolha do Pod é randômica mas
suporta afinidade por session
• Stick session
• Disponibiliza um IP e porta virtual
• Também um DNS name
Client
Pod
Container
Pod
Container
Pod
ContainerContainer
Service
Label	selector:
type	=	FE
VIP
type	=	FE type	=	FE type	=	FE
Kubernetes
• Services
• Para criar um novo Service
• kubectl expose [type] —name=[name] 
--port=[port] —target-port=[port]
• kubectl create -f service.yaml
apiVersion: v1
kind: Service
metadata:
name: wildfly-service
spec:
selector:
app: wildfly-rc-pod
ports:
- name: web
port: 8080
service.yaml
Kubernetes
• Labels
• Simples definição de key=value
• Pode ser associado a qualquer componente
• Pods, Replication Controllers, Services, Deployment, …
• Ajuda no processo de organização do cluster
• Utilizado em conjunto com selectors
• Exemplos
• release=stable, release=canary
• environment=dev, environment=qa
Kubernetes
• Replication Controlles
• Configura o número de réplicas de um determinado pod
• Assegura que um número desejado de pods encontram-se
em execução
• Pode ter a execução agendada
• Suporta configuração por definição de label
• Replica Sets
• Nova geração de Replication Controllers
Replication	
Controller
Pod
Pod
frontend
Pod
frontend
Pod Pod
Replication	
Controller
#pods	=	1
version	=	v2
show:	version	=	v2
version=	v1 version	=	v1 version	=	v2
Replication	
Controller
#pods	=	2
version	=	v1
Kubernetes
• Replication Controlles
• Para criar um novo Replication Controller
• kubectl create -f replication.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: wildfly-rc
spec:
replicas: 2
selector:
app: wildfly-rc-pod
template:
metadata:
labels:
app: wildfly-rc-pod
spec:
containers:
- name: wildfly
image: jboss/wildfly:10.1.0.Final
ports:
- containerPort: 8080
replication.yaml
Kubernetes
• Deployments
• Controla o process de atualização de pods
• Inicia / reinicia um replication controller
• Verifique o status do deployment
• Green ou Red
• Atualiza o deployment para utilizar uma
nova imagem
• Zero offline
• Rollback para uma versão anterior
...
Kubernetes
• Deployments
• Para definir um novo deployment
• kubectl create -f deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: wildfly-deployment
spec:
replicas: 3
template:
metadata:
labels:
app: wildfly
spec:
containers:
- name: wildfly
image: jboss/wildfly:10.1.0.Final
ports:
- containerPort: 8080
deployment.yaml
Kubernetes
• Jobs
• Define um processo de execução finito (início e fim)
• Cria um ou mais pods e assegura que eles executaram
com sucesso até o final
• Define dois tipos de jobs
• Nonparallel (1 pod) e parallel (N pods)
• Suporta a definição de um Cron job
• Time-based jobs
• Ainda encontra-se em versão Beta
Kubernetes
• Jobs
• Para criar um novo Job
• kubectl create -f job.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: wait
spec:
template:
metadata:
name: wait
spec:
containers:
- name: wait
image: ubuntu
command: ["sleep", "20"]
restartPolicy: Never
job.yaml
Auto Scaling
• Capacidade de aumentar e diminuir a escalabilidade
automaticamente
Kubernetes
• Auto-scaling
• Oferece suporte à auto-scaling (scale in/out)
• Pode ser definido métricas de monitoramento
• CPU, Memória, Rede, I/O, …
Kubernetes
• Auto-scaling
• Para configurar suporte ao auto-scaling
• kubectl run wildfly-server 
--image=jboss/wildfly:10.1.0.Final 
--requests=cpu=500m,memory=1024M 
--expose --port=8080
• kubectl autoscale deployment wildfly-server 
--cpu-percent=50 --min=2 --max=10
Laboratório 5 (docker-lab05)
• Orquestre o deployment da arquitetura de
microservices com Kubernetes
Conclusões
• Containers são ótimas alternativas para microservices
• Docker é a tecnologia mais utilizada atualmente para
criação de containers
• Containers necessitam de orquestração
• Kubernetes oferece um ambiente para orquestração de
containers
• Suporte autoscaling, práticas de deployment, gestão de
execução, etc…
• Microservices = Docker + Kubernetes ;)
Revisão
Nessa unidade você teve a oportunidade de:
• Compreender como empacotar os projetos de micro
services com Docker
• Publicar imagens em repositórios Docker
• Compor um grupo de imagens Docker em uma
arquitetura de microservices com Docker Compose
• Orquestrar a arquitetura de microservices com
Kubernetes
Referências
• https://docs.docker.com/samples/
• http://www.sonatype.org/nexus/
• https://docs.docker.com/compose/
• https://docs.docker.com/compose/startup-order/
• https://github.com/jwilder/dockerize
• https://github.com/kubernetes/minikube
• https://kubernetes.io/docs/user-guide/kubectl-overview/
• https://github.com/GoogleCloudPlatform/kubernetes-workshops
• https://github.com/christian-posta/docker-kubernetes-workshop
• https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
• https://github.com/kubernetes/kompose
• https://dzone.com/articles/microservices-with-kubernetes-and-docker
• https://fabric8.io/
• https://github.com/fabric8io/spring-cloud-kubernetes
• https://www.openshift.org/

Mais conteúdo relacionado

PDF
Workshop Microservices - Construindo APIs RESTful com Spring Boot
PDF
Workshop Microservices - Arquitetura Microservices
PDF
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
PDF
As novidades da nova versão do Java 9
PDF
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
PDF
5. rodando containers docker na aws
PPTX
Introdução a Containers Docker
PDF
TDC Floripa 2017 - Criando Microservices Reativos com Java
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Arquitetura Microservices
Workshop Microservices - Microservices com Spring Cloud e Netflix OSS
As novidades da nova versão do Java 9
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
5. rodando containers docker na aws
Introdução a Containers Docker
TDC Floripa 2017 - Criando Microservices Reativos com Java

Mais procurados (20)

PDF
Docker - Tutorial for beginners
PPTX
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
PPTX
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
PDF
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
PPTX
containers-workshop
PDF
Olá docker
PDF
TDC 2015 POA - O Fantástico Mundo de Docker
PDF
Java 9, 10 e ... 11
PDF
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
PDF
Docker: uma visão geral
PDF
CDI Extensions e DeltaSpike
PDF
Deploying Docker Containers
PDF
O poder do Docker (7 Masters)
PDF
Apresentação Docker
PDF
Docker fundamentos
PDF
Docker Swarm Cluster
PPTX
Ambiente de desenvolvimento com docker e ruby on rails
ODP
TDC 2014 SP - E o DeltaSpike ?
PDF
Introdução à plataforma Docker
Docker - Tutorial for beginners
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Azure Talks - Agosto-2018
Docker de ponta a ponta - do Desenvolvimento à Nuvem - .NET SP - Outubro-2018
Service Mesh com Istio e Kubernetes - Wellington Figueira da Silva
containers-workshop
Olá docker
TDC 2015 POA - O Fantástico Mundo de Docker
Java 9, 10 e ... 11
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
Docker: uma visão geral
CDI Extensions e DeltaSpike
Deploying Docker Containers
O poder do Docker (7 Masters)
Apresentação Docker
Docker fundamentos
Docker Swarm Cluster
Ambiente de desenvolvimento com docker e ruby on rails
TDC 2014 SP - E o DeltaSpike ?
Introdução à plataforma Docker
Anúncio

Semelhante a Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes (20)

PPTX
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
PDF
Freedomday2016 - Fique na caixinha, docker
PPTX
Orquestrando ambientes com docker e kubernetes
PDF
Aula-18-Semana-06-Dockers Aula em formato ppt.pdf
PPTX
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
PPTX
Simplificando a montagem de ambientes de Dev/Testes com Docker - Interop Summ...
PPTX
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
PPTX
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
PPTX
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Fevereiro-2020
PDF
Introdução-a-Docker-compactado.pdf
PPTX
Docker e suas tecnologias
PPTX
Docker e suas tecnologias por @cesarnog
PPTX
Docker + Azure - Global Azure Bootcamp 2018 - Campinas-SP
PPTX
PPTX
Docker + Azure - Global Azure Bootcamp 2018 - São Paulo-SP
PDF
Introdução ao docker
PDF
Container revolucao
PDF
Source-to-container no mundo real
PPTX
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
PPTX
Padrōes, Especificações, Runtimes: construindo containers melhores
Docker + Kubernetes + Azure: opções disponíveis para uso de Containers na nuv...
Freedomday2016 - Fique na caixinha, docker
Orquestrando ambientes com docker e kubernetes
Aula-18-Semana-06-Dockers Aula em formato ppt.pdf
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - .NET SP...
Simplificando a montagem de ambientes de Dev/Testes com Docker - Interop Summ...
ASP.NET Core + Kubernetes + Azure: Orquestrando containers na nuvem - Develop...
ASP.NET Core + Kubernetes + Azure - Community Bootcamp - Abril/2018
Docker de ponta a ponta: do Desenvolvimento à Nuvem - Fevereiro-2020
Introdução-a-Docker-compactado.pdf
Docker e suas tecnologias
Docker e suas tecnologias por @cesarnog
Docker + Azure - Global Azure Bootcamp 2018 - Campinas-SP
Docker + Azure - Global Azure Bootcamp 2018 - São Paulo-SP
Introdução ao docker
Container revolucao
Source-to-container no mundo real
Docker para Desenvolvedores .NET - .NET SP - Novembro-2018
Padrōes, Especificações, Runtimes: construindo containers melhores
Anúncio

Mais de Rodrigo Cândido da Silva (20)

PDF
Cloud Native Java EE
PDF
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
PDF
Protecting Java Microservices: Best Practices and Strategies
PDF
GUJavaSC - Protegendo Microservices em Java
PDF
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
PDF
GUJavaSC - Criando Micro-serviços Reativos com Java
PDF
JavaOne 2016 - Reactive Microservices with Java and Java EE
PDF
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
PDF
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
PDF
GUJavaSC - Combinando AngularJS com Java EE
PDF
QCon 2015 - Combinando AngularJS com Java EE
PDF
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
PDF
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
PDF
TDC 2015 - Segurança em Recursos RESTful com OAuth2
PDF
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
PDF
ConFoo 2015 - Securing RESTful resources with OAuth2
PDF
GUJavaSC - Unit Testing com Java EE
PDF
GUJavaSC - Mini-curso Java EE
PDF
JavaOne 2014 - Securing RESTful Resources with OAuth2
PDF
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EE
Cloud Native Java EE
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Protecting Java Microservices: Best Practices and Strategies
GUJavaSC - Protegendo Microservices em Java
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Criando Micro-serviços Reativos com Java
JavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
GUJavaSC - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EE
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
TDC 2015 - Segurança em Recursos RESTful com OAuth2
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
ConFoo 2015 - Securing RESTful resources with OAuth2
GUJavaSC - Unit Testing com Java EE
GUJavaSC - Mini-curso Java EE
JavaOne 2014 - Securing RESTful Resources with OAuth2
JavaOne 2014 - Supporting Multi-tenancy Applications with Java EE

Último (19)

PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PDF
Apple Pippin Uma breve introdução. - David Glotz
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Processos na gestão de transportes, TM100 Col18
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
COBITxITIL-Entenda as diferença em uso governança TI
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Custos e liquidação no SAP Transportation Management, TM130 Col18
Aula04-Academia Heri- Tecnologia Geral 2025
Apple Pippin Uma breve introdução. - David Glotz
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Aula 18 - Manipulacao De Arquivos python
Processos na gestão de transportes, TM100 Col18

Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes

  • 1. Workshop Microservices Distribuindo os microservices com Docker e Kubernetes
  • 2. Objetivos Ao final desta unidade você irá: • Compreender como empacotar os projetos de micro services com Docker • Publicar imagens em repositórios Docker • Compor um grupo de imagens Docker em uma arquitetura de microservices com Docker Compose • Orquestrar a arquitetura de microservices com Kubernetes
  • 3. Agenda • Containers • Docker • Docker Registry • Docker Compose • Kubernetes
  • 8. Containers vs Virtualization Virtualization Container • Minutos para iniciar uma VM, e… segundos para iniciar um container
  • 9. Docker Docker engine Docker Hub “Open platform for building, shipping and running distributed applications"
  • 10. Docker • Versão • Community Edition (CE) - Free • Enterprise Edition (EE) - Pago • Basic, Standard, Advanced • https://www.docker.com/pricing
  • 11. Docker • Instalação • Native • Windows • https://docs.docker.com/docker-for-windows/install/ • Mac • https://docs.docker.com/docker-for-mac/install/ • Ubuntu / Debian / Fedora • https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ • https://docs.docker.com/engine/installation/linux/docker-ce/debian/ • https://docs.docker.com/engine/installation/linux/docker-ce/fedora/ • Toolbox • Windows • https://docs.docker.com/toolbox/toolbox_install_windows/ • Mac • https://docs.docker.com/toolbox/toolbox_install_mac/
  • 13. Docker • Principais comandos • docker run • Roda um determinado container • docker build • Constrói novas imagens a partir de um Dockerfile • docker ps • Lista todos os containers em execução • docker start • Inicia um determinado container já executado anteriormente • docker stop • Finaliza um container em execução • docker rm • Remove um determinado container da máquina
  • 14. Docker • Principais comandos • docker rmi • Remove uma determinada image da máquina • docker tag • Cria uma tag para uma determinada imagem • docker login • Realiza uma sessão de login em um determinado Docker repo privado • docker pull • Busca uma imagem pré-construído de um Docker repo publico • docker logs • Verifica os logs de execução de um determinado container • docker commit • Salva o estado de um container como uma imagem
  • 15. Docker • Principais comandos • docker diff • Lista as mudanças em arquivos e diretórios • docker images • Lista todas as imagens disponíveis no Docker repo local • docker inspect • Inspeciona informações sobre containers e imagens • docker attach • Interage com containers em execução • docker kill • Finaliza o processo de execução de um determinado container
  • 16. Dockerfile # Use an official Python runtime as a parent image FROM python:2.7-slim # Set the working directory to /app WORKDIR /app # Copy the current directory contents into the container at /app ADD . /app # Install any needed packages specified in requirements.txt RUN pip install -r requirements.txt # Make port 80 available to the world outside this container EXPOSE 80 # Define environment variable ENV NAME World # Run app.py when the container launches CMD ["python", "app.py"]
  • 17. Docker • Exemplo de utilização • docker build -t friendlyhello. • docker images REPOSITORY TAG IMAGE ID friendlyhello latest 326387cea398 • docker run -p 4000:80 friendlyhello • docker run -d -p 4000:80 friendlyhello • docker ps CONTAINER ID IMAGE COMMAND CREATED 1fa4ab2cf395 friendlyhello "python app.py" 28 seconds ago • docker stop 1fa4ab2cf395 • docker rm 1fa4ab2cf395 • docker rmi friendlyhello
  • 18. Docker • Integração com Maven • docker-maven-plugin (Spotify) • https://github.com/spotify/docker-maven-plugin • mvn clean package docker:build • mvn … docker:build -DpushImageTags -DdockerImageTags=latest <plugin> <groupId>com.spotify</groupId> <artifactId>docker-maven-plugin</artifactId> <version>0.4.13</version> <configuration> <imageName>${project.groupId}/${project.artifactId}</imageName> <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory> <resources> <resource> <targetPath>/</targetPath> <directory>${project.build.directory}</directory> <include>${project.build.finalName}.jar</include> </resource> </resources> </configuration> </plugin>
  • 19. Laboratório 1 (docker-lab01) • Empacote os projetos de microservices com Docker
  • 22. Nexus • Repositório de artefatos opensource • Maven, Bower, Npm, Rubygems, Pypl, Nuget, Docker • Popularmente utilizado para projetos Maven • Fornece uma interface Web de administração • Suporta repositórios Docker • A partir da versão 3.x
  • 23. Nexus
  • 24. Docker Registry • Exemplo de push de imagens no Nexus • docker build -t friendlyhello. • docker login -u user -p pass nexus-ip:8081 Login Succeeded • docker tag friendlyhello nexus-ip:8081/friendlyhello • docker push nexus-ip:8081/friendlyhello The push refers to a repository [nexus-ip:18081/friendlyhello] 2261473fba2b: Preparing ce6c8756685b: Waiting 2261473fba2b: Pushed qa: digest: sha256:f64205d492c2f3b15a1b6c146b36e493ec764c7e2cc330 size: 2424
  • 25. Docker Registry • Exemplo de pull de imagens no Nexus • docker login -u user -p pass nexus-ip:8081 Login Succeeded • docker pull nexus-ip:8081/friendlyhello latest: Pulling from amazonlinux 8e3fa21c4cc4: Pull complete Digest: sha256:59895a93ba4345e238926c0f4f4a3969b1ec5aa0a291a182816a4630c62df769 • docker run -d -p 4000:80 friendlyhello • docker ps CONTAINER ID IMAGE COMMAND CREATED 1fa4ab2cf395 friendlyhello "python app.py" 28 seconds ago
  • 26. Laboratório 2 (docker-lab02) • Publique as imagens Docker dos microservices no Nexus
  • 27. Docker Compose • Define um agrupamento de containers em uma única definição • Configuração centralizada em um único arquivo • docker-compose.yml • Define dependências entre containers • Fornece mecanismo de service discovery • Embedded Docker DNS • Permite mapear • Portas, volumes, variáveis, etc
  • 30. Docker Compose • Principais comandos • docker-compose pull • Buscar a lista de images definidas pela composição em um repo público • docker-compose logs • Verificar os logs de execução dos containers definidos na composição • docker-compose build • Construir as imagens definidas pela composição • docker-compose up • Criar e iniciar os containers definidos pela composição • docker-compose down • Destruir os containers definidos pela composição
  • 31. Docker Compose • Principais comandos • docker-compose start • Iniciar os containers definidos pela composição • docker-compose stop • Parar os containers definidos pela composição • docker-compose restart • Reiniciar os containers definidos pela composição • docker-compose run • Rodar um comando em um serviço definido pela composição • docker-compose exec • Rodar um comando em um container em execução • docker-compose kill • Finalizar um container em execução definido pela composição
  • 33. Microservices Compose version: '2' services: config-server: image: microservices/config-server:latest mem_limit: 1073741824 # RAM 1GB environment: - SPRING_PROFILES_ACTIVE=${PROFILE} expose: - "8888" ports: - "8888:8888" networks: - microservices eureka-server: image: microservices/eureka-server:latest mem_limit: 1073741824 # RAM 1GB environment: - SPRING_PROFILES_ACTIVE=${PROFILE} links: - config-server expose: - "8761" ports: - "8761:8761" networks: - microservices ... • docker-compose up • docker-compose stop • docker-compose start • docker-compose down
  • 34. Laboratório 3 (docker-lab03) • Componha a arquitetura de microservices utilizando Docker Compose
  • 35. Orquestração • Gerenciamento da comunicação dos serviços em containers diferentes
  • 37. Kubernetes • Ferramenta para orquestração de containers • Suporta múltiplos ambientes cloud • É possível rodar localmente • Suporta múltiplos containers runtime • 100% open source, escrito em Go • Eficiente, Portável, Extensível, …
  • 40. Kubernetes • Instalação Local • VirtualBox • https://www.virtualbox.org/wiki/Downloads • Vagrant • https://www.vagrantup.com/ • Minikube • https://github.com/kubernetes/minikube • Kubeclt • https://kubernetes.io/docs/tasks/tools/install-kubectl/ • Outras alternativas • https://kubernetes.io/docs/setup/pick-right-solution/
  • 41. Vagrant • Permite a criação de ambientes de desenvolvimento, automatizando a geração de máquina virtual • VMs são criadas a partir de imagens denominadas Boxes • Suporta VirtualBox, VMWare, Hyper-V e outros • Instalação e download • https://www.vagrantup.com/downloads.html • Principais comandos • vagrant init [box] • vagrant up • vagrant halt • vagrant destroy • vagrant reload • vagrant ssh • vagrant status
  • 42. Minikube • Uma opção para rodar Kubernetes localmente • https://github.com/kubernetes/minikube • Principais comandos • minikube start • Cria e inicia o Kubernetes cluster • minikube stop • Desliga o Kubernetes cluster • minikube dashboard • Acessa o Kubernetes dashboard • minikube ssh -v 7 • Acesso via SSH no Kubernetes cluster • minikube service [name] • Acessa um serviço disponibilizado pelo Kubernetes cluster • minikube ip • Verifica o ip de acesso para o Kubernetes cluster
  • 44. Kubectl CLI • Utilitário para executar comandos no Kubernetes cluster • https://kubernetes.io/docs/user-guide/kubectl-overview/ • Principais comandos • kubectl get pods / deployments • kubectl create -f [filename] • kubectl run [name] —image=[imagename] • kubectl logs [name] • kubectl update [name] • kubectl delete [name] • kubectl resize • kubectl expose • kubectl describe
  • 45. Laboratório 4 (docker-lab04) • Realize a instalação do Kubernetes cluster na sua máquina local
  • 46. Kubernetes • Pods • Representa um container em execução • Pode agrupar múltiplos containers • Define um host lógico no cluster • Cada Pod recebe um IP • Evita o conflito de portas • Comunicam-se entre si sem precisar de NAT 10.1.2.0/24 10.1.1.0/24 10.1.1.211 10.1.1.2 10.1.2.106 10.1.3.0/24 10.1.3.4510.1.3.17 10.1.3.0/24
  • 47. Kubernetes • Pods • Para rodar um Pod • kubectl run app --image=app/image --port=8080 • kubectl create -f pod.yaml apiVersion: v1 kind: Pod metadata: name: wildfly-pod labels: name: wildfly-pod spec: containers: - name: wildfly image: jboss/wildfly:10.1.0.Final ports: - containerPort: 8080 pod.yaml
  • 48. Kubernetes • Services • Um agrupamento lógico de Pods que realizam uma mesma função • Define o conceito de load balancer • A escolha do Pod é randômica mas suporta afinidade por session • Stick session • Disponibiliza um IP e porta virtual • Também um DNS name Client Pod Container Pod Container Pod ContainerContainer Service Label selector: type = FE VIP type = FE type = FE type = FE
  • 49. Kubernetes • Services • Para criar um novo Service • kubectl expose [type] —name=[name] --port=[port] —target-port=[port] • kubectl create -f service.yaml apiVersion: v1 kind: Service metadata: name: wildfly-service spec: selector: app: wildfly-rc-pod ports: - name: web port: 8080 service.yaml
  • 50. Kubernetes • Labels • Simples definição de key=value • Pode ser associado a qualquer componente • Pods, Replication Controllers, Services, Deployment, … • Ajuda no processo de organização do cluster • Utilizado em conjunto com selectors • Exemplos • release=stable, release=canary • environment=dev, environment=qa
  • 51. Kubernetes • Replication Controlles • Configura o número de réplicas de um determinado pod • Assegura que um número desejado de pods encontram-se em execução • Pode ter a execução agendada • Suporta configuração por definição de label • Replica Sets • Nova geração de Replication Controllers Replication Controller Pod Pod frontend Pod frontend Pod Pod Replication Controller #pods = 1 version = v2 show: version = v2 version= v1 version = v1 version = v2 Replication Controller #pods = 2 version = v1
  • 52. Kubernetes • Replication Controlles • Para criar um novo Replication Controller • kubectl create -f replication.yaml apiVersion: v1 kind: ReplicationController metadata: name: wildfly-rc spec: replicas: 2 selector: app: wildfly-rc-pod template: metadata: labels: app: wildfly-rc-pod spec: containers: - name: wildfly image: jboss/wildfly:10.1.0.Final ports: - containerPort: 8080 replication.yaml
  • 53. Kubernetes • Deployments • Controla o process de atualização de pods • Inicia / reinicia um replication controller • Verifique o status do deployment • Green ou Red • Atualiza o deployment para utilizar uma nova imagem • Zero offline • Rollback para uma versão anterior ...
  • 54. Kubernetes • Deployments • Para definir um novo deployment • kubectl create -f deployment.yaml apiVersion: extensions/v1beta1 kind: Deployment metadata: name: wildfly-deployment spec: replicas: 3 template: metadata: labels: app: wildfly spec: containers: - name: wildfly image: jboss/wildfly:10.1.0.Final ports: - containerPort: 8080 deployment.yaml
  • 55. Kubernetes • Jobs • Define um processo de execução finito (início e fim) • Cria um ou mais pods e assegura que eles executaram com sucesso até o final • Define dois tipos de jobs • Nonparallel (1 pod) e parallel (N pods) • Suporta a definição de um Cron job • Time-based jobs • Ainda encontra-se em versão Beta
  • 56. Kubernetes • Jobs • Para criar um novo Job • kubectl create -f job.yaml apiVersion: batch/v1 kind: Job metadata: name: wait spec: template: metadata: name: wait spec: containers: - name: wait image: ubuntu command: ["sleep", "20"] restartPolicy: Never job.yaml
  • 57. Auto Scaling • Capacidade de aumentar e diminuir a escalabilidade automaticamente
  • 58. Kubernetes • Auto-scaling • Oferece suporte à auto-scaling (scale in/out) • Pode ser definido métricas de monitoramento • CPU, Memória, Rede, I/O, …
  • 59. Kubernetes • Auto-scaling • Para configurar suporte ao auto-scaling • kubectl run wildfly-server --image=jboss/wildfly:10.1.0.Final --requests=cpu=500m,memory=1024M --expose --port=8080 • kubectl autoscale deployment wildfly-server --cpu-percent=50 --min=2 --max=10
  • 60. Laboratório 5 (docker-lab05) • Orquestre o deployment da arquitetura de microservices com Kubernetes
  • 61. Conclusões • Containers são ótimas alternativas para microservices • Docker é a tecnologia mais utilizada atualmente para criação de containers • Containers necessitam de orquestração • Kubernetes oferece um ambiente para orquestração de containers • Suporte autoscaling, práticas de deployment, gestão de execução, etc… • Microservices = Docker + Kubernetes ;)
  • 62. Revisão Nessa unidade você teve a oportunidade de: • Compreender como empacotar os projetos de micro services com Docker • Publicar imagens em repositórios Docker • Compor um grupo de imagens Docker em uma arquitetura de microservices com Docker Compose • Orquestrar a arquitetura de microservices com Kubernetes
  • 63. Referências • https://docs.docker.com/samples/ • http://www.sonatype.org/nexus/ • https://docs.docker.com/compose/ • https://docs.docker.com/compose/startup-order/ • https://github.com/jwilder/dockerize • https://github.com/kubernetes/minikube • https://kubernetes.io/docs/user-guide/kubectl-overview/ • https://github.com/GoogleCloudPlatform/kubernetes-workshops • https://github.com/christian-posta/docker-kubernetes-workshop • https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/ • https://github.com/kubernetes/kompose • https://dzone.com/articles/microservices-with-kubernetes-and-docker • https://fabric8.io/ • https://github.com/fabric8io/spring-cloud-kubernetes • https://www.openshift.org/