You are on page 1of 32

Paris Container Day - 13 juin 2017

Nomad, lorchestration made in HashiCorp

#ContainerDayFR
Nomad, lorchestration made in Hashicorp

Je suis...
Bastien Cadiot (@bcadiot)

Architecte virtualisation
Lead DevOps
Cloud Builder
www.wescale.fr | @YesWeScale

HashiCorp User : Terraform, Consul, Vagrant


Et utilisateur de Nomad depuis la version 0.1.0

Paris Container Day 2017 #ContainerDayFR 2


Nomad, lorchestration made in Hashicorp

Un monde de conteneurs
Au commencement...

En ralit...

Paris Container Day 2017 #ContainerDayFR 3


Nomad, lorchestration made in Hashicorp

Nos clients
La dmo nest pas la ralit

Paris Container Day 2017 #ContainerDayFR 4


Nomad, lorchestration made in Hashicorp

Lenvironnement de dev nest pas la production

Paris Container Day 2017 #ContainerDayFR 5


Nomad, lorchestration made in Hashicorp

Comprendre larchitecture nest pas optionnel

Paris Container Day 2017 #ContainerDayFR 6


Nomad, lorchestration made in Hashicorp

Une installation complique est rarement un bon


signe pour lavenir

Paris Container Day 2017 #ContainerDayFR 7


Nomad, lorchestration made in Hashicorp

Pourquoi orchestrer ?
Rappel des principes

Rationaliser Ordonnancer

Simplifier Prioriser

Standardiser Piloter

Densifier Scuriser

Paris Container Day 2017 #ContainerDayFR 8


Nomad, lorchestration made in Hashicorp

Quels sont les choix ?

Trendy - Kubernetes Stable - Mesos Easy - Swarm

Paris Container Day 2017 #ContainerDayFR 9


Nomad, lorchestration made in Hashicorp

Paris Container Day 2017 #ContainerDayFR


Nomad, lorchestration made in Hashicorp

Pourquoi Nomad ?

Distribu Flexible Simple

Multi-datacenter Any Runner Service unique


Multi-cloud Service et batch Configuration simple
Hautement disponible Isolation Librairies stables

Paris Container Day 2017 #ContainerDayFR 11


Nomad, lorchestration made in Hashicorp

Dessine-moi une infrastructure Nomad

Paris Container Day 2017 #ContainerDayFR 12


Nomad, lorchestration made in Hashicorp

Init & Run


Besoin : Dployer une application sur une infra
de conteneurs
Etape 1 : Cration dun cluster Nomad
Instanciation de 3 VM serveurs
Installation de Consul et Nomad Server
Instanciation de 3 VM clients
Installation de Consul Client, Nomad
Client, et Docker

Etape 2 : Cration dune appli Nomad


Cration du fichier job
Enregistrement du job sur le cluster
Nomad
Vrification du lancement de
lapplication
Paris Container Day 2017 #ContainerDayFR 13
Nomad, lorchestration made in Hashicorp

Etape 1 - Initialisation region = "europe"


datacenter = "gce-west1"
Fichiers de configurations (Serveurs) data_dir = "/var/nomad"
bind_addr = "0.0.0.0"

advertise {
{
rpc = "8.7.6.5"
"bootstrap_expect": 3,
http = "8.7.6.5"
"server": true,
serf = "8.7.6.5"
"datacenter": "gce-west1",
}
"data_dir": "/var/consul",
"log_level": "INFO", server {
"enable_syslog": true, enabled = true
"bind_addr": "10.1.2.3", bootstrap_expect = 3
}
"client_addr": "0.0.0.0",
"advertise_addr": "8.7.6.5" consul {
} address = "127.0.0.1:8500"
}

Paris Container Day 2017 #ContainerDayFR 14


Nomad, lorchestration made in Hashicorp

Etape 1 - Dmo
Consul

# consul members

Node Address Status Type Build Protocol DC


