MIT DATEN MEHR BEWEGEN.

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

RGCC_SERVE_PUBLIC

Gibt an ob die API auch von Außerhalb des ClusterHosts erreichbar sein soll. (0.0.0.0 oder 127.0.0.1)

false

RGCC_SSL_DISABLED

Gibt an ob auch ein Zugriff über TLS möglich sein soll

false

RGCC_PORT

Setzt den Port für die Unverschlüsselte Kommunikation

4000

RGCC_SSL_PORT

Setzt den Port für die Verschlüsselte Kommunikation

4001

RGCC_DATABASE

Optional. Legt Ort und Namen der lokalen Datenbank fest

containers.db

RGCC_DOCKER_SOCKET_URI

Legt den Zugriffspfad für die Verwaltungsschnittstelle fest

unix:///var/run/docker.sock

RGDC_HOST

Optional. Setzt den Hostnamen oder die IP des ControlCenter

Bsp.: devicecenter.azurewebsites.net

RGDC_PROXY

Optional. Setzt den HTTP Proxy, um auf das ControlCenter zuzugreifen

RGCC_INSTANCE_RGDC_HOST

Optional. Setzt einen von RGDC_HOST abweichenden Hostnamen / IP des ControlCenter

Wert von RGDC_HOST

RGCC_INSTANCE_RGDC_PROXY

Optional. Setzt einen von RGDC_PROXY abweichenden HTTP Proxy, um das ControlCenter zu erreichen.

Wert von RGDC_PROXY

RGDC_SSL_CHECK

Optional. Legt fest, ob die volle PKI-Chain überprüft werden soll, wenn eine verschlüsselte Verbindung zum ControlCenter aufgebaut werden soll

true

RGCC_CLIENT_ID

Optional. Setzt die vom ControlCenter erzeugte Client ID

beliebige UUIDv4

RGCC_SECRET

Optional. Setzt den Secret vom ControlCenter erzeugten Secret

beliebige UUIDv4

RGCC_USER

Legt den Nutzernamen für die Anmeldung fest

ccadmin

RGCC_PASSWORD_HASH

Legt den SHA256 Hash des Passwortes füe die Anmeldung fest.

05f3b8a40c10af15af8c7db56cd5c492e3fca30dd34e607f8da9ba37083543af ($ccpasswd123)

RGCC_INSTANCE_MOUNTS

Kommaseparierte Liste von Volume Mounts, welche zusätzlich in die RoboGate Container integriert werden sollen

Bsp: /host/d1:/container/d1,/host/d2/container/d2

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:

File: /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.

File: /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

systemctl restart robogate-container-manager

Den ContainerManager-Service neustarten. Dabei werden keine RoboGate Edge-Instanzen neu gestartet!

systemctl disable --now robogate-container-manager

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.