Installation
Eine ContainerManager-Instanz kann entweder als Systemservice oder als Container betrieben werden. Im Folgenden werden die Möglichkeiten des Betriebs und der Konfiguration beschrieben.
Umgebungsvariablen
Umgebungsvariable | Beschreibung | Defaultwert / Beispiel |
---|---|---|
|
Gibt an ob die API auch von Außerhalb des ClusterHosts erreichbar sein soll. (0.0.0.0 oder 127.0.0.1) |
false |
|
Gibt an ob auch ein Zugriff über TLS möglich sein soll |
false |
|
Setzt den Port für die Unverschlüsselte Kommunikation |
4000 |
|
Setzt den Port für die Verschlüsselte Kommunikation |
4001 |
|
Optional. Legt Ort und Namen der lokalen Datenbank fest |
containers.db |
|
Legt den Zugriffspfad für die Verwaltungsschnittstelle fest |
|
|
Optional. Setzt den Hostnamen oder die IP des ControlCenter |
Bsp.: devicecenter.azurewebsites.net |
|
Optional. Setzt den HTTP Proxy, um auf das ControlCenter zuzugreifen |
|
|
Optional. Setzt einen von RGDC_HOST abweichenden Hostnamen / IP des ControlCenter |
Wert von |
|
Optional. Setzt einen von RGDC_PROXY abweichenden HTTP Proxy, um das ControlCenter zu erreichen. |
Wert von |
|
Optional. Legt fest, ob die volle PKI-Chain überprüft werden soll, wenn eine verschlüsselte Verbindung zum ControlCenter aufgebaut werden soll |
true |
|
Optional. Setzt die vom ControlCenter erzeugte Client ID |
beliebige UUIDv4 |
|
Optional. Setzt den Secret vom ControlCenter erzeugten Secret |
beliebige UUIDv4 |
|
Legt den Nutzernamen für die Anmeldung fest |
ccadmin |
|
Legt den SHA256 Hash des Passwortes füe die Anmeldung fest. |
|
|
Kommaseparierte Liste von Volume Mounts, welche zusätzlich in die RoboGate Container integriert werden sollen |
Bsp: |
Docker und Docker-Compose unter Debian/Ubuntu
Zuerst muss die Docker Plattform installiert werden
apt install -y docker.io
Mit folgenden Kommando kann ein Container Image importiert werden
docker load -i <file_name>.tar
Anschließend kann beispielsweise im Ordner /opt/robogate-container-manager
eine docker-compose.yml
Datei mit folgenden Inhalt erstellt werden:
/opt/robogate-container-manager/docker-compose.yml
version: "3.5"
services:
rgcc:
image: rdsdocker.azurecr.io/robogate-container-manager:2021.11
container_name: rgcc
privileged: true
restart: unless-stopped
network_mode: host
environment:
- "RGCC_SSL_DISABLED=true"
- "RGCC_SERVE_PUBLIC=true"
- "RGCC_PORT=80"
# - "RGDC_HOST= " # optional
# - "RGCC_CLIENT_ID= " # optional
# - "RGCC_SECRET= " # optional
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "/etc/ssl/certs:/etc/ssl/certs:z"
Um den ContainerManager zu starten, muss folgender DockerCompose-Befehl ausgeführt werden. Damit wird der Container automatisch als Dienst gestartet, sodass dieser auch nach einem Neutstart des ClusterHosts wieder zur Verfügung steht.
docker-compose up -d
SystemD Service mit der Podman Container Plattform auf RHEL/CentOS
Bei RedHat Distributionen kann es vorkommen, dass die Docker Plattform nicht mehr unterstützt wird. In diesem Fall lässt sich der ContainerManager ebenfalls als Systemdienst registrieren und betreiben. Im Folgenden ist eine exemplarische Vorgehensweise beschrieben.
Falls noch nicht geschehen, muss Podman zunächst intstalliert werden.
yum install -y podman
Der Podman Socket muss in der Regel separat aktiviert werden. Erst dadurch bekommt der ContainerManager Zugriff auf die Schnittstelle für die Verwaltung der RoboGate Container.
systemctl enable --now podman.socket
Das zur Verfügung gestellte Softwarebundle wird idealerweise nach /opt/robogate-container-manager entpackt. Ein abweichendes Verzeichnis muss in der folgenden SystemD Service-Datei beachtet und angepasst werden.
Dem Startprogramm müssen Ausführrechte gegeben werden:
sudo chmod +x /opt/robogate-container-manager/app/Robotron.RoboGate.ClusterControl.Api
Die SystemD Service Datei beinhaltet alle notwendigen Informationen und Konfigurationen, um ein ContainerManager zu betreiben.
/etc/systemd/system/robogate-container-manager.service
[Unit]
Description=RoboGate ContainerManager
[Service]
User=root
Restart=always
Type=simple
WorkingDirectory=/opt/robogate-container-manager
ExecStart=/bin/bash /opt/robogate-container-manager/start.sh
Environment='RGCC_DOCKER_SOCKET_URI=unix:///run/podman/podman.sock'
Environment='RGCC_SSL_DISABLED=true'
Environment='RGCC_SERVE_PUBLIC=true'
Environment='RGCC_PORT=80'
Environment='RGCC_SSL_PORT=443'
#Environment='RGDC_HOST=' # optional
#Environment='RGCC_CLIENT_ID=' # optional
#Environment='RGCC_SECRET=' # optional
[Install]
WantedBy=multi-user.target
Erst nach der Aktivierung durch folgendes Kommando wird der ContainerManager-Dienst ausgeführt und ist auch nach einem Neustart des ClusterHosts wieder verfügbar.
systemctl enable --now robogate-container-manager
Hilfreiche Kommandos
Kommando | Beschreibung |
---|---|
|
Den ContainerManager-Service neustarten. Dabei werden keine RoboGate Edge-Instanzen neu gestartet! |
|
Den ContainerManager Service deaktivieren, falls dieser nicht mehr benötigt wird |
Troubleshooting
Container lassen sich nicht starten
-
Fehler im Podman Log:
Request Failed(Internal Server Error): container_linux.go:370: starting container process caused: unknown capability \"CAP_BPF\": OCI runtime error
-
Fehler bei
podman run
:starting container process caused: error adding seccomp filter rule for syscall bdflush: permission denied: OCI permission denied
Lösung: Das Paket runc auf Version 1.0.2 updaten
Abschließender Hinweis
Es ist wichtig zu beachten, dass auf jedem ClusterHost nur eine ContainerManager-Instanz gleichzeitig ausgeführt werden darf. Falls mehrere ContainerManager-Instanzen gleichzeitig aktiv und ggf. mit einem ControlCenter verbunden sind, kann es zu unerwünschten Effekten kommen, die keinen stabilen Betrieb gewährleisten.