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/

Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes

  • 1.
    Workshop Microservices Distribuindo osmicroservices com Docker e Kubernetes
  • 2.
    Objetivos Ao final destaunidade 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
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
    Containers vs Virtualization VirtualizationContainer • Minutos para iniciar uma VM, e… segundos para iniciar um container
  • 9.
    Docker Docker engine DockerHub “Open platform for building, shipping and running distributed applications"
  • 10.
    Docker • Versão • CommunityEdition (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/
  • 12.
  • 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 anofficial 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 deutilizaçã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 comMaven • 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
  • 20.
  • 21.
  • 22.
    Nexus • Repositório deartefatos 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.
  • 24.
    Docker Registry • Exemplode 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 • Exemplode 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 • Defineum 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
  • 28.
  • 29.
  • 30.
    Docker Compose • Principaiscomandos • 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 • Principaiscomandos • 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
  • 32.
  • 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 dacomunicação dos serviços em containers diferentes
  • 36.
  • 37.
    Kubernetes • Ferramenta paraorquestraçã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, …
  • 38.
  • 39.
  • 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 acriaçã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çãopara 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
  • 43.
  • 44.
    Kubectl CLI • Utilitáriopara 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 • Representaum 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 • Pararodar 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 • Umagrupamento 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 • Paracriar 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 • Simplesdefiniçã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 • Controlao 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 • Paradefinir 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 • Defineum 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 • Paracriar 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 • Capacidadede aumentar e diminuir a escalabilidade automaticamente
  • 58.
    Kubernetes • Auto-scaling • Oferecesuporte à auto-scaling (scale in/out) • Pode ser definido métricas de monitoramento • CPU, Memória, Rede, I/O, …
  • 59.
    Kubernetes • Auto-scaling • Paraconfigurar 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/