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

Orquestradores de Contêineres. Swarm ou Kubernetes (PHP Experience 2018)

Orquestradores de Contêineres. Swarm ou Kubernetes (PHP Experience 2018)

Palestra apresentada dia 6 de março de 2018 no PHP Experience em São Paulo. Mostramos alguns conceitos de orquestração de contêineres e comparamos diversos detalhes dos orquestradores mais utilizados no momento, Kubernetes e Docker Swarm. Também mostramos nos seguintes videos algumas features de cada um. https://youtu.be/3VEImK7rHNA (Swarm), https://youtu.be/JNnmgTjzo6A (Kubernetes)

280fecb4f048de5ecf36bec281609ea4?s=128

Wellington F. Silva

March 06, 2018
Tweet

Transcript

  1. Orquestradores de contêineres: SWARM OU KUBERNETES

  2. Wellington F. Silva contato: @_wsilva nicks: wsilva, boina, tom, fisi

    funções: pai, tec. telecom, programador, sysadmin, docker community leader, instrutor, escritor, zend certified engineer e docker certified associate
  3. Agenda • Docker 101 • Fluxo básico de trabalho com

    Docker • Problemas comuns em Produção • Orquestração • Revisitando conceitos • Docker Swarm (Swarm mode) • Kubernetes • Demos
  4. Disclaimer • Vamos passar muito rapidamente pelo que é o

    Docker • Foco na orquestração de contêineres
  5. O que é DOCKER?

  6. None
  7. None
  8. O que é DOCKER?

  9. “Ferramenta para virtualização no nível do Sistema Operacional.”

  10. –Wellington F. Silva “Ferramenta para virtualização no nível do Sistema

    Operacional.”
  11. Tipos de Virtualização

  12. Tipos de Virtualização • Full Virtualization

  13. Tipos de Virtualização • Full Virtualization • Partial Virtualization

  14. Tipos de Virtualização • Full Virtualization • Partial Virtualization •

    Paravirtualization
  15. Tipos de Virtualização • Full Virtualization • Partial Virtualization •

    Paravirtualization • OS Level Virtualization
  16. Tipos de Virtualização • Full Virtualization • Partial Virtualization •

    Paravirtualization • OS Level Virtualization Docker
  17. Docker NÃO é VM

  18. SERVIDOR SERVIDOR HOST OS HOST OS CONTAINER ENGINE HYPERVISOR BINS/LIBS

    GUEST OS APP GUEST OS BINS/LIBS BINS/LIBS APP APP APP VM VM Container Container
  19. Diferentes, não excludentes SERVIDOR XEN UBUNTU LINUX DOCKER ENGINE BINS/LIBS

    MYSQL DEBIAN LINUX BINS/LIBS NGINX BINS/LIBS PHP-FPM DOCKER ENGINE WINDOWS 2016 SERVER BINS/LIBS SQL SERVER
  20. Fluxo básico de trabalho com Docker?

  21. Client Docker Host docker daemon Contêineres Imagens Registry Fluxo básico

    de trabalho com Docker
  22. Fluxo básico de trabalho com Docker Client Docker Host docker

    run redis docker daemon Contêineres Imagens Registry
  23. Fluxo básico de trabalho com Docker Client Docker Host docker

    run redis docker daemon Contêineres Imagens Registry
  24. Fluxo básico de trabalho com Docker Client Docker Host docker

    run redis docker daemon Contêineres Imagens Registry
  25. Fluxo básico de trabalho com Docker Client Docker Host docker

    run redis docker daemon Contêineres Imagens Registry
  26. Fluxo básico de trabalho com Docker Client Docker Host docker

    run redis docker daemon Contêineres Imagens Registry
  27. Como escalar para vários servidores em produção?

  28. Problemas comuns em Produção • Como gerenciar o ciclo de

    vida dos contêineres?
  29. Problemas comuns em Produção • Como gerenciar o ciclo de

    vida dos contêineres? • Como escalar?
  30. Problemas comuns em Produção • Como gerenciar o ciclo de

    vida dos contêineres? • Como escalar? • Como recriar contêineres que morrem?
  31. Problemas comuns em Produção • Como gerenciar o ciclo de

    vida dos contêineres? • Como escalar? • Como recriar contêineres que morrem? • Como atualizar o sistema sem downtime?
  32. Problemas comuns em Produção • Como gerenciar o ciclo de

    vida dos contêineres? • Como escalar? • Como recriar contêineres que morrem? • Como atualizar o sistema sem downtime? • Onde colocar meus contêineres?
  33. Problemas comuns em Produção • Como gerenciar o ciclo de

    vida dos contêineres? • Como escalar? • Como recriar contêineres que morrem? • Como atualizar o sistema sem downtime? • Onde colocar meus contêineres? • Como os contêineres vão se comunicar?
  34. Problemas comuns em Produção • Como gerenciar o ciclo de

    vida dos contêineres? • Como escalar? • Como recriar contêineres que morrem? • Como atualizar o sistema sem downtime? • Onde colocar meus contêineres? • Como os contêineres vão se comunicar? • Como gerenciar informações sensíveis?
  35. ORQUESTRAÇÃO

  36. ORQUESTRAÇÃO Dicionário Oxford: 2. the planning or coordination of the

    elements of a situation to produce a desired effect especially surreptitiously
  37. ORQUESTRAÇÃO Dicionário Oxford: 2. the planning or coordination of the

    elements of a situation to produce a desired effect especially surreptitiously Tradução livre: O planejamento ou a coordenação dos elementos de uma situação para produzir um efeito desejado, especialmente evitando chamar atenção
  38. ORQUESTRAÇÃO Dicionário Oxford: 2. the planning or coordination of the

    elements of a situation to produce a desired effect especially surreptitiously Tradução livre: O planejamento ou a coordenação dos elementos de uma situação para produzir um efeito desejado, especialmente evitando chamar atenção
  39. Orquestração
 (elementos) • Contêineres • Hosts • Redes • Volumes

    • Monitoramento Maestro João Carlos Martins
  40. Orquestração
 (efeitos desejados) • Aplicação rodando • Escalabilidade automática •

    Tolerante a falha (failover, rebalanceamento, health checks, etc) • Melhor utilização de recursos • Minimizar intervenção manual
  41. Revisitando Conceitos

  42. Revisitando Conceitos • Cluster

  43. Revisitando Conceitos • Cluster • Service Discovery

  44. Revisitando Conceitos • Cluster • Service Discovery • Load balance

  45. Revisitando Conceitos • Cluster • Service Discovery • Load balance

    • High Availability (HA)
  46. Revisitando Conceitos • Cluster • Service Discovery • Load balance

    • High Availability (HA) • Auto Scale
  47. Docker Swarm

  48. Docker Swarm (contextualizando) • Criado e gerido pela Docker Inc

  49. Docker Swarm (contextualizando) • Criado e gerido pela Docker Inc

    • Lançado em dezembro de 2014, beta (v0.2) e dependente de service discovery externo
  50. Docker Swarm (contextualizando) • Criado e gerido pela Docker Inc

    • Lançado em dezembro de 2014, beta (v0.2) e dependente de service discovery externo • Incorporado ao engine do Docker na versão 1.12 (28/07/2016) - pronto para produção - Swarm Mode
  51. Docker Swarm (contextualizando) • Criado e gerido pela Docker Inc

    • Lançado em dezembro de 2014, beta (v0.2) e dependente de service discovery externo • Incorporado ao engine do Docker na versão 1.12 (28/07/2016) - pronto para produção - Swarm Mode • Melhorado na versões seguintes com secrets, stacks, configs, autolock
  52. Swarm Mode

  53. • Nodes Swarm mode (Componentes)

  54. • Nodes • Stacks Swarm mode (Componentes)

  55. • Nodes • Stacks • Services Swarm mode (Componentes)

  56. • Nodes • Stacks • Services • Tasks Swarm mode

    (Componentes)
  57. Swarm mode (Componentes) Service web nginx
 (3 réplicas) Task: nginx.1

    node A task: nginx.2 node C task: nginx.3 node B Container 1 Container 2 Container 3
  58. • Workers Swarm mode (Nodes)

  59. • Workers • rodam contêineres e reportam os estados Swarm

    mode (Nodes)
  60. • Workers • instâncias que rodam contêineres e reportam os

    estados deles • Managers Swarm mode (Nodes)
  61. • Workers • instâncias que rodam contêineres e reportam os

    estados deles • Managers • decidem onde contêineres devem ser executados Swarm mode (Nodes)
  62. • Workers • instâncias que rodam contêineres e reportam os

    estados deles • Managers • decidem onde contêineres devem ser executados • mantém o desired state dos serviços Swarm mode (Nodes)
  63. • Workers • instâncias que rodam contêineres e reportam os

    estados deles • Managers • decidem onde contêineres devem ser executados • mantém o desired state dos serviços • gerenciam o cluster Swarm mode (Nodes)
  64. Swarm mode (Topologia) Worker Worker Worker Worker Worker raft consensus

    group Manager (líder) Manager Manager CA CA CA TLS TLS TLS TLS TLS TLS TLS TLS gossip network
  65. • Managers compartilham dados via raft Swarm mode (HA)

  66. • Managers compartilham dados via raft • Se o líder

    falhar outro manager assume Swarm mode (HA)
  67. • Managers compartilham dados via raft • Se o líder

    falhar outro manager assume • Devemos manter o quorum (maioria de votos): (n/2+1), n é números de nós managers Swarm mode (HA)
  68. Swarm mode (Quorum) Qtde managers Quorum Qtde falhas 1 1

    0 2 2 0 3 2 1 4 3 1 5 3 2 6 4 2 7 4 3
  69. Swarm mode (Quorum) Qtde managers Quorum Qtde falhas 1 1

    0 2 2 0 3 2 1 4 3 1 5 3 2 6 4 2 7 4 3
  70. Swarm mode (Consensus) http://demo.consensus.group 
 (by Laura Frank)

  71. Swarm mode (scheduler) $ docker service create nginx Worker Manager

    API Orchestrator Allocator Dispatcher Scheduler Worker Executor
  72. Swarm mode (features) Scheduler focado em HA e com conhecimento

    de topologia $ docker node update \
 --label-add "az=sa-east-1" \
 demo $ docker service create \
 --placement-pref "spread=node.label.az" \
 demo
  73. Swarm mode (features) Encriptação TLS ponta a ponta entre todos

    os nós e com rotação automática de chaves $ docker swarm ca --help
  74. Swarm mode (features) Protege acesso indevido ao cluster com autolock

    $ docker swarm init --autolock
 $ docker swarm update --autolock
  75. Swarm mode (features) Gerencia de secrets, qualquer coisa de até

    500Kb que fica criptografada $ echo "senha" | docker secret \
 create senha-db - $ docker service create \
 --secret-add=senha-db demo $ docker service update \
 --secret-rm=senha-db demo
  76. Swarm mode (features) Dentro dos contêineres a secret, será montada

    em um tmpfs em /run/secret/secret-name # cat /run/secrets/senha-db
 senha
  77. Swarm mode (features) Gerencia de config, muito similar ao secret,

    porém não encriptado e não é montado no tmpfs $ echo "config" | docker config \
 create cfg-demo - $ docker service create \
 --config-add=cfg-demo demo $ docker service update \
 --config-rm=cfg-demo demo
  78. Swarm mode (features) Dentro dos contêineres a config, será montada

    no / # cat /cfg-demo
 config
  79. Swarm mode (features) Facilita healthcheck, não só o contêiner mas

    as app dentro do serviço pode ser monitorada $ docker service create \
 --health-cmd \
 --health-interval \
 --health-retries \
 --health-start-period \
 --health-timeout \
 --no-healthcheck
  80. Swarm mode (features) Controle de update de serviços $ docker

    service update \
 --update-parallelism \
 --update-order \
 --update-monitor \
 --update-delay \
 --update-max-failure-ratio \
 --update-failure-action
  81. Swarm mode (features) Controle de rollback de serviços se for

    usado 
 --update-failure-action=rollback então em caso de falhas o rollback é automático $ docker service update --rollback \
 --rollback-parallelism \
 --rollback-order \
 --rollback-monitor \
 --rollback-delay \
 --rollback-max-failure-ratio \
 --rollback-failure-action
  82. Swarm mode (features) Centraliza logs de serviços $ docker service

    logs --tail 10 \
 demo | sort -k3 -k4
  83. Kubernetes 
 k8s

  84. Kubernetes (contextualizando) • 3ª geração de orquestrador de contêineres do

    Google (Borg, Omega e K8s)
  85. Kubernetes (contextualizando) • 3ª geração de orquestrador de contêineres do

    Google (Borg, Omega e K8s) • Código aberto desde 2014 (1º release Set/2014)
  86. Kubernetes (contextualizando) • 3ª geração de orquestrador de contêineres do

    Google (Borg, Omega e K8s) • Código aberto desde 2014 (1º release Set/2014) • Grandes contribuições da Red Hat (Openshift v3)
  87. Kubernetes (contextualizando) • 3ª geração de orquestrador de contêineres do

    Google (Borg, Omega e K8s) • Código aberto desde 2014 (1º release Set/2014) • Grandes contribuições da Red Hat (Openshift v3) • Experiência do Google (Em 2014 mais de 2 bilhões de contêineres eram criados por semana)
  88. Kubernetes (contextualizando) • 3ª geração de orquestrador de contêineres do

    Google (Borg, Omega e K8s) • Código aberto desde 2014 (1º release Set/2014) • Grandes contribuições da Red Hat (Openshift v3) • Experiência do Google (Em 2014 mais de 2 bilhões de contêineres eram criados por semana) • Um dos projetos com mais contribuição no Github
  89. Kubernetes (contextualizando) • Código doado e mantido pela CNCF (Cloud

    Native Computing Foundation)
  90. Kubernetes (Componentes) Master • Kube-apiserver

  91. Kubernetes (Componentes) Master • Kube-apiserver • etcd

  92. Kubernetes (Componentes) Master • Kube-apiserver • etcd • Kube-scheduler

  93. Kubernetes (Componentes) Master • Kube-apiserver • etcd • Kube-scheduler •

    Kube-controller-manager
  94. Kubernetes (Componentes) Node • Kubelet

  95. Kubernetes (Componentes) Node • Kubelet • Kube-proxy

  96. Kubernetes (Componentes) Node • Kubelet • Kube-proxy • Container runtime

  97. Kubernetes (Recursos) • Nodes

  98. Kubernetes (Recursos) • Nodes • Services, load balancers e redes

  99. Kubernetes (Recursos) • Nodes • Services, load balancers e redes

    • Controllers (ReplicaSet, ReplicationController, Deployments, StatefulSets, DaemonSets, Jobs)
  100. Kubernetes (Recursos) • Nodes • Services, load balancers e redes

    • Controllers (ReplicaSet, ReplicationController, Deployments, StatefulSets, DaemonSets, Jobs) • Pods
  101. Kubernetes (Recursos) • Nodes • Services, load balancers e redes

    • Controllers (ReplicaSet, ReplicationController, Deployments, StatefulSets, DaemonSets, Jobs) • Pods • Containers
  102. Master Kubernetes (Componentes) etcd etcd etcd Master API Server Controller

    Manager Scheduler Node kublet Proxy Docker Pod Pod Node kublet Proxy Docker Pod Pod Internet
  103. –Linus Torvalds “Talk is cheap. Show me the code.”

  104. Como escolher?

  105. Como escolher? Analisando os requisitos para seu projeto: • Qtde

    de máquinas (dezenas, centenas, milhares) • Quais regiões vão usar suas aplicações (BR, Latin America, Mundo Todo) • Quão sensível deve ser a escalabilidade das aplicações • Que container engine é melhor para o projeto
  106. Docker for Desktop e Enterprise

  107. Grato 
 Quer mais? • Curso Docker: 
 http://bit.ly/curso-docker •

    Telegram: 
 http://t.me/dockerbr • Slacks:
 http://bit.ly/docker-slack
 http://dockr.ly/community • Meetup em SP:
 http://events.docker.com/ sao-paulo