Hashicorp Cloud Autojoin mit OpenStack nutzen

Verwenden Sie cloud_autojoin mit Hashicorp Produkten in OpenStack

Überblick

Cloud_autojoin ist ein Werkzeug, dass dabei hilft Nomad-, Consul- und Vault-Cluster aufzubauen, ohne dass die IP-Adressen der einzelnen Cluster-Knoten bekannt sein müssen. Die Cluster-Knoten können Hashicorps go-discover verwenden, um beim Start über Meta-Tags die IP-Adressen der jeweils anderen Knoten zur Clusterbildung zu ermitteln. Go-discover unterstützt verschiedene Provider - einer davon ist OpenStack. In diesem Tutorial wird die Verwendung erklärt.

Cloud_Autojoin in OpenStack

Cloud_autojoin verwendet die Zugangsdaten zum jeweiligen Cloud-Projekt, um über die Cloud-API die Instanzen im Projekt und deren Meta-Tags zu ermitteln. Wird das konfigurierte Meta-Tag bei einem Server gefunden, wird er damit als Cluster-Knoten identifiziert und seine IP-Adresse für die Clusterbildung verwendet.

Konfigurationsoptionen

Die relevanten Konfigurationsoptionen für cloud_autojoin in OpenStack hängen davon ab, ob der Zugriff auf das Projekt per Username/Passwort oder per Token stattfindet.

provider:   "os"
auth_url:   The endpoint of OS identity
project_id: The id of the project (tenant id)
tag_key:    The tag key to filter on
tag_value:  The tag value to filter on
user_name:  The user used to authenticate
password:   The password of the provided user
token:      The token to use
insecure:   Sets if the api certificate shouldn't be check. Any value means true

Beispiel

In einer Konfigurationsdatei für einen Nomad-Server könnte das z. B. so aussehen:

server_join {
    retry_join = [ "provider=os tag_key=nomad-role tag_value=server auth_url=https://prod1.api.pco.get-cloud.io:5000 project_id=myprojectid user_name=myusername password=\"mypassword\" ] 
    retry_interval = "15s"
}

Systemd

Alternativ können die “sensiblen” Werte auch als Umgebungsvariablen in einer “env”-Datei für systemd bereitgestellt werden, um sie dann im systemd Unit-File zu referenzieren:

[Unit]
Description=Nomad
Documentation=https://www.nomadproject.io/docs/
Wants=network-online.target
After=network-online.target

[Service]
EnvironmentFile=/etc/nomad/nomad.env
User=nomad
Group=nomad
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/local/bin/nomad agent -config /etc/nomad
KillMode=process
KillSignal=SIGINT
LimitNOFILE=65536
LimitNPROC=infinity
Restart=on-failure
RestartSec=2
TasksMax=infinity
OOMScoreAdjust=-1000

[Install]
WantedBy=multi-user.target

Die /etc/nomad/nomad.env Datei könnte dann z. B. so aussehen:

OS_AUTH_URL=https://prod1.api.pco.get-cloud.io:5000
OS_USER_NAME=myusername
OS_PASSWORD=mypassword
OS_PROJECT_ID=myprojectid

In der Konfigurationsdatei würde der Eintrag dann so aussehen:

server_join {
  retry_join = [ "provider=os tag_key=nomad-role tag_value=server" ] 
  retry_interval = "15s"
}

Meta-Tags

Die Meta-Tags werden z. B. beim Erstellen der Instanz per Terraform gesetzt:

metadata = {
   nomad-role = "server"
}

Oder z. B. über die Instanzaktionen

Instanzaktionen

im Horizon konfiguriert:

Meta Daten im Horizon

Zuletzt geändert 18.03.2026: picture name corrected (0876c5e)