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

Orquestradores de Contêineres: Swarm ou Kubernetes (Meetup CNCF SP #5)

Orquestradores de Contêineres: Swarm ou Kubernetes (Meetup CNCF SP #5)

Palestra apresentada dia 24 de julho de 2018 no Meetup #5 da CNCF em São Paulo. 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

July 24, 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 • Docker Swarm (Swarm mode) • Kubernetes
  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
  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 rodando • Escalabilidade automática •

    Tolerante a falha (failover, rebalanceamento, health checks, etc) • Melhor utilização de recursos • Minimizar intervenção manual
  22. Docker Swarm • Criado e gerido pela Docker Inc •

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

    (Borg, Omega e K8s) • Código aberto desde 2014 (1º release Set/2014)
  26. Kubernetes • 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)
  27. Kubernetes • 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)
  28. Kubernetes • 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) • Código fonte hoje mantido pela CNCF (comunidade imensa)
  29. 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
  30. • Workers • instâncias que rodam contêineres e reportam os

    estados deles • Managers Swarm Tipos de nós (nodes)
  31. • 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)
  32. • 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)
  33. • 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)
  34. 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
  35. Kubernetes • Nodes • Services (Load Balancers) • Controllers (ReplicaSet,

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

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

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

    Scheduler Node kublet Proxy Docker Pod Pod Node kublet Proxy Docker Pod Pod Internet
  39. Swarm Simples por padrão inicia um manager $ docker swarm

    init Copia o token para adicionar nos ao cluster $ docker swarm join
  40. Kubernetes • The hard way • As a service (EKS,

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

    líder falhar outro manager assume Swarm
  42. • 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
  43. 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
  44. 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
  45. Kubernetes • Liberdade para criar o cluster com dois ou

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

    mais masters • Etcd implementa Raft Consensus algorithm • Etcd interno ou externo
  47. 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)
  48. Swarm $ docker service create nginx Worker Manager API Orchestrator

    Allocator Dispatcher Scheduler Worker Executor
  49. 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
  50. Scheduler focado em recursos disponíveis e influenciável com configuração de

    afinidade Config a ser adicionado ao pod spec: Kubernetes
  51. Swarm Encriptação TLS ponta a ponta entre todos os nós

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

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

    tmpfs em /run/secret/secret-name # cat /run/secrets/senha-db
 senha
  55. Kubernetes Acesso controlado por autenticação e autorização, usa RBAC (Role

    Base Access Control) e altamente plugável e configurável.
  56. Kubernetes Trabalha com secret de maneira similar: • Monta em

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

    tmpfs no pod • Secret armazenado no etcd que por padrão é aberto mas facilmente trocamos a comunicação para encriptado com TSL • Podemos integrar com ferramentas terceiras (Hashicorp Vault)
  58. 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
  59. 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
  60. 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
  61. 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
  62. Kubernetes Ou fazer o rollback $ kubectl rollout undo deployments

    \
 myapp --to-revision=1 deployment "myapp" rolled back
  63. 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
  64. Kubernetes Suporte nativo com Horizontal Pod Autoscaler $ kubectl autoscale

    deployment \
 myapp \
 --cpu-percent=50 \
 --min=2 \
 --max=10 deployment "myapp" autoscaled
  65. 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
  66. 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
  67. 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 … … …