Orchestration in Docker Swarm mode, Docker services and declarative - - PowerPoint PPT Presentation

orchestration in docker
SMART_READER_LITE
LIVE PREVIEW

Orchestration in Docker Swarm mode, Docker services and declarative - - PowerPoint PPT Presentation

Orchestration in Docker Swarm mode, Docker services and declarative application deployment Mike Goelzer & Victor Vieux Docker Orchestration Overview Mike Goelzer / mgoelzer@docker.com / gh: mgoelzer Orchestration in Docker Orchestration


slide-1
SLIDE 1

Orchestration in Docker

Swarm mode, Docker services and declarative application deployment

Mike Goelzer & Victor Vieux Docker

slide-2
SLIDE 2

Mike Goelzer / mgoelzer@docker.com / gh: mgoelzer

Orchestration Overview

slide-3
SLIDE 3

Orchestration in Docker

  • Orchestration

○ Swarm Mode ○ Docker Services ○ Security ○ Routing mesh

  • Container Healthcheck
slide-4
SLIDE 4

Engine

Swarm Mode

$ docker swarm init

slide-5
SLIDE 5

Engine

Swarm Mode

$ docker swarm init $ docker swarm join <IP of manager>:2377

Engine

slide-6
SLIDE 6

Engine Engine Engine Engine Engine Engine

Swarm Mode

$ docker swarm init $ docker swarm join <IP of manager>:2377

slide-7
SLIDE 7

Engine Engine Engine Engine Engine Engine

Services

$ docker service create --replicas 3 --name frontend --network mynet

  • -publish 80:80/tcp frontend_image:latest

mynet

slide-8
SLIDE 8

Engine Engine Engine Engine Engine Engine

Services

$ docker service create --replicas 3 --name frontend --network mynet

  • -publish 80:80/tcp frontend_image:latest

$ docker service create --name redis --network mynet redis:latest

mynet

slide-9
SLIDE 9

Engine Engine Engine Engine Engine Engine

Node Failure

$ docker service create --replicas 3 --name frontend --network mynet

  • -publish 80:80/tcp frontend_image:latest

$ docker service create --name redis --network mynet redis:latest

mynet

slide-10
SLIDE 10

Engine Engine Engine Engine Engine Engine

Node Failure

$ docker service create --replicas 3 --name frontend --network mynet

  • -publish 80:80/tcp frontend_image:latest

$ docker service create --name redis --network mynet redis:latest

mynet

slide-11
SLIDE 11

Engine Engine Engine Engine Engine

Desired State ≠ Actual State

$ docker service create --replicas 3 --name frontend --network mynet

  • -publish 80:80/tcp frontend_image:latest

$ docker service create --name redis --network mynet redis:latest

mynet

slide-12
SLIDE 12

Engine Engine Engine Engine Engine

Converge Back to Desired State

$ docker service create --replicas 3 --name frontend --network mynet

  • -publish 80:80/tcp frontend_image:latest

$ docker service create --name redis --network mynet redis:latest

mynet

slide-13
SLIDE 13

Engine Engine Engine Engine Engine

Scaling

$ docker service scale frontend=6

mynet

slide-14
SLIDE 14

Engine Engine Engine Engine Engine

Scaling

$ docker service scale frontend=10

mynet

slide-15
SLIDE 15

Engine Engine Engine Engine Engine

Global Services

$ docker service create --mode=global --name prometheus prom/prometheus

mynet

slide-16
SLIDE 16

Engine Engine Engine Engine Engine

Constraints

Engine

docker daemon --label com.example.storage="ssd" docker daemon --label com.example.storage="ssd"

slide-17
SLIDE 17

Engine Engine Engine Engine Engine

Constraints

$ docker service create --replicas 3 --name frontend --network mynet

  • -publish 80:80/tcp --constraint

engline.labels.com.example.storage==ssd frontend_image:latest

Engine

docker daemon --label com.example.storage="ssd" docker daemon --label com.example.storage="ssd"

slide-18
SLIDE 18

Engine Engine Engine Engine Engine

Constraints

$ docker service create --replicas 3 --name frontend --network mynet

  • -publish 80:80/tcp --constraint

engline.labels.com.example.storage==ssd frontend_image:latest $ docker service scale frontend=10

Engine

docker daemon --label com.example.storage="ssd" docker daemon --label com.example.storage="ssd"

slide-19
SLIDE 19

Services

slide-20
SLIDE 20

Services are grouped into stacks

slide-21
SLIDE 21

