Slide 1

Slide 1 text

X

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

Disclaimer

Slide 5

Slide 5 text

Disclaimer • Breve explicação sobre Contêineres e e Docker • Foco na Orquestração dos contêineres

Slide 6

Slide 6 text

O que é Docker?

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

O que é Docker?

Slide 10

Slide 10 text

O que é Docker Contêiner?

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

Tipos de Virtualização

Slide 14

Slide 14 text

Tipos de Virtualização • Full Virtualisation

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Tipos de Virtualização • Full Virtualisation • Partial Virtualisation • Paravirtualisation • OS Level Virtualisation Contêineres

Slide 19

Slide 19 text

Contêiner NÃO é VM

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Fluxo comum de trabalho com Docker

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

Como escalar para vários servidores em produção?

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

Problemas comuns de produção • Como gerenciar o ciclo de vida dos contêineres? • Como escalar? • Como recriar contêineres que morrem?

Slide 33

Slide 33 text

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?

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

Problemas comuns de produção • Onde colocar meus contêineres? • Como os contêineres vão se comunicar?

Slide 36

Slide 36 text

Problemas comuns de produção • Onde colocar meus contêineres? • Como os contêineres vão se comunicar? • Como gerenciar informações sensíveis?

Slide 37

Slide 37 text

Orquestração

Slide 38

Slide 38 text

Orquestração Dicionário Oxford: 2. the planning or coordination of the elements of a situation to produce a desired effect especially surreptitiously

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

Orquestração (Elementos) • Contêineres • Hosts • Redes • Volumes • Monitoramento • Logs

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

Revisitando conceitos

Slide 44

Slide 44 text

Revisitando Conceitos • Cluster

Slide 45

Slide 45 text

Revisitando Conceitos • Cluster • Service Discovery

Slide 46

Slide 46 text

Revisitando Conceitos • Cluster • Service Discovery • Load balance

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

Docker Swarm

Slide 51

Slide 51 text

Docker Swarm • Criado e mantido pela Docker Inc

Slide 52

Slide 52 text

Docker Swarm • Criado e mantido pela Docker Inc • Lançado em dezembro de 2014, beta (v0.2) e dependente de service discovery externo

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

Kubernetes (k8s)

Slide 56

Slide 56 text

Kubernetes • Mantido pela CNCF (Cloud Native Computing Foundation

Slide 57

Slide 57 text

Kubernetes • Mantido pela CNCF (Cloud Native Computing Foundation • 3ª geração de orquestrador de contêineres do Google (Borg, Omega e K8s)

Slide 58

Slide 58 text

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)

Slide 59

Slide 59 text

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)

Slide 60

Slide 60 text

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)

Slide 61

Slide 61 text

Arquitetura

Slide 62

Slide 62 text

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

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

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

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

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

Slide 67

Slide 67 text

Arquitetura (Swarm) Demo: https://raft.github.io/

Slide 68

Slide 68 text

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

Slide 69

Slide 69 text

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

Slide 70

Slide 70 text

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

Slide 71

Slide 71 text

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)

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

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)

Slide 74

Slide 74 text

Arquitetura (Kubernetes) Componentes dos Nodes • Kube proxy • Controla o acesso aos pod via rede

Slide 75

Slide 75 text

Arquitetura (Kubernetes) Componentes dos Nodes • Container Runtime Interface (CRI) • Interage com o Kubelet que manda rodar contêineres

Slide 76

Slide 76 text

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)

Slide 77

Slide 77 text

Estruturas

Slide 78

Slide 78 text

Estruturas (Swarm) • Stacks - Agrupa serviços diferentes que se comunicam entre si (frontend, backend, apis, gerenciadores de fila, consumers, caches, bancos, etc)

Slide 79

Slide 79 text

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

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

Estruturas (Kubernetes) • Pods - Menor unidade no Kubernetes, composto de 1 ou mais contêineres

Slide 82

Slide 82 text

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)

Slide 83

Slide 83 text

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

Slide 84

Slide 84 text

Comparando

Slide 85

Slide 85 text

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

Slide 86

Slide 86 text

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)

Slide 87

Slide 87 text

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

Slide 88

Slide 88 text

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

Slide 89

Slide 89 text

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

Slide 90

Slide 90 text

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

Slide 91

Slide 91 text

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

Slide 92

Slide 92 text

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

Slide 93

Slide 93 text

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

Slide 94

Slide 94 text

Como escolher?

Slide 95

Slide 95 text

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

Slide 96

Slide 96 text

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

Slide 97

Slide 97 text

Slides https://speakerdeck.com/wsilva