nur aus einem Container > ein Container isoliert nur einen Prozess ► Module / Services in eigenen Containern > Stichwort Microservices 9 www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/ www.flickr.com/photos/matijagrguric/4437187539/
Inzwischen mit Version 1.2.5 „reif“ > es gab diverse schwere oder einfach störende Bugs ► Unterstützung in Docker Machine > gut für eine Demo ;-) ► Sollte noch eine „Weile“ bestehen (Stand 15.09.16): „Docker does not currently have a plan to deprecate Docker Swarm.“ (https://github.com/docker/swarm) 20
incl. kleine Ausnahmen bei den Ausgaben, z.B. docker info oder docker inspect ► Fungiert als Proxy bei Zugriffen durch Clients > Cluster erscheint dabei als ein einzelner Docker-Host ► Unterteilt in Swarm Manager und Swarm Agents > Agents sind optional, es reicht eigentlich ein Docker Daemon 21
für den Cluster Discovery – etcd, Consul, Zookeeper – geht aber auch ohne… > K/V-Store für das Overlay-Netzwerk (falls benötigt) > Hardware / VMs – lokal (z.B. VirtualBox) zum Rumspielen geht auch 22
\ --swarm-image=$SWARM_IMAGE \ --swarm-master \ --swarm-discovery="consul://${CONSUL_IP}:8500" \ --engine-opt="cluster-advertise=$BIND_INTERFACE:2376" \ --engine-opt="cluster-store=consul://${CONSUL_IP}:8500" \ --engine-label="node=swarm-1" \ swarm-1 23 Welches Image? Bitte sei ein Master! Consul- Koordinaten Eigene Koordinaten Nochmal Consul für Netzwerk
\ --swarm-image=$SWARM_IMAGE \ --swarm-discovery="consul://${CONSUL_IP}:8500" \ --engine-opt="cluster-advertise=$BIND_INTERFACE:2376" \ --engine-opt="cluster-store=consul://${CONSUL_IP}:8500" \ --engine-label="node=swarm-1" \ swarm-1 ► Aber natürlich auch „manuell“ möglich $ docker run -d -p 4000:4000 swarm manage -H :4000 --advertise $BIND_INTERFACE:2376 consul://${CONSUL_IP}:8500 24 Jetzt nur ein Agent DO braucht paar Parameter mehr Name des Knotens als Docker-Label Name der VM
von Strategies und Filter ► „Strategies“ schauen nach CPU- und Memory-Auslastung der Knoten und was der neue Container benötigt ► Aktuell drei Strategies zur Gewichtung von Knoten: > spread – default, lastet gleichmäßig aus > binpack - macht einen Knoten nach dem anderen voll > random 25
Filter zur Knoten-Auswahl > Constraint - Label auf einer Docker Engine > Affinity - Zusammen mit einer definierten Ressource > Port - Auf welchem Node ist Port xy noch frei? > Dependency - bitte mit Container XY zusammen > Health - nur auf gesunden Nodes $ docker daemon --label storage=ssd $ docker run -d -P -e constraint:storage==ssd --name db mysql 27
Option --replication und ein K/V-Store benötigt ► Leader / Secondaries > Kommunikation und Arbeiten mit jedem Manager möglich ► Automatic Failover > Cluster wählt einen neuen Leader > --replication-ttl Zeit bis Leader-Neuwahl > --heartbeat - Zeitintervall für Check durch Secondaries 28
Overlay-Netzwerk > Netzwerk Node-überspannend möglich ► Virtuelles Netzwerk basierend auf vxlan ► Aktuell Minimum Kernel 4.2.x > Kernel-Upgrade bei Ubuntu 14.04 nötig (oder Debian 8) ► Consul oder Etcd oder ZooKeeper als K/V-Store > Netzwerk-Infos werden dort abgelegt ► ab Docker 1.10.0 gibt es ein ‚embedded DNS‘ 29
$ $DOCKER network ls | grep overlay NETWORK ID NAME DRIVER 36935a0674d4 multihost overlay ► Beim Start des Containers Netzwerk mitteilen: $ $DOCKER run -d -P --net="multihost" elasticsearch ► libnetwork ist Plugin-basiert > Overlay, Weave, Contiv, Kuryr ► Swarm 1.0.x wird mit unterstützt 30
libcompose in Golang, hängt aber hinterher ► Kapselt Docker-Kommandos in einer Konfiguration ► „Compose is a tool for defining and running multi-container applications with Docker.“ ► Gut geeignet um komplexe Infrastruktur nicht nur für Entwickler aufzubauen 32
superapp:1.0.1 ports: - "8080:8080" volumes: - ./conf:/etc/myapp/conf environment: - database=mysql depends-on: - mysql mysql: image: mysql ►docker-compose up 33 Service- Definition Welches Image? mysql muss gestartet worden sein
scale <service> #anzahl ► Container bekommen entsprechende Namen > elastic_esnode_1 ► Bei Verlust eines Containers kein „rescale“ ► Resheduling von Swarm muss genutzt werden > Env-Variable reschedule:on-node-failure 35
nach Zitaten aus Shakespeare-Stücken ► Ein Elasticsearch-Cluster enthält die Zitate > Consul wird initial gestartet > Elasticsearch-Knoten werden während des Starts in Consul registriert > Nodes finden sich über Service-Discovery – DNS SRV auf Consul 38
Data Elasticsearch und Spring Cloud Consul ► Koordinaten des Elasticsearch-Clusters werden aus Consul abgeholt (Abfrage der Services) > ist allerdings (noch) nicht resilient ;-) ► 4 VM’s ► 3 Elasticsearch-Nodes ► 1 Applikation 39