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

Swarm vs Kubernetes (PHPeste 2019)

Swarm vs Kubernetes (PHPeste 2019)

Palestra apresentada dia 19 de outubro de 2019 no PHPeste 2019 em Recife-PE. Mostramos alguns conceitos de orquestração de contêineres e comparamos diversos detalhes e um guia de comparação para escolher um dos dois orquestradores mais utilizados no momento, Kubernetes ou Docker Swarm.

Wellington F. Silva

October 19, 2019
Tweet

More Decks by Wellington F. Silva

Other Decks in Technology

Transcript

  1. X

    View Slide

  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
    * deprecation in favor of Well

    View Slide

  3. Agenda
    • Docker 101
    • Fluxo básico de trabalho com contêineres
    • Problemas comuns em produção
    • Orquestração e conceitos
    • Docker Swarm,Swarm mode, Kubernetes
    • Demos

    View Slide

  4. Disclaimer

    View Slide

  5. Disclaimer
    • Breve explicação sobre Contêineres e e Docker
    • Foco na Orquestração dos contêineres

    View Slide

  6. O que é Docker?

    View Slide

  7. View Slide

  8. View Slide

  9. O que é Docker?

    View Slide

  10. O que é Docker
    Contêiner?

    View Slide

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

    View Slide

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

    View Slide

  13. Tipos de
    Virtualização

    View Slide

  14. Tipos de Virtualização
    • Full Virtualisation

    View Slide

  15. Tipos de Virtualização
    • Full Virtualisation
    • Partial Virtualisation

    View Slide

  16. Tipos de Virtualização
    • Full Virtualisation
    • Partial Virtualisation
    • Paravirtualisation

    View Slide

  17. Tipos de Virtualização
    • Full Virtualisation
    • Partial Virtualisation
    • Paravirtualisation
    • OS Level Virtualisation

    View Slide

  18. Tipos de Virtualização
    • Full Virtualisation
    • Partial Virtualisation
    • Paravirtualisation
    • OS Level Virtualisation Contêineres

    View Slide

  19. Contêiner NÃO é VM

    View Slide

  20. 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

    View Slide

  21. 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

    View Slide

  22. Fluxo comum de
    trabalho com Docker

    View Slide

  23. Fluxo comum
    Client Docker Host
    docker daemon
    Contêineres
    Imagens
    Registry

    View Slide

  24. Fluxo comum
    Client Docker Host
    docker run redis docker daemon
    Contêineres
    Imagens
    Registry

    View Slide

  25. Fluxo comum
    Client Docker Host
    docker run redis docker daemon
    Contêineres
    Imagens
    Registry

    View Slide

  26. Fluxo comum
    Client Docker Host
    docker run redis docker daemon
    Contêineres
    Imagens
    Registry

    View Slide

  27. Fluxo comum
    Client Docker Host
    docker run redis docker daemon
    Contêineres
    Imagens
    Registry

    View Slide

  28. Fluxo comum
    Client Docker Host
    docker run redis docker daemon
    Contêineres
    Imagens
    Registry

    View Slide

  29. Como escalar para
    vários servidores em
    produção?

    View Slide

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

    View Slide

  31. Problemas comuns de
    produção
    • Como gerenciar o ciclo de vida dos
    contêineres?
    • Como escalar?

    View Slide

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

    View Slide

  33. Problemas comuns de
    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?

    View Slide

  34. Problemas comuns de
    produção
    • Onde colocar meus contêineres?

    View Slide

  35. Problemas comuns de
    produção
    • Onde colocar meus contêineres?
    • Como os contêineres vão se comunicar?

    View Slide

  36. Problemas comuns de
    produção
    • Onde colocar meus contêineres?
    • Como os contêineres vão se comunicar?
    • Como gerenciar informações sensíveis?

    View Slide

  37. Orquestração

    View Slide

  38. Orquestração
    Dicionário Oxford: 2. the planning or coordination of the elements
    of a situation to produce a desired effect especially surreptitiously

    View Slide

  39. 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

    View Slide

  40. 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

    View Slide

  41. Orquestração
    (Elementos)
    • Contêineres
    • Hosts
    • Redes
    • Volumes
    • Monitoramento
    • Logs

    View Slide

  42. Orquestração
    (Efeitos desejados)
    • Aplicação sempre rodando
    • Escalabilidade automática
    • Tolerante a falha (failover, balanceamento,
    health checks, etc)
    • Melhor utilização de recursos
    • Minimizar intervenção manual

    View Slide

  43. Revisitando
    conceitos

    View Slide

  44. Revisitando Conceitos
    • Cluster

    View Slide

  45. Revisitando Conceitos
    • Cluster
    • Service Discovery

    View Slide

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

    View Slide

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

    View Slide

  48. Revisitando Conceitos
    • Cluster
    • Service Discovery
    • Load balance
    • High Availability (HA)
    • Auto Scale

    View Slide

  49. Revisitando Conceitos
    • Cluster
    • Service Discovery
    • Load balance
    • High Availability (HA)
    • Auto Scale

    View Slide

  50. Docker Swarm

    View Slide

  51. Docker Swarm
    • Criado e mantido pela Docker Inc

    View Slide

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

    View Slide

  53. Docker Swarm
    • Criado e mantido 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 (Jul/2016) - pronto para produção - Swarm
    Mode

    View Slide

  54. Docker Swarm
    • Criado e mantido 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 (Jul/2016) - pronto para produção - Swarm
    Mode
    • Melhorias na versões seguintes com secrets,
    stacks, configs, autolock

    View Slide

  55. Kubernetes
    (k8s)

    View Slide

  56. Kubernetes
    • Mantido pela CNCF (Cloud Native Computing
    Foundation

    View Slide

  57. Kubernetes
    • Mantido pela CNCF (Cloud Native Computing
    Foundation
    • 3ª geração de orquestrador de contêineres do
    Google (Borg, Omega e K8s)

    View Slide

  58. Kubernetes
    • Mantido pela CNCF (Cloud Native Computing
    Foundation
    • 3ª geração de orquestrador de contêineres do
    Google (Borg, Omega e K8s)
    • Código aberto desde 2014 (1º release Set/2014)

    View Slide

  59. Kubernetes
    • Mantido pela CNCF (Cloud Native Computing
    Foundation
    • 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)

    View Slide

  60. Kubernetes
    • Mantido pela CNCF (Cloud Native Computing
    Foundation
    • 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)

    View Slide

  61. Arquitetura

    View Slide

  62. Arquitetura (Swarm)
    Nodes - Máquinas que compõe o cluster
    • Worker
    • rodam contêineres e reportam os estados deles
    • Manager
    • rodam contêineres e reportam os estados deles
    • decidem onde contêineres devem ser executados
    • mantém o desired state dos serviços

    View Slide

  63. Arquitetura (Swarm)
    Worker Worker Worker Worker Worker
    raft consensus group
    Manager (líder) Manager
    Manager
    CA CA
    CA
    TLS TLS TLS
    TLS
    TLS
    TLS
    TLS
    TLS

    View Slide

  64. Arquitetura (Swarm)
    • Managers compartilham dados via raft
    consensus
    • Se o líder falhar outro manager assume
    • Devemos manter o quórum
    (maioria de votos: n/2+1) n é números de nós
    managers

    View Slide

  65. Arquitetura (Swarm)
    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

    View Slide

  66. Arquitetura (Swarm)
    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

    View Slide

  67. Arquitetura (Swarm)
    Demo:
    https://raft.github.io/

    View Slide

  68. Arquitetura (Kubernetes)
    Nodes - Máquinas que compõe o cluster
    • Node
    • rodam contêineres e reportam os estados deles
    • Master
    • decidem onde contêineres devem ser
    executados
    • mantém o desired state dos serviços

    View Slide

  69. Arquitetura (Kubernetes)
    Componentes dos Master
    • Etcd
    • Banco de dados (chave/valor) distribuído
    • Podem rodar dentro do master ou em
    máquinas separadas
    • Implementa raft consensus

    View Slide

  70. Arquitetura (Kubernetes)
    Componentes dos Master
    • Api sever
    • Expõe a API do K8s para receber
    comandos
    • Interage com os demais componentes para
    controlar o cluster

    View Slide

  71. Arquitetura (Kubernetes)
    Componentes dos Master
    • Scheduler
    • Componente que gerencia contêineres
    (pods) que ainda não tem um nó de destino.
    • Escolhe em qual máquina é melhor colocar
    o contêiner (pod)

    View Slide

  72. Arquitetura (Kubernetes)
    Componentes dos Master
    • Controller Manager
    • Componete que roda ativamente garantindo
    que as demais estruturas estão rodando:
    • Node Controller
    • Replication Controller
    • ServiceAccount & Token Controllers

    View Slide

  73. Arquitetura (Kubernetes)
    Componentes dos Nodes
    • Kubelet
    • Piloto da máquina, executa os contêineres
    • Interage com Api server para controlar os
    contêineres (pods)
    • Interage com Runtime de contêiner
    (Docker, ContêinerD, rkt, etc)

    View Slide

  74. Arquitetura (Kubernetes)
    Componentes dos Nodes
    • Kube proxy
    • Controla o acesso aos pod via rede

    View Slide

  75. Arquitetura (Kubernetes)
    Componentes dos Nodes
    • Container Runtime Interface (CRI)
    • Interage com o Kubelet que manda rodar
    contêineres

    View Slide

  76. Master
    etcd
    etcd
    etcd
    Master
    API
    Server
    Controller
    Manager
    Scheduler
    Node
    kublet Proxy
    Docker
    Pod Pod
    Node
    kublet Proxy
    Docker
    Pod Pod
    Internet
    Arquitetura (Kubernetes)

    View Slide

  77. Estruturas

    View Slide

  78. Estruturas (Swarm)
    • Stacks - Agrupa serviços diferentes que se
    comunicam entre si (frontend, backend, apis,
    gerenciadores de fila, consumers, caches,
    bancos, etc)

    View Slide

  79. Estruturas (Swarm)
    • Stacks - Agrupa serviços diferentes que se
    comunicam entre si (frontend, backend, apis,
    gerenciadores de fila, consumers, caches,
    bancos, etc)
    • Services - Agrupa as tasks, define o estado
    desejado, coloca um load balancer na frente
    das tasks / containers

    View Slide

  80. Estruturas (Swarm)
    • Stacks - Agrupa serviços diferentes que se
    comunicam entre si (frontend, backend, apis,
    gerenciadores de fila, consumers, caches,
    bancos, etc)
    • Services - Agrupa as tasks, define o estado
    desejado, coloca um load balancer na frente
    das tasks / containers
    • Tasks - Gerencia o ciclo de vida do contêiner,
    baixa a imagem, cria o container, executa,
    finaliza. Também reporta o estado

    View Slide

  81. Estruturas (Kubernetes)
    • Pods - Menor unidade no Kubernetes,
    composto de 1 ou mais contêineres

    View Slide

  82. Estruturas (Kubernetes)
    • Pods - Menor unidade no Kubernetes,
    composto de 1 ou mais contêineres
    • Controllers (ReplicaSet, Deployments,
    StatefulSets, DaemonSets, Jobs, CronJobs,
    etc) - estrutura que agrupam e mantém pods
    rodando de acordo com a necessidade (long
    running, short running, presente em todas as
    máquinas, etc)

    View Slide

  83. Estruturas (Kubernetes)
    • Pods - Menor unidade no Kubernetes,
    composto de 1 ou mais contêineres
    • Controllers (ReplicaSet, Deployments,
    StatefulSets, DaemonSets, Jobs, CronJobs,
    etc) - estrutura que agrupam e mantém pods
    rodando de acordo com a necessidade (long
    running, short running, presente em todas as
    máquinas, etc)
    • Services - estrutura que garante acesso a
    todas instâncias (pods), load balancer

    View Slide

  84. Comparando

    View Slide

  85. 1. Controle do cluster
    • Swarm - através da api do Docker usando
    cliente http ou usando o comando docker,
    apenas nas máquinas managers
    • Kubernetes - através da api do Kubernetes
    usando cliente http ou usando o comando
    kubectl, apenas nas máquinas managers

    View Slide

  86. 2.Instalação
    • Swarm - Basta instalar o Docker nas
    máquinas do cluster
    • Kubernetes - Temos que instalar os
    componentes separadamente (etcd, api
    server, scheduler, controller manager,
    kubelet, kube-proxy, docker ou outro runtime,
    etc)

    View Slide

  87. 2.Configuração
    • Swarm
    Basta rodar o comando:
    $ docker swarm init
    na primeira máquina, copiar o comando da
    saída e repetir nas demais máquinas pra
    juntá-las no cluster
    $ docker swarm join ...
    Podemos promover uma máquina worker
    para manager e vice-versa

    View Slide

  88. 2.Configuração
    • Kubernetes
    Para cada componente temos que rodar ou
    via daemon ou via container, criar arquivos
    de config para garantir comunicação com os
    demais componentes, gerar e distribuir os
    certificados e chaves que mantem a
    comunicação encriptado.
    Não conseguimos mudar os papéis das
    máquinas

    View Slide

  89. 3. GUI
    • Swarm
    Não possui uma interfacepodemos utilizar
    Rancher, swarmpit.io, Portainer ou o Docker
    Universal Control Plane (só enterprise)
    • Kubernetes
    Existe um projeto com dashboard oficial mas
    não recomendado por falhas de segurança
    Também podemos usar de terceiros

    View Slide

  90. 4. Escalabilidade
    • Swarm
    Não possui ferramenta para scale de
    contêineres
    • Kubernetes
    Temos o Vertical e o horizontal pod
    autoscaler que pode controlar o tamanho e
    quantidade de réplicas - depende de
    instalarmos o metric server

    View Slide

  91. 5. Balanceamento
    • Swarm
    Para cada serviço criado entrega um Load
    Balancer por padrão que distribui a carga
    entre as réplicas
    • Kubernetes
    Temos que criar um service que apontar para
    as réplicas que estão rodando no cluster

    View Slide

  92. 6. Deployments
    • Swarm
    Trabalha apenas com estratégia rolling mas
    com diversas opções de controle que
    permitem recriar um service
    • Kubernetes
    Permite rolling e recreate também com várias
    opções de controle
    Ambos dependem de terceiros para outras
    estratégias como blue/green ou canary

    View Slide

  93. 6. Volumes
    • Swarm
    Depende de plugins para controlar o
    sincronismo e disponibilidade dos arquivos
    para todos os nós
    • Kubernetes
    Tem diversas estratégias de utilização e se
    integra bem com cloud providers paramentar
    e desmontar discos

    View Slide

  94. Como escolher?

    View Slide

  95. Como escolher?
    Analisando os requisitos para seu projeto:
    • Qtde de máquinas (dezenas, centenas,
    milhares)
    • Quais regiões das aplicações (BR, Latin
    America, Mundo Todo)
    • Quanto precisamos controlar o cluster
    • Que container engine é melhor para o projeto

    View Slide

  96. 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

    View Slide

  97. Slides
    https://speakerdeck.com/wsilva

    View Slide