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

Orquestradores de Contêineres. Swarm ou Kuberne...

Orquestradores de Contêineres. Swarm ou Kubernetes (PHP Experience 2018)

Palestra apresentada dia 6 de março de 2018 no PHP Experience em São Paulo. Mostramos alguns conceitos de orquestração de contêineres e comparamos diversos detalhes dos orquestradores mais utilizados no momento, Kubernetes e Docker Swarm. Também mostramos nos seguintes videos algumas features de cada um. https://youtu.be/3VEImK7rHNA (Swarm), https://youtu.be/JNnmgTjzo6A (Kubernetes)

Wellington F. Silva

March 06, 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 • Demos
  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 (contextualizando) • Criado e gerido pela Docker Inc

    • Lançado em dezembro de 2014, beta (v0.2) e dependente de service discovery externo
  23. Docker Swarm (contextualizando) • 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 (contextualizando) • 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. Swarm mode (Componentes) 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
  26. • Workers • instâncias que rodam contêineres e reportam os

    estados deles • Managers Swarm mode (Nodes)
  27. • Workers • instâncias que rodam contêineres e reportam os

    estados deles • Managers • decidem onde contêineres devem ser executados Swarm mode (Nodes)
  28. • 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 mode (Nodes)
  29. • 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 mode (Nodes)
  30. Swarm mode (Topologia) 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
  31. • Managers compartilham dados via raft • Se o líder

    falhar outro manager assume Swarm mode (HA)
  32. • Managers compartilham dados via raft • 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 mode (HA)
  33. Swarm mode (Quorum) 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
  34. Swarm mode (Quorum) 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
  35. Swarm mode (scheduler) $ docker service create nginx Worker Manager

    API Orchestrator Allocator Dispatcher Scheduler Worker Executor
  36. Swarm mode (features) 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
  37. Swarm mode (features) Encriptação TLS ponta a ponta entre todos

    os nós e com rotação automática de chaves $ docker swarm ca --help
  38. Swarm mode (features) Protege acesso indevido ao cluster com autolock

    $ docker swarm init --autolock
 $ docker swarm update --autolock
  39. Swarm mode (features) 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
  40. Swarm mode (features) Dentro dos contêineres a secret, será montada

    em um tmpfs em /run/secret/secret-name # cat /run/secrets/senha-db
 senha
  41. Swarm mode (features) Gerencia de config, muito similar ao secret,

    porém não encriptado e não é montado no tmpfs $ echo "config" | docker config \
 create cfg-demo - $ docker service create \
 --config-add=cfg-demo demo $ docker service update \
 --config-rm=cfg-demo demo
  42. Swarm mode (features) Facilita healthcheck, não só o contêiner mas

    as app dentro do serviço pode ser monitorada $ docker service create \
 --health-cmd \
 --health-interval \
 --health-retries \
 --health-start-period \
 --health-timeout \
 --no-healthcheck
  43. 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
  44. 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
  45. Kubernetes (contextualizando) • 3ª geração de orquestrador de contêineres do

    Google (Borg, Omega e K8s) • Código aberto desde 2014 (1º release Set/2014)
  46. Kubernetes (contextualizando) • 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)
  47. Kubernetes (contextualizando) • 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)
  48. Kubernetes (contextualizando) • 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) • Um dos projetos com mais contribuição no Github
  49. Kubernetes (Recursos) • Nodes • Services, load balancers e redes

    • Controllers (ReplicaSet, ReplicationController, Deployments, StatefulSets, DaemonSets, Jobs)
  50. Kubernetes (Recursos) • Nodes • Services, load balancers e redes

    • Controllers (ReplicaSet, ReplicationController, Deployments, StatefulSets, DaemonSets, Jobs) • Pods
  51. Kubernetes (Recursos) • Nodes • Services, load balancers e redes

    • Controllers (ReplicaSet, ReplicationController, Deployments, StatefulSets, DaemonSets, Jobs) • Pods • Containers
  52. Master Kubernetes (Componentes) etcd etcd etcd Master API Server Controller

    Manager Scheduler Node kublet Proxy Docker Pod Pod Node kublet Proxy Docker Pod Pod Internet
  53. 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
  54. 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