Original source: https://pads.alasca.cloud/clt-tarook.
Organized & held by the FOCIS team, mainly Daniel Gerber and Friedrich Zahn.
CLT 2026 - Tarook & openDesk Workshopa¶
2026-03-29, 14-17 Uhr, Raum K2 - Link zum Beitrag im CLT-Programm
Kubernetes ohne Hyperscaler - Tarook, die OpenStack/SCS-integrierte, „batteries included” K8s Distribution
Der Workshop vermittelt grundlegende Kenntnisse souveräner Cloudinfrastrukturen und -anwendungen. Zu den im Workshop verwendeten Technologien zählen OpenStack, Kubernetes und openDesk. Im Workshop installieren wir auf einer Sovereign Cloud Stack kompatiblen Cloud gemeinsam Tarook, die Kubernetes-Distribution des ALASCA-Stacks. In dieses Cluster installieren wir anschließend gemeinsam die souveräne Arbeitsplatzsoftware openDesk des ZenDiS (Zentrum für Digitale Souveränität).
Hinweise für Organisatoren¶
Folgende Infrastruktur wird benötigt:
- ein OpenStack Projekt pro Teilnehmer/Gruppe mit 24 vCPUs, 70 GiB memory, 25 volumes, 300 GB volume storage, 4 Floating IPs
- Application Credentials mit
memberin diesem Projekt, als.openrc - eine temporäre Hashicorp Vault Instanz, deren Adresse als
VAULT_ADDRhinterlegen und Teilnehmer root-Token alsVAULT_TOKENin der.openrczur Verfügung stellen. Vault einmalig über./managed-k8s/tools/vault/init.shinitialisieren. - eine Workstation/Jumphost-VM pro Teilnehmer/Gruppe, vorinstallierte Tools s.u.
Kommunikation und Ressourcen¶
Link zu diesem Pad: https://pads.alasca.cloud/clt-tarook
Für die Komunikation innerhalb des Workshops und um später weiter in Kontakt zu bleiben, haben wir den folgenden öffentlichen Matrix-Raum angelegt:
Du kannst auch gern dem gesamten Matrix-Space von ALASCA beitreten oder in den General-Raum kommen.
Tarook kommuniziert maßgeblich über eine öffentliche Mailingliste. Die Dokumentation lebt unter docs.tarook.cloud und die Landingpage von Tarook ist tarook.cloud.
Wenn du einen tieferen Einblick in Tarook haben möchtest, kannst du dir hier den ALASCA Tech-Talk dazu anschauen. Den Foliensatz findest du hier.
OpenDesk wird auf openCode entwickelt, du findest hier den „Getting Started Guide”, das Benutzerforum ist hier erreichbar und die Dokumentation für alle Nutzerrollen findest du hier.
Überblick Ablauf¶
Der Ablauf des Workshops passiert in zwei größeren Installationsroutinen und der Anwendungskonfiguration:
- Einloggen auf den Workstations
- Installation des Kubernetes-Cluster mit Tarook
- Intermezzo: Erklärung was wir getan haben während Installation
- Konfiguration von openDesk
- Installation von openDesk
- Intermezzo: Erklärung was wir getan haben während Installation
- Spaß am Gerät
Da die einzelnen Deployments jeweils ungefähr 30-40 Minuten dauern, sollten sie schnellstmöglich gestartet werden. Während die Skripte laufen, ist Zeit für Detailverständnis & Fragen.
Notwendige Tools¶
Folgende Tools sind auf den bereitgestellten Workstations installiert:
- wireguard (VPN tunnel), more infos about wireguard within tarook
- ssh
- direnv (load and unload environment variables automatically depending on the current directory)
- nix (Deklarativer Paketmanager) mit flakes und caching, s.a. Tarook system requirements
- kubectl, k9s
- helm >3.18.0, <4.0 - wir nutzen 3.19.1
- helmfile >= 1.0 - wir nutzen 1.1.9
- helmDiff >= 3.11 - wir nutzen 3.13.1
Tarook liefert eine Anleitung zur Installation der notwendigen Komponenten mit.
Workstations¶
Für den Workshop haben wir eine Reihe an Workstation-VMs zur Verfügung gestellt, auf denen die obigen Tools bereits installiert & konfiguriert sind.
Um die Workstations per SSH zu erreichen, müsst ihr den folgenden SSH-Key bei euch anlegen. Führt dazu folgende Befehle bei euch auf dem Rechner aus:
1## create the public key
2echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILiwBeDexANbKgVCeV7PzYg3/hoBDwyr52comoLDUi58 alasca@clt26' > ~/.ssh/id_ed25519_alasca.pub && chmod 600 ~/.ssh/id_ed25519_alasca.pub
3
4## create the private key
5cat <<'EOF' > ~/.ssh/id_ed25519_alasca && chmod 600 ~/.ssh/id_ed25519_alasca
6-----BEGIN OPENSSH PRIVATE KEY-----
7b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
8QyNTUxOQAAACC4sAXg3sQDWyoFQnlez82IN/4aAQ8Mq+dnKJqCw1IufAAAAJDKEEOMyhBD
9jAAAAAtzc2gtZWQyNTUxOQAAACC4sAXg3sQDWyoFQnlez82IN/4aAQ8Mq+dnKJqCw1IufA
10AAAECHfaa6a3ujcYDusMFUxdaFs9OYEwrNgY7UNKW/h8t2dLiwBeDexANbKgVCeV7PzYg3
11/hoBDwyr52comoLDUi58AAAADGFsYXNjYUBjbHQyNgE=
12-----END OPENSSH PRIVATE KEY-----
13EOF
Füge das zu deiner ~/.ssh/config hinzu (Linux only). Achte darauf die <ID> zu ersetzen.
1Host clt
2 HostName clt-workstation-<ID>.demo.alasca.cloud
3 User ubuntu
4 Preferredauthentications publickey
5 IdentityFile ~/.ssh/id_ed25519_alasca
6 IdentitiesOnly yes
Verbinde dich mit deiner Workstation mit:
1ssh clt
Für den weiteren Verlauf exportiere dort zuerst deine Workshop-ID als Umgebungsvariable:
1export WORKSHOP_ID=<ID>
K8s Cluster mit Tarook erstellen¶
Tarook Cluster Repo initialisieren¶
git init clt-tarook && cd clt-tarooknix run "git+https://gitlab.com/alasca.cloud/tarook/tarook#init"
Der Fehler direnv: error /home/ubuntu/clt-tarook/.envrc is blocked. Run "direnv allow" to approve its content ist kein Problem und kann (erstmal) ignoriert werden. Das Ergebnis der ersten beiden Schritte sieht nun wie folgt aus:
1ubuntu@clt-workstation-0:~/clt-tarook$ pwd
2/home/ubuntu/clt-tarook
3
4ubuntu@clt-workstation-0:~/clt-tarook$ ls -la
5total 52
6drwxrwxr-x 7 ubuntu ubuntu 4096 Mar 23 14:35 .
7drwxr-x--- 9 ubuntu ubuntu 4096 Mar 23 14:28 ..
8-rw-r--r-- 1 ubuntu ubuntu 2676 Mar 23 14:35 .envrc
9drwxrwxr-x 8 ubuntu ubuntu 4096 Mar 23 14:35 .git
10-rw-r--r-- 1 ubuntu ubuntu 283 Mar 23 14:35 .gitignore
11-rw-r--r-- 1 ubuntu ubuntu 127 Mar 23 14:35 .gitmodules
12drwxr-xr-x 2 ubuntu ubuntu 4096 Mar 23 14:35 config
13-rw-r--r-- 1 ubuntu ubuntu 4785 Mar 23 14:35 flake.lock
14-rw-r--r-- 1 ubuntu ubuntu 871 Mar 23 14:35 flake.nix
15drwxr-xr-x 5 ubuntu ubuntu 4096 Mar 23 14:35 k8s-custom
16drwxr-xr-x 14 ubuntu ubuntu 4096 Mar 23 14:35 managed-k8s
17drwxr-xr-x 2 ubuntu ubuntu 4096 Mar 23 14:35 submodules
Tarook konfigurieren¶
Speichere die vorbereitete .envrc von Tarook:
1wget -O .envrc https://gitlab.com/alasca-focis/clt-tarook-demo/-/raw/main/.envrc
Speichere die vorbereitete Tarook Konfiguration in config/default.nix und passe automatisch deinen Clusternamen an.
1curl "https://gitlab.com/alasca-focis/clt-tarook-demo/-/raw/main/config/default.nix" | sed "s/clt-demo-00/clt-demo-${WORKSHOP_ID}/g" > config/default.nix
OpenStack- und Vault-Zugang¶
Lade die Datei mit den Zugangsdaten für die ALASCA OpenStack-Cloud und den Vault herunter und speichere sie als .envrc.local im Cluster Repo (/home/ubuntu/clt-tarook):
1wget https://gitlab.com/alasca-focis/clt-tarook-demo/-/raw/creds/creds/app-cred-demo-clt-${WORKSHOP_ID}-openrc.sh -O .envrc.local
Jetzt noch alles sourcen mit
1direnv allow
Fertig! 😎
Tarook Cluster Deployment¶
Der folgende Befehl richtet im Vault sowohl eine Key-Value- als auch eine PKI (Public Key Infrastructure) Secret Engine, ein Modul zur Verwaltung von Zertifikaten, ein.
1./managed-k8s/tools/vault/mkcluster-root.sh
Folgenden Fehler bitte ignorieren:
1Trying to import etcd backup credentials ...
2usage: yq [-h] [--yaml-output] [--yaml-roundtrip]
3 [--yaml-output-grammar-version {1.1,1.2}] [--width WIDTH]
4 [--indentless-lists] [--explicit-start] [--explicit-end]
5 [--in-place] [--version]
6 [jq_filter] [files ...]
7yq: error: argument files: can't open 'config/etcd_backup_s3_config.yaml': [Errno 2] No such file or directory: 'config/etcd_backup_s3_config.yaml'
8Failed to find etcd backup credentials at config/etcd_backup_s3_config.yaml
9Ignoring, as those are optional.
Jetzt wird's ernst! Wir installieren das gesamte Deployment aus OpenStack-Ressourcen, Kubernetes und den Kubernetes Supplements (Storage Controller, Monitoring, Ingress, Load Balancing). Da der Befehl recht lange läuft und wir lieber auf Nummer sicher gehen wollen, starten wir vorher eine tmux-Session.
Sollte ein Fehler passieren, findet ihr hier ein tmux-Cheat-Sheet.
Intermezzo: OpenStack, Sovereign Cloud Stack und Tarook verstehen¶
Wir schauen uns gemeinsam Folien 7 & 9 an, um einen Überblick über die Architektur und Umsetzung von Tarook zu bekommen.
Anschließend gehen wir die einzelnen Konfigurationsoptionen in default.nix durch, um einen Überblick über die verschiedenen Tarook-Feature zu bekommen.
Tarook Deployment verifizieren¶
Wenn alles korrekt beendet wurde, solltest du in etwas folgendes sehen:
1PLAY RECAP ************************************************************************************************************************************
2clt-demo-0-gw-0 : ok=8 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
3clt-demo-0-master-0 : ok=8 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
4clt-demo-0-master-1 : ok=8 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
5clt-demo-0-master-2 : ok=8 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
6clt-demo-0-worker-0 : ok=8 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
7clt-demo-0-worker-1 : ok=8 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
8clt-demo-0-worker-2 : ok=8 changed=0 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
9
10~/clt-tarook
Logge dich in den fertigen Kubernetes-Cluster und schaue dich ein wenig um. Der nächste Befehlt erzeugt dafür eine kubeconfig in ~/clt-tarook/etc/admin.conf:
1./managed-k8s/actions/k8s-login.sh
Mittels k9s kann man Ressourcen im Kubernetes hervorragend anschauen und bearbeiten. Führe einfach k9s aus und teste alle Keyboard-Shortcuts!
OpenDesk installieren¶
Konfiguration anlegen¶
Jetzt wird es ernst! Wir checken openDesk von openCode, der GitLab Plattform der Bundesregierung, aus. Es gibt zwar eine neuere Version, aber wir haben diesen Guide noch nicht damit getestet.
1# Klone das openDesk Repo in der Version 1.12.2
2git clone https://gitlab.opencode.de/bmi/opendesk/deployment/opendesk.git --branch v1.12.2 ~/opendesk && cd ~/opendesk
Für diesen Workshop haben wir eine Konfigurationsdatei vorbereitet. In dieser Datei werden z.B. die Domain konfiguriert unter der openDesk später erreichbar sein wird, aber auch die in der Installation verfügbaren Apps (de)aktiviert. Bitte ändere an den voreingestellten Apps nichts, da dies zu Fehlern führen kann und die Installationszeit verlängert. Lade diese Datei mit folgendem Befehl herunter:
1wget https://gitlab.com/alasca-focis/clt-tarook-demo/-/raw/main/values.yaml.gotmpl -O helmfile/environments/dev/values.yaml.gotmpl
Wir setzten noch den openDesk Passwort-Seed wie folgt:
1export MASTER_PASSWORD="sovereigndigitality"
Und machen die kubeconfig des Clusters verfügbar:
1export KUBECONFIG=~/clt-tarook/etc/admin.conf
Domain & Zertifikate konfigurieren¶
Warning
Das Deployment wird spät & ohne hilfreiche Fehlermeldung fehlschlagen, wenn kein gültiges Zertifikat ausgestellt werden konnte. Bitte folgendes sorgsam befolgen und doppelt prüfen!
OpenDesk bestellt für alle Dienste (Nextcloud, XWiki, Matrix, etc.) automatisch TLS-Zertifikate via Let's Encrypt. Damit das funktionert brauchen wir im Cluster einen Issuer.
1kubectl apply -f https://gitlab.com/alasca-focis/clt-tarook-demo/-/raw/main/clusterissuer.yaml
Für den Ingress Service wurde automatisch ein LoadBalancer konfiguriert, dessen External IP der Form 94.198.185.X benötigen wir:
1kubectl get service -n k8s-svc-ingress ingress-ingress-nginx-controller
Notiere dir die Zahl an Stelle des "X"!
Die Domains [*.]opendesk-<X>.demo.alasca.cloud für die Dienste haben bereits den passenden A-Record und können für den Zugriff auf die openDesk-Installation verwendet werden.
Öffne jetzt die zentrale Konfigurationsdatei von openDesk in helmfile/environments/dev/values.yaml.gotmpl mit dem Editor deiner Wahl und trage unter global.domain deine Domain opendesk-<X>.demo.alasca.cloud ein.
Installation starten¶
Trommelwirbel! 🥁 Jetzt starten wir die Installation (und messen die Zeit):
1time helmfile apply --environment dev --namespace opendesk --suppress-diff
Der erste Output des Befehls kann einige Zeit dauern, hab etwas Geduld.
Info
Tipp: Öffne dir eine zweite SSH Session oder einen tmux Tab und verfolge die Installation mittels k9s live im Cluster.
Intermezzo: Details der openDesk Config, openCode, container.gov.de¶
Wir schauen uns gemeinsam die openDesk values.yaml.gotmpl an, welche Anwendungen verfügbar sind und welche Optionen wir sonst noch gesetzt haben.
Admin-Login¶
Nach Abschluss der Installation kann man nun https://opendesk-X.demo.alasca.cloud im Browser öffnen.
Username ist administrator, das Passwort wurde anhand des zuvor gesetzten Seeds generiert und ist als Secret im Cluster verfügbar:
1kubectl -n opendesk get secret ums-nubus-credentials -o jsonpath='{.data.administrator_password}' | base64 -d
User anlegen & testen¶
Nach dem Login als administrator kannst du noch nicht auf die einzelnen Dienste zugreifen, openDesk trennt hier strikt zwischen Admin- und Nutzer-Konten.
Daher legen wir uns einen Nutzer an:
- Klicke auf "Users"
- Klicke auf "+ ADD"
- Wähle das "openDesk User" Template aus
- Gib einen beliebigen Vornamen, Nachnamen, Nutzernamen an
- Deaktiviere "Invite user via e-Mail"
- Gib ein hinreichend komplexes Passwort an - z.B. den Output von pwgen -1
- Schließe den Nutzerverwaltungs-Tab, logge dich im Portal aus (oben rechts über Klick auf "OA" Menü öffnen)
Gib anschließend den gewählten Nutzernamen und das Passwort für den Login an. Im Portal sind für dich Files (Nextcloud), Videokonferenz (Jitsi) und die Notiz-App verfügbar. Schau mal rein!
Und jetzt?¶
Die Workstations werden wir am Montag 12 Uhr löschen. Bitte sichert euch die Ordner ~/clt-tarook und ~/opendesk ggf. auf euren eigenen Rechnern.
Falls ihr das ganze nochmal auf eurer eigenen Infrastruktur durchspielen möchtet, bietet Tarook auch die Option an, lokal per docker einen Vault zu starten. Ihr benötigt außerdem einen Zugang zu einer OpenStack-Cloud, idealerweise einer SCS-IaaS kompatiblen.
openDesk selbst läuft auf jeder CNCF-konformen K8s Distro, vom ZendiS selbst gibt es auch eine Anleitung, um z.B. einen single-node k3s Cluster zu nutzen: https://www.opendesk.eu/en/blog/opendesk-on-k3s. Diese haben wir natürlich im Vorfeld auch genutzt und gemeinsam mit dem Zendis weiter verbessert :)