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).