Hashicorp Cloud Autojoin mit OpenStack nutzen
2 Minuten Lesezeit
Ü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

im Horizon konfiguriert:
