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.

280fecb4f048de5ecf36bec281609ea4?s=128

Wellington F. Silva

October 19, 2019
Tweet

Transcript

  1. X

  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
  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
  4. Disclaimer

  5. Disclaimer • Breve explicação sobre Contêineres e e Docker •

    Foco na Orquestração dos contêineres
  6. O que é Docker?

  7. None
  8. None
  9. O que é Docker?

  10. O que é Docker Contêiner?

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

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

    Operacional”
  13. Tipos de Virtualização

  14. Tipos de Virtualização • Full Virtualisation

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

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

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

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

    Paravirtualisation • OS Level Virtualisation Contêineres
  19. Contêiner NÃO é VM

  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
  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
  22. Fluxo comum de trabalho com Docker

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

  24. Fluxo comum Client Docker Host docker run redis docker daemon

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

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

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

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

    Contêineres Imagens Registry
  29. Como escalar para vários servidores em produção?

  30. Problemas comuns de produção • Como gerenciar o ciclo de

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

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

    vida dos contêineres? • Como escalar? • Como recriar contêineres que morrem?
  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?
  34. Problemas comuns de produção • Onde colocar meus contêineres?

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

    Como os contêineres vão se comunicar?
  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?
  37. Orquestraçã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
  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
  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
  41. Orquestração (Elementos) • Contêineres • Hosts • Redes • Volumes

    • Monitoramento • Logs
  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
  43. Revisitando conceitos

  44. Revisitando Conceitos • Cluster

  45. Revisitando Conceitos • Cluster • Service Discovery

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

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

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

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

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

  51. Docker Swarm • Criado e mantido pela Docker Inc

  52. Docker Swarm • Criado e mantido pela Docker Inc •

    Lançado em dezembro de 2014, beta (v0.2) e dependente de service discovery externo
  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
  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
  55. Kubernetes (k8s)

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

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

    3ª geração de orquestrador de contêineres do Google (Borg, Omega e K8s)
  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)
  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)
  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)
  61. Arquitetura

  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
  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
  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
  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
  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
  67. Arquitetura (Swarm) Demo: https://raft.github.io/

  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
  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
  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
  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)
  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
  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)
  74. Arquitetura (Kubernetes) Componentes dos Nodes • Kube proxy • Controla

    o acesso aos pod via rede
  75. Arquitetura (Kubernetes) Componentes dos Nodes • Container Runtime Interface (CRI)

    • Interage com o Kubelet que manda rodar contêineres
  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)
  77. Estruturas

  78. Estruturas (Swarm) • Stacks - Agrupa serviços diferentes que se

    comunicam entre si (frontend, backend, apis, gerenciadores de fila, consumers, caches, bancos, etc)
  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
  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
  81. Estruturas (Kubernetes) • Pods - Menor unidade no Kubernetes, composto

    de 1 ou mais contêineres
  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)
  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
  84. Comparando

  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
  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)
  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
  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
  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
  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
  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
  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
  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
  94. Como escolher?

  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
  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
  97. Slides https://speakerdeck.com/wsilva