Server-Komponenten installieren (cc-backend 1.5.3)
In diesem Abschnitt wird die Installation von ClusterCockpit auf dem dedizierten Monitoring-Server beschrieben.
Alle Schritte können automatisiert per Skript oder manuell nachvollzogen werden.
Dedizierten Systembenutzer anlegen
Für den Betrieb wird ein dedizierter Systembenutzer empfohlen, damit die Weboberfläche nicht als root läuft. Allerdings ist es dann notwendig einen Reverse-Proxy wie nginx zu verwenden, weil der User nicht Port 443 öffnen kann. Weiter Informationen dazu befinden sich im Kapitel Betrieb & Troubleshooting
useradd --system --no-create-home --user-group --shell "$(command -v nologin || echo /sbin/nologin)" clustercockpit
mkdir -p /opt/monitoring
chown -R clustercockpit:clustercockpit /opt/monitoring
Installation per Skript (empfohlen)
Für eine standardisierte und fehlerarme Installation empfiehlt sich die Verwendung des mitgelieferten Skripts. Das Skript sowie die benötigten Templates befinden sich im Repository im Verzeichnis scripts/ bzw. scripts/templates/.
Ablagestruktur:
cc-setup-guide/
├── scripts/
│ ├── cc-installation.sh
│ └── templates/
│ ├── cc-backend.json.template
│ ├── cluster.json.template
│ └── clustercockpit.service.template
Das Skript erwartet, dass sich die Template-Dateien im Unterordner scripts/templates/ befinden.
Hinweis zu Laufzeitparametern des Metric Stores
In der generiertencc-backend/config.jsonwird untermetric-store.retention-in-memorydas Zeitfenster definiert, in dem Metrikdaten im Arbeitsspeicher verbleiben. Der Parameter sollte mindestens so groß wie die maximale Joblaufzeit konfiguriert werden, damit laufende Jobs keine Lücken in den Messreihen aufweisen.
Checkpoints und Cleanup werden ebenfalls im Abschnittmetric-storekonfiguriert. Die endgültigen Werte hängen von der maximalen Joblaufzeit sowie den verfügbaren Ressourcen ab.
Zum Herunterladen:
git clone https://github.com/hpc-nrw/cc-setup-guide.git
cd cc-setup-guide
Beispielaufruf:
bash scripts/cc-installation.sh -c demo_cluster
Für ein alternatives Installationsverzeichnis kann beispielsweise verwendet werden:
bash scripts/cc-installation.sh -c demo_cluster -d /srv/monitoring
Zur Installation unter einem bereits bestehenden User:
bash scripts/cc-installation.sh -c demo_cluster -d /srv/monitoring -u clustercockpit:clustercockpit
Hinweis: Vor der Ausführung des Skripts sollte sichergestellt werden, dass alle Dateien vorhanden und ausführbar sind. Eigene Anpassungen an den Template-Dateien (z. B. cluster.json oder Service-Units) können im Verzeichnis scripts/templates/ vorgenommen werden.
Das Skript übernimmt alle notwendigen Schritte von der Verzeichnisanlage bis zur Konfiguration und initialen Datenbank- und User-Erstellung. Nach erfolgreichem Abschluss liegen alle Zugangsdaten und Konfigurationsdateien im Installationsverzeichnis vor.
Übersicht der durchgeführten Schritte
Im Folgenden werden die wesentlichen Schritte des Installationsprozesses detailliert aufgelistet. Sämtliche Befehle können bei Bedarf auch einzeln manuell ausgeführt werden.
1. Anlegen der Verzeichnisstruktur
export INSTALL_DIR="/opt/monitoring"
export CLUSTER_NAME="demo_cluster"
mkdir -p "$INSTALL_DIR/cc-backend"
2. Herunterladen und Entpacken der Komponenten
Die jeweils aktuellsten Releases werden direkt von GitHub heruntergeladen:
# cc-backend herunterladen und entpacken
cd "$INSTALL_DIR"
CC_BACKEND_URL=$(curl -s https://api.github.com/repos/ClusterCockpit/cc-backend/releases/latest | grep "browser_download_url.*Linux_x86_64.tar.gz" | cut -d '"' -f 4)
wget -O cc-backend.tar.gz "$CC_BACKEND_URL"
tar -xzf cc-backend.tar.gz -C cc-backend --strip-components=1
rm cc-backend.tar.gz
3. Erzeugen eines JWT-Keypairs
cd "$INSTALL_DIR/cc-backend"
chmod +x ./gen-keypair
./gen-keypair > keypair.txt
export JWT_PUBLIC_KEY=$(grep "ED25519 PUBLIC_KEY" keypair.txt | cut -d '"' -f 2)
export JWT_PRIVATE_KEY=$(grep "ED25519 PRIVATE_KEY" keypair.txt | cut -d '"' -f 2)
rm keypair.txt
4. Erstellen und Anpassen der Konfigurationsdateien
Hierbei werden die mitgelieferten Template-Dateien angepasst. Beispielhaft kann für die Datei config.json der Platzhalter für den Clustername ersetzt werden:
cp templates/cc-backend.json.template ./config.json
sed -i "s/__CLUSTER_NAME__/$CLUSTER_NAME/g" ./config.json
Entsprechendes gilt für die cluster.json.
5. cluster.json anlegen (mit minimalem Inhalt)
Im Installationsverzeichnis muss die Datei
$INSTALL_DIR/cc-backend/var/job-archive/$CLUSTERNAME/cluster.json
angelegt werden.
Als Vorlage kann das mitgelieferte Template templates/cluster.json.template verwendet werden:
Minimalbeispiel: cluster.json
{
"name": "demo_cluster",
"metricConfig": [
{
"name": "cpu_load",
"unit": {
"base": ""
},
"scope": "node",
"aggregation": "avg",
"footprint": "avg",
"timestep": 60,
"peak": 1,
"normal": 1,
"caution": 1,
"alert": 1
}
],
"subClusters": [
{
"name": "first_subcluster",
"nodes": "node001",
"processorType": "Demo CPU Type",
"socketsPerNode": 1,
"coresPerSocket": 1,
"threadsPerCore": 1,
"flopRateScalar": {
"unit": {
"base": "F/s",
"prefix": "G"
},
"value": 1
},
"flopRateSimd": {
"unit": {
"base": "F/s",
"prefix": "G"
},
"value": 1
},
"memoryBandwidth": {
"unit": {
"base": "B/s",
"prefix": "G"
},
"value": 1
},
"topology": {
"node": [
0
],
"socket": [
[0]
],
"memoryDomain": [
[0]
],
"core": [
[0]
]
}
}
]
}
6. Setzen der Umgebungsvariablen für den Backend-Dienst
cat > .env <<EOF
SESSION_KEY="$(openssl rand -base64 32)"
JWT_PRIVATE_KEY="$JWT_PRIVATE_KEY"
JWT_PUBLIC_KEY="$JWT_PUBLIC_KEY"
EOF
7. Initialisieren des Backends und der Datenbank
chmod +x ./cc-backend
./cc-backend -init
echo 3 > ./var/job-archive/version.txt
./cc-backend -migrate-db
8. Anlegen der Benutzer
Zufällige Passwörter können wie folgt erzeugt werden:
ADMIN_USER="admin"
ADMIN_PASS=$(openssl rand -base64 18)
API_USER="apiuser"
API_PASS=$(openssl rand -base64 18)
./cc-backend -add-user "$ADMIN_USER:admin:$ADMIN_PASS"
./cc-backend -add-user "$API_USER:api:$API_PASS"
Die Passwörter können zur späteren Verwendung in Textdateien gespeichert werden:
echo "$ADMIN_PASS" > admin_password.txt
echo "$API_PASS" > apiuser_password.txt
9. Generieren und Speichern des API-Tokens
./cc-backend -jwt "$API_USER" | tee apikey.txt
Hinweis: In der generierten
config.jsonbleibtjwts.max-agestandardmäßig leer. Das API-Token läuft damit nicht ab. Soll eine maximale Lebensdauer erzwungen werden, kann dort eine Zeitangabe (z. B.8760hfür ein Jahr) hinterlegt werden. Nach Ablauf der Zeit ist ein neues Token zu erzeugen. Ebenfalls sinnvoll:api-allowed-ipsauf vertrauenswürdige Quellen einschränken. Die Standardkonfiguration erlaubt alle Adressen ("*"). Es ist nur möglich eine Liste von IP-Adressen anzugeben, keine CIDR-Notation für Subnetze.
10. Erzeugen der Service-Units
Mit den Vorlagen werden systemd-Unit-Dateien erzeugt und angepasst:
cp templates/clustercockpit.service.template "$INSTALL_DIR/clustercockpit.service"
sed -i "s@__INSTALL_DIR__@$INSTALL_DIR@g" "$INSTALL_DIR/clustercockpit.service"
Die Dienste können anschließend nach /etc/systemd/system/ kopiert und aktiviert werden.
Dienste starten
Die zentralen Dienste können entweder manuell oder über systemd gestartet werden.
Start per systemd:
systemctl daemon-reload
systemctl enable clustercockpit.service
systemctl start clustercockpit.service
Status prüfen:
systemctl status clustercockpit.service
Status nach der Installation
Nach den obigen Schritten sind die Server-Komponenten eingerichtet:
- Dienst aktiv:
cc-backend(Web/API und integrierter Metric-Store) läuft und ist start-/stoppbar via systemd. - Zugangsdaten: Admin-Passwort, API-Passwort und das API-Token wurden erzeugt.
$INSTALL_DIR/cc-backend/admin_password.txt$INSTALL_DIR/cc-backend/apiuser_password.txt$INSTALL_DIR/cc-backend/apikey.txt
- Konfiguration & Secrets:
- Backend:
$INSTALL_DIR/cc-backend/config.jsonund$INSTALL_DIR/cc-backend/.env - Integrierter Metric-Store: Abschnitt
metric-storein$INSTALL_DIR/cc-backend/config.json
- Backend:
- Cluster-Konfiguration:
- Datei:
$INSTALL_DIR/cc-backend/var/job-archive/$CLUSTER_NAME/cluster.json: Zentrale Konfiguration (u. a. Subcluster, Metriken/Thresholds).
- Datei:
- Daten- & Verzeichnisstruktur:
- Verzeichnis für Archiv/Metadaten:
$INSTALL_DIR/cc-backend/var/job-archive/$CLUSTER_NAME/ - Archivformatversion:
$INSTALL_DIR/cc-backend/var/job-archive/version.txt
- Verzeichnis für Archiv/Metadaten:
Die Datei cluster.json enthält aktuell nur den Cluster-Namen und eine Beispiel-Subclusterliste. Die Feinkonfiguration (Subcluster, Metriken und Thresholds) folgt in den nächsten Kapiteln: