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

  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. Tipos de Virtualização • Full Virtualisation • Partial Virtualisation •

    Paravirtualisation • OS Level Virtualisation Contêineres
  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. Problemas comuns de produção • Como gerenciar o ciclo de

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

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

    Como os contêineres vão se comunicar? • Como gerenciar informações sensíveis?
  11. Orquestração Dicionário Oxford: 2. the planning or coordination of the

    elements of a situation to produce a desired effect especially surreptitiously
  12. 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
  13. 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
  14. 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
  15. Docker Swarm • Criado e mantido pela Docker Inc •

    Lançado em dezembro de 2014, beta (v0.2) e dependente de service discovery externo
  16. 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
  17. 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
  18. Kubernetes • Mantido pela CNCF (Cloud Native Computing Foundation •

    3ª geração de orquestrador de contêineres do Google (Borg, Omega e K8s)
  19. 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)
  20. 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)
  21. 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)
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. 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
  28. 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)
  29. 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
  30. 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)
  31. Arquitetura (Kubernetes) Componentes dos Nodes • Container Runtime Interface (CRI)

    • Interage com o Kubelet que manda rodar contêineres
  32. 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)
  33. Estruturas (Swarm) • Stacks - Agrupa serviços diferentes que se

    comunicam entre si (frontend, backend, apis, gerenciadores de fila, consumers, caches, bancos, etc)
  34. 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
  35. 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
  36. 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)
  37. 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
  38. 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
  39. 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)
  40. 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
  41. 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
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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
  48. 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