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

Swarm vs Kubernetes, qual orquestrador escolher (Webinar Kinghost)

Swarm vs Kubernetes, qual orquestrador escolher (Webinar Kinghost)

Webinar apresentado dia 29 de agosto de 2018 ao vivo da KingHost. Mostramos alguns conceitos de orquestração de contêineres e comparamos diversos detalhes e um guia de comparação para escolher um dos orquestradores mais utilizados no momento, Kubernetes ou Docker Swarm.

Wellington F. Silva

August 29, 2018
Tweet

More Decks by Wellington F. Silva

Other Decks in Technology

Transcript

  1. 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
  2. Agenda • Docker 101 • Fluxo básico de trabalho com

    Docker • Problemas comuns em Produção • Orquestração • Revisitando conceitos • Comparativos • Qual escolher
  3. Disclaimer • Vamos passar muito rapidamente pelo que é o

    Docker • Foco na orquestração de contêineres
  4. Tipos de Virtualização • Full Virtualization • Partial Virtualization •

    Paravirtualization • OS Level Virtualization 
 (Docker, rkt, Garden, Guardian, containerD, cri- O)
  5. 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
  6. 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
  7. Fluxo básico de trabalho com Docker Client Docker Host docker

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

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

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

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

    run redis docker daemon Contêineres Imagens Registry
  12. Problemas comuns em Produção • Como gerenciar o ciclo de

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

    vida dos contêineres? • Como escalar? • Como recriar contêineres que morrem?
  14. 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?
  15. 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?
  16. 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?
  17. 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?
  18. ORQUESTRAÇÃO Dicionário Oxford: 2. the planning or coordination of the

    elements of a situation to produce a desired effect especially surreptitiously
  19. 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
  20. 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
  21. Orquestração
 (efeitos desejados) • Aplicação sempre rodando • Escalabilidade automática

    • Tolerância a falhas (failover, rebalanceamento, health checks, etc)
  22. Orquestração
 (efeitos desejados) • Aplicação sempre rodando • Escalabilidade automática

    • Tolerância a falhas (failover, rebalanceamento, health checks, etc) • Melhor utilização de recursos
  23. Orquestração
 (efeitos desejados) • Aplicação sempre rodando • Escalabilidade automática

    • Tolerância a falhas (failover, rebalanceamento, health checks, etc) • Melhor utilização de recursos • Minimizar intervenção manual
  24. Revisitando Conceitos • Cluster
 Aglomerado de computadores que trabalham como

    se fosse apenas um para aplicação final • Service Discovery
 Detecção automática de serviços
  25. Revisitando Conceitos • Cluster
 Aglomerado de computadores que trabalham como

    se fosse apenas um para aplicação final • Service Discovery
 Detecção automática de serviços • Load Balance
 Distribuição da carga entre todas as instâncias
  26. Revisitando Conceitos • High Availability (HA)
 Capacidade de continuar disponível

    mesmo com falhas • Auto Scale
 Habilidade de adequar o tamanho da infra de acordo com a demanda
  27. Docker Swarm • Criado e gerido pela Docker Inc •

    Lançado em dezembro de 2014, beta (v0.2) e dependente de service discovery externo
  28. Docker Swarm • 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
  29. Docker Swarm • 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
  30. Kubernetes • 3ª geração de orquestrador de contêineres do Google

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

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

    (Borg, Omega e K8s) • Código aberto desde 2014 (1º release Jul/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)
  33. Kubernetes • 3ª geração de orquestrador de contêineres do Google

    (Borg, Omega e K8s) • Código aberto desde 2014 (1º release Jul/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) • Código fonte hoje mantido pela CNCF (comunidade imensa)
  34. 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 Swarm Service e Tasks
  35. • Workers • instâncias que rodam contêineres e reportam os

    estados deles • Managers Swarm Tipos de nós (nodes)
  36. • Workers • instâncias que rodam contêineres e reportam os

    estados deles • Managers • decidem onde contêineres devem ser executados Swarm Tipos de nós (nodes)
  37. • 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 Tipos de nós (nodes)
  38. • 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 Tipos de nós (nodes)
  39. 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 Swarm
  40. Kubernetes • Nodes • Services (Load Balancers) • Controllers (ReplicaSet,

    ReplicationController, Deployments, StatefulSets, DaemonSets, Jobs)
  41. Kubernetes • Nodes • Services (Load Balancers) • Controllers (ReplicaSet,

    ReplicationController, Deployments, StatefulSets, DaemonSets, Jobs) • Pods
  42. Kubernetes • Nodes • Services (Load Balancers) • Controllers (ReplicaSet,

    ReplicationController, Deployments, StatefulSets, DaemonSets, Jobs) • Pods • Containers
  43. Master Kubernetes etcd etcd etcd Master API Server Controller Manager

    Scheduler Node kublet Proxy Docker Pod Pod Node kublet Proxy Docker Pod Pod Internet
  44. Swarm Primeiro iniciamos um manager $ docker swarm init Copiamos

    o comando com o token para adicionar nos ao cluster $ docker swarm join --token SWMTKN-1-36jot6xfif86sz8mnii5k3rrm98zl 357pyfibyst0359q8hdmi-9o48882jia3hx7bs 7sxpr7yhz node.manager:2377
  45. Kubernetes • The hard way • As a service (EKS,

    AKS, GKE, etc) • Gerenciado (Kops, kubespray, ansible, etc) • Para testes: • Minikube, Docker for desktop, Vagrant, Kubeadm
  46. • Managers compartilham dados via raft consensus • Se o

    líder falhar outro manager assume Swarm
  47. • Managers compartilham dados via raft consensus • 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
  48. • Managers compartilham dados via raft consensus • 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 • Podemos promover um nó worker a manager e vice versa Swarm
  49. 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 Swarm
  50. 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 Swarm
  51. Kubernetes • Arquitetura granular, liberdade para criar o cluster com

    dois ou mais masters • Etcd implementa Raft Consensus algorithm
  52. Kubernetes • Liberdade para criar o cluster com dois ou

    mais masters • Etcd implementa Raft Consensus algorithm • Etcd interno ou externo
  53. Kubernetes • Liberdade para criar o cluster com dois ou

    mais masters • Etcd implementa Raft Consensus algorithm • Etcd interno ou externo • Segregar o etcd (main, events)
  54. Swarm $ docker service create nginx Worker Manager API Orchestrator

    Allocator Dispatcher Scheduler Worker Executor
  55. 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 Swarm
  56. Swarm Encriptação TLS ponta a ponta entre todos os nós

    e com rotação automática de chaves $ docker swarm ca --help
  57. Swarm Protege acesso indevido ao cluster com autolock $ docker

    swarm init --autolock
 $ docker swarm update --autolock
  58. Swarm 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
  59. Swarm Dentro dos contêineres a secret, será montada em um

    tmpfs em /run/secret/secret-name # cat /run/secrets/senha-db
 senha
  60. Kubernetes Trabalha com secret de maneira similar: • Monta volume

    em tmpfs no pod • Secret armazenado no etcd que por padrão é aberto mas facilmente trocamos a comunicação para encriptado com TLS
  61. Kubernetes Trabalha com secret de maneira similar: • Monta volume

    em tmpfs no pod • Secret armazenado no etcd que por padrão é aberto mas facilmente trocamos a comunicação para encriptado com TLS • Podemos integrar com ferramentas especializadas (ex.: Hashicorp Vault)
  62. Kubernetes Acesso ao control plane por autenticação • Certificados X509

    • Bearer tokens • Arquivo de senha • Proxy de autenticação e Webhook
  63. Kubernetes Autorização usa RBAC (Role Base Access Control) e altamente

    granular • Role e Role Binding • Cluster Role e Cluster Role Binding
  64. 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
  65. 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
  66. Kubernetes Podemos editar o arquivo de configuração do deployment ou

    rodar o comando set $ kubectl set image \
 deployment/myapp=myimg:v2
 deployment "myapp" image updated
  67. Kubernetes Podemos ver as versões com rollout $ kubectl rollout

    history \
 deployments myapp
 deployments "myapp" REVISION CHANGE-CAUSE
 1 kubectl run myapp --image=myimg:v1 --record
 2 kubectl set image deployment/myapp myimg:v2
  68. Kubernetes Ou fazer o rollback $ kubectl rollout undo deployments

    \
 myapp --to-revision=1 deployment "myapp" rolled back
  69. Swarm Não existe autoscale de containers automático Temos que usar

    ferramentas de monitoramento externas que disparam o comando de update / scale da aplicação 
 (ex.: https://github.com/gianarb/orbiter)
  70. Kubernetes Suporte nativo com Horizontal Pod Autoscaler $ kubectl autoscale

    deployment \
 myapp \
 --cpu-percent=50 \
 --min=2 \
 --max=10 deployment "myapp" autoscaled
  71. 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
  72. Comparando Swarm Kubernetes Set up I Fácil Complicado Set up

    II Padronizado Configurável Scalabilidade Fácil Fácil Autoscale Só extendendo Integrado Load Balancing Nativo Fácil Update Fácil Fácil Rollback Automático 1 histórico Configurável Log e monitoria Plugavel e expõe prometheus Nativo / configurável Namespaces Não tem Nativo Container run time So Docker rkt, docker, cri-o
  73. Comparando Swarm Kubernetes Deployment + Rapido Rapido Arquivo deploy Simples

    Verboso Quantidade de carga 10-20 containers 100-1000 containers Suporte Comunidade pequena Comunidade gigante Evolução Lenta Rapida … … …
  74. Cenário atual • Em empresas de até 5 empregados (TI)

    a adoção de Swarm é de 41% contra 31% da adoção de Kubernetes
  75. Cenário atual • Em empresas de até 5 empregados (TI)

    a adoção de Swarm é de 41% contra 31% da adoção de Kubernetes • Orquestração ainda não decolou, apenas 52% utilizam algum orquestrador de contêineres economizando mais de 10h.
  76. Cenário atual • Em empresas de até 5 empregados (TI)

    a adoção de Swarm é de 41% contra 31% da adoção de Kubernetes • Orquestração ainda não decolou, apenas 52% utilizam algum orquestrador de contêineres • Dos que estão usando, 51% estão economizando 5h por semana 15% diz estar economizando mais de 10h.