client-europe-1 192.158.29.140:8301 alive client 0.8.3 2 gce-west1
client-europe-2 130.211.85.225:8301 alive client 0.8.3 2 gce-west1
client-europe-3 35.187.10.89:8301 alive client 0.8.3 2 gce-west1
server-europe-1 104.199.99.190:8301 alive server 0.8.3 2 gce-west1
server-europe-2 104.199.75.126:8301 alive server 0.8.3 2 gce-west1
server-europe-3 146.148.13.182:8301 alive server 0.8.3 2 gce-west1

Paris Container Day 2017 #ContainerDayFR 15


Nomad, lorchestration made in Hashicorp

Etape 1 - Dmo
Nomad

# nomad server-members

Name Address Port Status Leader Protocol Build Datacenter Region


server-europe-1.europe 104.199.99.190 4648 alive false 2 0.5.6 gce-west1 europe
server-europe-2.europe 104.199.75.126 4648 alive true 2 0.5.6 gce-west1 europe
server-europe-3.europe 146.148.13.182 4648 alive false 2 0.5.6 gce-west1 europe

# nomad node-status
ID DC Name Class Drain Status
47e449e7 gce-west1 client-europe-3 <none> false ready
e53bb5ae gce-west1 client-europe-1 <none> false ready
f3e16921 gce-west1 client-europe-2 <none> false ready

Paris Container Day 2017 #ContainerDayFR 16


Nomad, lorchestration made in Hashicorp

Etape 2 - Running
group "webs" {
count = 2

Fichier de configuration (Job) task "frontend" {


driver = "docker"
config {
job "pcd2017" { image = "bcadiot/app-pcd2017:1.0"
}

region = "europe" service {


port = "http"
}
datacenters = ["gce-west1"]
type = "service" resources {
cpu = 200
memory = 64
group "webs" { } network {
mbits = 100
port "http" {
group "database" { } static = 80
}
}
} }
}
}
Paris Container Day 2017 #ContainerDayFR 17
Nomad, lorchestration made in Hashicorp

Etape 2 - Dmo
Job run

# nomad run -address=http://104.199.99.190:4646 app.nomad

==> Monitoring evaluation "db7e8098"


Evaluation triggered by job "pcd2017"
Allocation "16dc6ad2" created: node "e53bb5ae", group "webs"
Allocation "b606c351" created: node "f3e16921", group "database"
Allocation "f8c7662f" created: node "f3e16921", group "webs"
Evaluation status changed: "pending" -> "complete"
==> Evaluation "db7e8098" finished with status "complete"

Paris Container Day 2017 #ContainerDayFR 18


Nomad, lorchestration made in Hashicorp

Etape 2 - Dmo
Job status
nomad status Summary

-address=http://104.199.99.190:4646 Task Group Queued Starting Running Failed Complete Lost


pcd2017 database 0 0 1 0 0 0
webs 0 0 2 0 0 0

ID = pcd2017 Allocations

Name = pcd2017 ID Eval ID Node ID Task Group Desired Status Created At


Type = service 16dc6ad2 db7e8098 e53bb5ae webs run running 06/12/17
23:25:05 CEST
Priority = 50
b606c351 db7e8098 f3e16921 database run running 06/12/17
Datacenters = gce-west1 23:25:05 CEST
Status = running f8c7662f db7e8098 f3e16921 webs run running 06/12/17
23:25:05 CEST
Periodic = false
Parameterized = false

Paris Container Day 2017 #ContainerDayFR 19


Nomad, lorchestration made in Hashicorp

Extend & Update


Besoin : Mise jour pour un besoin client
Etape 3 : Cration dun datacenter France
Cration dun datacenter chez un cloud
provider Franais (OVH)
Instanciation de 3 VM serveurs
Installation de Consul Server
Jonction avec les serveurs Europe
Instanciation de 1 VM client
Installation de Consul Client, Nomad

Etape 4 : Mise jour dune appli Nomad