Swarm mode orchestration is optional

  • You don’t have to use it
  • 1.12 is fully backwards compatible
  • Will not break existing deployments and scripts
slide-22
SLIDE 22

Routing Mesh

  • Operator reserves a

swarm-wide ingress port (8080) for myapp

  • Every node listens on 8080
  • Container-aware routing mesh

can transparently reroute traffic from Worker3 to a node that is running container

  • Built in load balancing into the

Engine

  • DNS-based service discovery

Worker 1

:8080

Manager

User accesses myapp.com:8080

:8080

Worker 2

:8080

Worker 3

:8080

frontend frontend

$ docker service create --replicas 3 --name frontend --network mynet

  • p 8080:80 frontend_image:latest

frontend

slide-23
SLIDE 23

Routing Mesh: Published Ports

  • Operator reserves a

swarm-wide ingress port (8080) for myapp

  • Every node listens on 8080
  • Container-aware routing mesh

can transparently reroute traffic from Worker3 to a node that is running container

  • Built in load balancing into the

Engine

  • DNS-based service discovery

Worker 1

:8080

Manager

User accesses myapp.com:8080

:8080

Worker 2

:8080

Worker 3

:8080

frontend frontend

$ docker service create --replicas 3 --name frontend --network mynet

  • p 8080:80 frontend_image:latest

frontend

slide-24
SLIDE 24

Security out of the box

Cryptographic Node Identity

○ Workload segregation (think PCI)

There is no “insecure mode”:

○ TLS mutual auth ○ TLS encryption ○ Certificate rotation

slide-25
SLIDE 25

HEALTHCHECK --interval=5m --timeout=3s

  • -retries 3

CMD curl -f http://localhost/ || exit 1 Checks every 5 minutes that web server can return index page within 3 seconds. Three consecutive failures puts container in an unhealthy state.

Container Health Check in Dockerfile

slide-26
SLIDE 26

Victor Vieux / vieux@docker.com / gh: vieux

Orchestration Deep Dive

+ demo at the end

slide-27
SLIDE 27

Node Node Node Node Node Node

Swarm Topology

Node Node Node Node Node Node

slide-28
SLIDE 28

Node Node Node Node Node Node

Swarm Topology

Node Node Node Node Node Node

Manager Worker

slide-29
SLIDE 29

Node Node Node Node Node Node

Swarm Topology

Node Node Node Node Node Node

Manager Worker

  • Each Node has a role
  • Roles are dynamic
  • Programmable Topology
slide-30
SLIDE 30

Manager Manager Manager

Worker Worker Worker Worker Worker Worker Worker Internal Distributed State Store

Raft consensus group

Docker swarm mode communication internals

Gossip network gRPC

slide-31
SLIDE 31

Manager Manager Manager

Internal Distributed State Store

Raft consensus group

Quorum Layer

  • Strongly consistent: Holds desired state
  • Simple to operate
  • Blazing fast (in-memory reads, domain specific indexing, ...)
  • Secure
slide-32
SLIDE 32

Worker Worker Worker Worker Worker Worker Worker

Worker-to-Worker Gossip

Gossip network

  • Eventually consistent: Routing mesh, load balancing rules, ...
  • High volume, p2p network between workers
  • Secure: Symmetric encryption with key rotation in Raft
slide-33
SLIDE 33

API Allocator Orchestrator Scheduler Dispatcher R A F T Manager Node Worker Executor Worker Node Accepts command from client and creates service object Reconciliation loop for service objects and creates tasks Allocates IP addresses to tasks Assigns nodes to tasks Checks in on workers docker service create Connects to dispatcher to check on assigned tasks

Node Breakdown

Executes the tasks assigned to worker node

slide-34
SLIDE 34

Internal Load Balancer

slide-35
SLIDE 35

Ingress Load Balancer

slide-36
SLIDE 36

Secure by default with end-to-end encryption

  • Cryptographic node

identity

  • Automatic encryption

and mutual auth (TLS)

  • Automatic cert rotation
  • External CA

integration

Manager Node

Certificate Authority TLS

Manager Node

Certificate Authority TLS

Manager Node

Certificate Authority TLS

Worker

TLS

Worker

TLS

Worker

TLS

slide-37
SLIDE 37

DEMO

slide-38
SLIDE 38

Questions?

Victor Vieux vieux@docker.com / @vieux Mike Goelzer mgoelzer@docker.com / @mgoelzer

slide-39
SLIDE 39

Victor Vieux vieux@docker.com / @vieux Mike Goelzer mgoelzer@docker.com / @mgoelzer