Nomad - Föderation von Regionen

Der Artikel wurde bereits am 19.07.2021 (an anderer Stelle verfaßt).

Da ja "Mulit-Cloud" in aller Munde zu sein scheint und da es gerade geklappt hat, wollte ich kurz ein echtes "Multi-Cloud" Setup vorstellen. Wie schon geschrieben, brauchen Orchestrierungswerkzeuge, die "multi-cloud"-fähig sein wollen, ein Konzept von mehreren Regionen (oder Clouds), damit sie dem Benutzer anbieten können, Workloads in verschiedenen Regionen (oder Clouds) ausrollen zu können.

Im Video (s. u.) wird ein Setup mit zwei Nomad/Consul-Installationen - jeweils bei AWS und GCP - vorgestellt, welches die Föderation von Regionen innerhalb von Nomad demonstriert. Ich hatte ein wenig nach dem Code dafür gesucht und dann das entsprechende Repository auf Github gefunden. Da es schon etwas älter ist, mußte ich mit den terraform-Versionen bis 0.9.8 zurückgehen, damit keine Fehler mehr kommen und das Deployment funktioniert.

Es entstehen zwei Nomad-Cluster je eins bei GCP:

root@nomad-server-d-5q85:~# nomad server members
Name                                  Address        Port  Status  Leader  Protocol  Build  Datacenter          Region
nomad-server-b-3wq9.gcp-europe-west1  10.132.15.212  4648  alive   false   2         1.0.4  gcp-europe-west1-b  gcp-europe-west1
nomad-server-c-pq7n.gcp-europe-west1  10.132.15.213  4648  alive   true    2         1.0.4  gcp-europe-west1-c  gcp-europe-west1
nomad-server-d-5q85.gcp-europe-west1  10.132.15.214  4648  alive   false   2         1.0.4  gcp-europe-west1-d  gcp-europe-west1

Und eins bei AWS:

root@ip-10-0-6-133:~# nomad server members
Name                         Address     Port  Status  Leader  Protocol  Build  Datacenter       Region
ip-10-0-4-185.aws-eu-west-1  10.0.4.185  4648  alive   false   2         1.0.4  aws-eu-west-1-a  aws-eu-west-1
ip-10-0-5-146.aws-eu-west-1  10.0.5.146  4648  alive   true    2         1.0.4  aws-eu-west-1-b  aws-eu-west-1
ip-10-0-6-133.aws-eu-west-1  10.0.6.133  4648  alive   false   2         1.0.4  aws-eu-west-1-c  aws-eu-west-1

Die beiden Umgebungen sind per VPN verbunden. Die Föderation der beiden Cluster funktioniert genau nach Dokumentation (hier aus Sicht des Clusters bei AWS):

root@ip-10-0-6-133:/etc/nomad.d# nomad server join 10.132.15.212:4648                                                                                                                                               
Joined 1 servers successfully
root@ip-10-0-6-133:/etc/nomad.d# nomad server members
Name                                  Address        Port  Status  Leader  Protocol  Build  Datacenter          Region
ip-10-0-4-185.aws-eu-west-1           10.0.4.185     4648  alive   false   2         1.0.4  aws-eu-west-1-a     aws-eu-west-1
ip-10-0-5-146.aws-eu-west-1           10.0.5.146     4648  alive   true    2         1.0.4  aws-eu-west-1-b     aws-eu-west-1
ip-10-0-6-133.aws-eu-west-1           10.0.6.133     4648  alive   false   2         1.0.4  aws-eu-west-1-c     aws-eu-west-1
nomad-server-b-3wq9.gcp-europe-west1  10.132.15.212  4648  alive   false   2         1.0.4  gcp-europe-west1-b  gcp-europe-west1
nomad-server-c-pq7n.gcp-europe-west1  10.132.15.213  4648  alive   true    2         1.0.4  gcp-europe-west1-c  gcp-europe-west1
nomad-server-d-5q85.gcp-europe-west1  10.132.15.214  4648  alive   false   2         1.0.4  gcp-europe-west1-d  gcp-europe-west1
root@ip-10-0-6-133:/etc/nomad.d# nomad status
No running jobs
root@ip-10-0-6-133:/etc/nomad.d# nomad status -region="gcp-europe-west1"
No running jobs

Auf diese Weise ist es für den Benutzer möglich, Jobs in der gewünschten Region (oder auch regionsübergreifend) zu starten. Dazu kennt das Kommando nomad job run den Schalter "-region=". Sinnigerweise sind die Nomad Clients in diesem Beispiel in Instance-Groups organisiert, sodaß sie über die dort eingebauten Autoscalingmechanismen dynamisch wachsen oder schrumpfen können - je nach Auslastung können so zusätzliche Knoten automatisch hinzuprovisioniert werden.

In Hashicorp Nomad Multi-Cluster Deployment  beschreibt Tim Gross, wie das Ausrollen von Applikationen in Unternehmen aussehen kann. Das Ganze gibt es auch als Video:

Für Kubernetes habe ich das Produkt Tetrate Service Bridge gefunden, welches Deployments über mehrere Regionen koordinieren können soll. Das Produkt soll auch die Möglichkeit beinhalten, VMs ein ein Service-Mesh einzubeziehen (was mit Consul-Connect bzw. Consul Service-Mesh auch funktioniert).