Modification du fichier job pour ajouter
les contraintes
Mise jour du job sur le cluster Nomad
Vrification de lapplication
Paris Container Day 2017 #ContainerDayFR 20
Nomad, lorchestration made in Hashicorp

Etape 3 - Extending
Fichier de configuration (Nomad Client)
region = "europe"
datacenter = "france"
data_dir = "/var/nomad"
bind_addr = "0.0.0.0"

advertise {
rpc = "5.6.7.8"
http = "5.6.7.8"
serf = "5.6.7.8"
}

client {
enabled = true
node_class = "data"
}

Paris Container Day 2017 #ContainerDayFR 21


Nomad, lorchestration made in Hashicorp

Etape 3 - Dmo
Consul

# consul members -wan

Node Address Status Type Build Protocol DC


server-europe-1.gce-west1 104.199.99.190:8302 alive server 0.8.3 2 gce-west1
server-europe-2.gce-west1 104.199.75.126:8302 alive server 0.8.3 2 gce-west1
server-europe-3.gce-west1 146.148.13.182:8302 alive server 0.8.3 2 gce-west1
server-ovh-france-1.localdomain.france 217.182.82.249:8302 alive server 0.8.3 2 france
server-ovh-france-2.localdomain.france 217.182.82.247:8302 alive server 0.8.3 2 france
server-ovh-france-3.localdomain.france 217.182.82.243:8302 alive server 0.8.3 2 france

Paris Container Day 2017 #ContainerDayFR 22


Nomad, lorchestration made in Hashicorp

Etape 3 - Dmo
Nomad

# nomad node-status

ID DC Name Class Drain Status


e9a30fd3 france client-ovh-france-1.localdomain data false ready
47e449e7 gce-west1 client-europe-3 <none> false ready
e53bb5ae gce-west1 client-europe-1 <none> false ready
f3e16921 gce-west1 client-europe-2 <none> false ready

Paris Container Day 2017 #ContainerDayFR 23


Nomad, lorchestration made in Hashicorp

Etape 4 - Updating group "database" {


count = 1
Fichier de configuration (Job)
job "pcd2017" {

... constraint {
attribute = "${node.class}"
datacenters = ["gce-west1", "france"] value = "data"
}
...
constraint {
group "webs" { } attribute = "${node.datacenter}"
value = "france"
group "database" { } }

} ...
}
Paris Container Day 2017 #ContainerDayFR 24
Nomad, lorchestration made in Hashicorp

Etape 4 - Dmo
Job run

# nomad run -address=http://104.199.99.190:4646 app.nomad

==> Monitoring evaluation "22cc22e9"


Evaluation triggered by job "pcd2017"
Allocation "f8c7662f" modified: node "f3e16921", group "webs"
Allocation "689de99d" created: node "e9a30fd3", group "database"
Allocation "16dc6ad2" modified: node "e53bb5ae", group "webs"
Evaluation status changed: "pending" -> "complete"
==> Evaluation "22cc22e9" finished with status "complete"

Paris Container Day 2017 #ContainerDayFR 25


Nomad, lorchestration made in Hashicorp

Etape 4 - Dmo
Job status
nomad status Summary

-address=http://104.199.99.190:4646 Task Group Queued Starting Running Failed Complete Lost


pcd2017 database 0 0 1 0 1 0
webs 0 0 2 0 0 0

ID = pcd2017 Allocations

Name = pcd2017 ID Eval ID Node ID Task Group Desired Status Created At


Type = service 689de99d 22cc22e9 e9a30fd3 database run running 06/12/17
23:32:32 CEST
Priority = 50
16dc6ad2 22cc22e9 e53bb5ae webs run running 06/12/17
Datacenters = gce-west1,france 23:25:05 CEST
Status = running b606c351 db7e8098 f3e16921 database stop complete 06/12/17
23:25:05 CEST
Periodic = false f8c7662f 22cc22e9 f3e16921 webs run running 06/12/17
Parameterized = false 23:25:05 CEST

Paris Container Day 2017 #ContainerDayFR 26


