Modul 321 - Verteilte Systeme programmieren
Diese VM ist dazu gedacht ein Teil eines verteilten Systems zu beherbergen. Jede Person in der Klasse erhält eine VM um seinen Teil des verteilten Systems darauf zu hosten. Die VM's aller Personen in einer Gruppe müssen dann im Rahmen der Gruppenarbeit zu einem grossen ganzen zusammengefügt werden.
Auf der VM ist bereits ein Docker- und Kubernetes-Umgebung vorinstalliert. Sollte es im Rahmen der Projektarbeit nötig sein, weitere Software auf der VM zu installieren, ist dies grundsätzlich gestattet, solange Sie sich an die geltenden Gesetze (insbesondere Urheber/Lizenzrecht und Datenschutz) und die Nutzungsrichtlinien der TBZ in Bezug auf die IT-Infrastruktur beachten.
Im Folgenden wird die Nutzung der Container-Infrastruktur anhand von Beispielen erklärt.
Verwendete Produkte
Docker
Docker kann in der VM sowie vom lokalen Notebook aus verwendet werden. Allerdings sind es zwei Instanzen, d.h. Docker Container/Images sind nur in der einen oder anderen Umgebung sichtbar.
VM
Einloggen via SSH oder Shell in a Box in die VM.
Einfacher Container starten:
docker run --name hello-world -d -p 8091:80 registry.gitlab.com/mc-b/misegr/hello-world
Die Webseite des Containers kann mittels http://10.4.31.23:8091 angezeigt werden.
Lokaler Notebook
Diese Umgebung ist zum Builden und einfachen Tests von Containern gedacht.
- Docker CLI von hier downloaden und nur docker.exe ablegen
- Umgebungsvariable DOCKER_HOST auf tcp://10.4.31.23:2375 setzen
Einfacher Container starten:
docker run --name hello-world -d -p 8080:80 registry.gitlab.com/mc-b/misegr/hello-world
Die Webseite des Containers kann mittels http://10.4.31.23:8080 angezeigt werden.
ACHTUNG: weil diese Docker Umgebung als "Docker in Docker" läuft, sind nur Ports 8080 - 8089 verfügbar.
Container Image builden
Datei index.phpmit folgendem Inhalt erstellen:
<?php echo '<p>Ich bin in einem Container am laufen</p>'; ?>
Datei Dockerfile mit folgendem Inhalt erstellen:
FROM public.ecr.aws/docker/library/php:7.4-apache
COPY index.php /var/www/html/
Alles in ein Container Image verpacken:
docker build -t myservice .
Container starten:
docker run --name myservice -d -p 8081:80 myservice
Die Webseite des Containers kann mittels http://10.4.31.23:8081 angezeigt werden.
Podman
Podman ist eine "sichere" Alternative zu Docker.
Die Befehle von Docker und Podman sind identisch. Podman läuft nur in der VM!
Einloggen via SSH oder Shell in a Box in die VM.
Einfacher Container starten:
podman run --name hello-world -d -p 8100:80 registry.gitlab.com/mc-b/misegr/hello-world
Die Webseite des Containers kann mittels http://10.4.31.23:8100 angezeigt werden.
microk8s (Kubernetes)
Ist eine Kubernetes Distrubution für Ubuntu.
Die Umgebung ist so konzipiert, dass das Kubernetes CLI kubectl in der VM oder vom lokalen Notebook funktionert.
VM
Einloggen via SSH oder Shell in a Box in die VM.
Einfacher Container starten:
kubectl run hello-world --image registry.gitlab.com/mc-b/misegr/hello-world --restart=Never
kubectl expose pod/hello-world --type="LoadBalancer" --port 80
Anzeige laufender Container inkl. Service
kubectl get all
Die Webseite des Containers kann mittels http://10.4.31.23: angezeigt werden.
Lokaler Notebook
Einloggen via SSH oder Shell in a Box in die VM.
Eingabe von:
microk8s config view
Der angezeigte Inhalt auf dem Notebook im Home Verzeichnis als Datei .kube/config speichern.
Anschliessend IP-Adresse im Eintrag server: auf 10.4.31.23 ändern und das kubectl CLI auf dem Notebook herunterladen, siehe hier.
Nun kann das kubectl CLI wie in der VM verwendet werden.
Zugriff auf den Server
User / Password
Der User ist ubuntu, dass Password steht in der Datei /data/.ssh/passwd.
Einloggen mittels
ssh [email protected]
SSH
Auf der Server kann mittels ssh zugegriffen werden.
Der private SSH Key ist auf dem installierten Server unter /data/.ssh/id_rsa zu finden. Downloaden und dann wie folgt auf den Server einloggen:
ssh -i id_rsa [email protected]
Hinweis: Windows User verwenden bitvise und legen den privaten SSH Key im "Client key manager" ab. Sollten Sie die Command-Line verwenden erhalten Sie unter Umständen einen Fehler "invalid Format". Windows erwartet am Ende des private Key eine Leerzeile. Fügen Sie diese dem Key hinzu, dann geht das Login auch via Command-Line.
Shell in a Box (web based terminal emulator)
Mittels Shell in a Box kann via Browser auf die VM zugegriffen werden. Die Installation eines Terminal Emulators (wie bitvise) entfällt.
Der URL ist https://10.4.31.23:4200.
User und Password siehe oben.