Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Trilha Opensanca | Developer Docker - Dia 04

Opensanca
October 10, 2017

Trilha Opensanca | Developer Docker - Dia 04

Apresentação do quarto dia da Trilha Developer que está sendo oferecida pelo grande amigo Rafael Pereira Girolineto.

Opensanca

October 10, 2017
Tweet

More Decks by Opensanca

Other Decks in Programming

Transcript

  1. Docker Swarm: • Roteia as requisições entre instâncias do mesmo

    serviço • Faz verificação de status • Mantém o nro de instâncias em execução • Permite escalar containers em uma ou mais máquinas
  2. Estrutura do Swarm - Manager • Gerenciamento do estado do

    cluster • Gerenciamento dos serviços ◦ Balanceamento de carga ◦ Service Discovery ◦ Escalabilidade de serviços ◦ Distribuição dos Serviços no Cluster • Swarm API Endpoint • Pode executar containers dependendo do seu estado ◦ Active ou Drain • Pode ser transformado em worker ◦ docker node demote
  3. Estrutura do Swarm - Manager Um cluster com N Managers

    suporta a queda de (N - 1) / 2 Managers • Swarm com 1 manager suporta a queda de 0 managers • Swarm com 3 manager suporta a queda de 1 managers • Swarm com 5 manager suporta a queda de 2 managers Apesar de ser possível utilizar mais de 7 managers, não é recomendado por questões de performance (para manter todo o estado do cluster sincronizado)
  4. Estrutura do Swarm - Worker • Seu propósito é apenas

    executar containers. • Não influencia em nenhuma das operações dos Managers. • Não é possível criar um nó swarm com apenas um nó worker (sem managers) • Um worker pode ser promovido a Manager ◦ docker node promote
  5. Sujando as mãos no mar • Criar um nó no

    labs.play-with-docker.com docker swarm init --advertise-addr [IP Address] docker node ls • Tentar transformá-lo em worker docker node demote [id do node] • Inspecionar o nó docker node inspect [id do node] docker swarm join-token worker • Subir um serviço qualquer docker service create --name nginx -p 80:80 -d nginx:latest docker service ls docker container ps docker node ps
  6. Sujando mais as mãos no mar • Criar adicionar um

    worker (instanciar outro nó) [node2] docker swarm join [token][IP do Manager]:2377 [node2] docker node ls • Transformar novo nó em manager [node1] docker node ls [node1] docker node promote [ID do worker] [node2] docker node ls • Transformar node 1 nó em worker [node2] docker node demote [ID do node1] [node2] docker node ls [node1] docker node ls
  7. Sujando mais ainda as mãos no mar • Listar os

    containers em ambos os nós [node1] docker container ps [node2] docker container ps • Escalar o container para 20 instâncias [node2] docker service scale nginx=20 [node1] docker container ps [node2] docker container ps • Remover o worker (pelo broser, remover o node1) [node2] docker node ls [node2] docker container ps
  8. Dicas e Malemolências > docker node [comando] ls - Listar

    nós do cluster ps - Listar containers executando no nó rm - Remover um nó update - Alterar o estado de um nó inspect - Inspecionar o nó promote - Promove um nó para manager demote - Transforma em worker
  9. Swarm - Placement • É possível influenciar em quais nós

    do swarm serão distribuídos os containers de um serviço • Serviço GLOBAL terá uma instância em cada nó do swarm • Serviço REPLICATED será distribuído pelo cluster, de acordo com regras de placement e carga das máquinas ◦ Placement: (spread) ▪ Busca por nós com o label utilizada no placement ▪ Distribui de maneira uniforme os containers de acordo com diferentes valores do label
  10. Swarm - Exemplo Placement docker service create --replicas 9 --name

    redis --placement-pref 'spread=node.labels.datacenter' Redis:latest Supondo que existam 6 nós com o label datacenter, como seria a distribuição dos containers? datacenter=america : node_1, node_4, node_6 datacenter=europa : node_2, node_5 datacenter=africa : node_3
  11. version: '3' services: c_mongo: image: mongo:latest volumes: - ./node-rest-example/data:/data/db node_server:

    image: rafapg/os-td-nodeserver:latest ports: - 8080:3000 links: - c_mongo depends_on: - c_mongo docker-compose.yml
  12. Segurança no Swarm • Quando um cluster é criado o

    nó inicial asusme papel de CA ◦ --external-ca sobrescreve esse comportamento • Dois tokens (workers / managers) são gerados para garantir que apenas nós designados entrem no cluster ◦ digest do certificado root + segredo gerado aleatoriamente • Quando um nó entra no cluster o manager emite um novo certificado • Os certificados TLS são utilizados na autenticação, autorização e criptografia de toda comunicação no cluster Swarm
  13. Segurança no Swarm • Rotação dos Certificados ◦ Rotacionados a

    cada 3 meses (pode ser configurado) ◦ É possível forçar a troca do certificado (caso tenha sido comprometido) • Troca de certificado ◦ Um certificado novo é gerado e assinado pelo antigo ▪ Isso garante que todos os nós que confiavam no certificado antigo aceitarão o novo certificado ◦ Os managers solicita que todos os workers gerem novos certificados ◦ O certificado antigo é removido (tokens de join mudam a partir disso)