Nomad, lorchestration made in Hashicorp

Scaling
Besoin : Accompagner la monte en puissance

Etape 5 : Cration dune rgion Nomad


situe aux USA et liaison des deux
rgions
Cration dun VPC chez un cloud provider
Amricain (AWS)
Instanciation de 3 VM serveurs
Installation de Consul Server, et Nomad
Server
Jonction de la nouvelle rgion avec la
rgion Europe
Instanciation de 3 VM clients
Installation de Consul Client, Nomad
Client, et Docker
Paris Container Day 2017 #ContainerDayFR 27
Nomad, lorchestration made in Hashicorp

Etape 5 - Scaling region = "us"


datacenter = "aws-west2"
Fichiers de configurations (Serveurs) data_dir = "/var/nomad"
bind_addr = "0.0.0.0"

advertise {
{
rpc = "35.99.88.77"
"bootstrap_expect": 3,
http = "35.99.88.77"
"server": true,
serf = "35.99.88.77"
"datacenter": "aws-west2",
}
"data_dir": "/var/consul",
"log_level": "INFO", server {
"enable_syslog": true, enabled = true
"bind_addr": "35.99.88.77", bootstrap_expect = 3
}
"client_addr": "0.0.0.0",
"advertise_addr": "35.99.88.77" consul {
} address = "127.0.0.1:8500"
}

Paris Container Day 2017 #ContainerDayFR 28


Nomad, lorchestration made in Hashicorp

Etape 5 - Dmo
Consul

# consul members -wan

Node Address Status Type Build Protocol DC


ip-10-59-1-10.aws-west2 54.218.254.37:8302 alive server 0.8.3 2 aws-west2
ip-10-59-1-201.aws-west2 54.191.239.249:8302 alive server 0.8.3 2 aws-west2
ip-10-59-1-217.aws-west2 54.202.180.132:8302 alive server 0.8.3 2 aws-west2
server-europe-1.gce-west1 104.199.99.190:8302 alive server 0.8.3 2 gce-west1
server-europe-2.gce-west1 104.199.75.126:8302 alive server 0.8.3 2 gce-west1
server-europe-3.gce-west1 146.148.13.182:8302 alive server 0.8.3 2 gce-west1
server-ovh-france-1.localdomain.france 217.182.82.249:8302 alive server 0.8.3 2 france
server-ovh-france-2.localdomain.france 217.182.82.247:8302 alive server 0.8.3 2 france
server-ovh-france-3.localdomain.france 217.182.82.243:8302 alive server 0.8.3 2 france

Paris Container Day 2017 #ContainerDayFR 29


Nomad, lorchestration made in Hashicorp

Etape 5 - Dmo
Nomad

# nomad server-join 104.199.75.126


Joined 1 servers successfully

# nomad server-members
Name Address Port Status Leader Protocol Build Datacenter Region
server-europe-1.europe 104.199.99.190 4648 alive false 2 0.5.6 gce-west1 europe
server-europe-2.europe 104.199.75.126 4648 alive true 2 0.5.6 gce-west1 europe
server-europe-3.europe 146.148.13.182 4648 alive false 2 0.5.6 gce-west1 europe
ip-10-59-1-10.us 54.218.254.37 4648 alive false 2 0.5.6 aws-west2 us
ip-10-59-1-201.us 54.191.239.249 4648 alive true 2 0.5.6 aws-west2 us
ip-10-59-1-217.us 54.202.180.132 4648 alive false 2 0.5.6 aws-west2 us

Paris Container Day 2017 #ContainerDayFR 30


Nomad, lorchestration made in Hashicorp

Pour finir...

Scurit Stockage

Rseau

Paris Container Day 2017 #ContainerDayFR 31


Nomad, lorchestration made in Hashicorp

Questions ?
Sources :
https://github.com
/bcadiot/ParisContainerDay_2017

Twitter : @bcadiot
Merci !

Paris Container Day 2017 #ContainerDayFR 32

You might also like