In diesem Lab wird aufgezeigt, wie man im Fehlerfall vorgehen kann und welche Tools einem dabei zur Verfügung stehen.
Wir verwenden dafür das Projekt aus Lab 4 [USERNAME]-dockerimage
.
Tipp
oc project [USERNAME]-dockerimageLaufende Container werden als unveränderbare Infrastruktur behandelt und sollen generell nicht modifiziert werden. Dennoch gibt es Usecases, bei denen man sich in die Container einloggen muss. Zum Beispiel für Debugging und Analysen.
Mit OpenShift können Remote Shells in die Pods geöffnet werden, ohne dass man darin vorgängig SSH installieren müsste.
Dafür steht einem der Befehl oc rsh
zur Verfügung.
Wählen Sie einen Pod aus und öffnen Sie die Remote Shell.
Tipp
oc get podsoc rsh [POD]
Tipp:
Falls oc rsh
nicht funktioniert, öffnen Sie in der Web Console ein Terminal (Applications -> Pods -> [Pod-Name] -> Terminal).
Sie können nun über diese Shell Analysen im Container ausführen:
bash-4.2$ ls -la
total 16
drwxr-xr-x. 7 default root 99 May 16 13:35 .
drwxr-xr-x. 4 default root 54 May 16 13:36 ..
drwxr-xr-x. 6 default root 57 May 16 13:35 .gradle
drwxr-xr-x. 3 default root 18 May 16 12:26 .pki
drwxr-xr-x. 9 default root 4096 May 16 13:35 build
-rw-r--r--. 1 root root 1145 May 16 13:33 build.gradle
drwxr-xr-x. 3 root root 20 May 16 13:34 gradle
-rwxr-xr-x. 1 root root 4971 May 16 13:33 gradlew
drwxr-xr-x. 4 root root 28 May 16 13:34 src
Mit exit
bzw. ctrl
+d
kann wieder aus dem Pod bzw. der Shell ausgeloggt werden.
Einzelne Befehle innerhalb des Containers können über oc exec
ausgeführt werden:
oc exec [POD] -- env
Zum Beispiel:
$ oc exec example-spring-boot-4-8mbwe -- env
PATH=/opt/app-root/src/bin:/opt/app-root/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=example-spring-boot-4-8mbwe
KUBERNETES_SERVICE_PORT_DNS_TCP=53
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_PORT_443_TCP_ADDR=172.30.0.1
KUBERNETES_PORT_53_UDP_PROTO=udp
KUBERNETES_PORT_53_TCP=tcp://172.30.0.1:53
...
Die Logfiles zu einem Pod können sowohl in der Web Console als auch auch im CLI angezeigt werden:
oc logs [POD]
Der Parameter -f
bewirkt dasselbe Verhalten wie tail -f
, also "follow".
Befindet sich ein Pod im Status CrashLoopBackOff bedeutet dies, dass er auch nach wiederholtem Neustarten nicht erfolgreich gestartet werden konnte. Die Logfiles können auch wenn der Pod nicht läuft mit dem folgenden Befehl angezeigt werden:
oc logs -p [POD]
Der Parameter -p
steht dabei für "previous", bezieht sich also auf einen Pod derselben DeploymentConfig, der zuvor noch lief, nun aber nicht mehr.
Entsprechend funktioniert dieser Befehl nur, wenn es tatsächlich einen Pod zuvor gab.
Mit OpenShift wird ein EFK-Stack (Elasticsearch, Fluentd, Kibana) mitgeliefert, der sämtliche Logfiles sammelt, rotiert und aggregiert. Kibana erlaubt es Logs zu durchsuchen, zu filtern und grafisch aufzubereiten.
Die OpenShift Platform stellt auch ein Grundset an Metriken zur Verfügung, welche einerseits in der Web Console integriert sind und andererseits dazu genutzt werden können, Pods automatisch zu skalieren.
Sie können mit Hilfe eines direkten Logins auf einen Pod nun den Ressourcenverbrauch dieses Pods beeinflussen und die Auswirkungen dazu in der Web Console beobachten.
OpenShift erlaubt es, beliebige Ports von der Entwicklungs-Workstation auf einen Pod weiterzuleiten. Dies ist z.B. nützlich, um auf Administrationskonsolen, Datenbanken, usw. zuzugreifen, die nicht gegen das Internet exponiert werden und auch sonst nicht erreichbar sind. Die Portweiterleitungen werden über dieselbe HTTPS-Verbindung getunnelt, die der OpenShift Client (oc) auch sonst benutzt. Dies erlaubt es auch dann auf Pods zu verbinden, wenn sich restriktive Firewalls und/oder Proxies zwischen Workstation und OpenShift befinden.
Übung: Auf die Spring Boot Metrics aus Lab 4 zugreifen.
oc get pod --namespace="[USERNAME]-dockerimage"
oc port-forward [POD] 9000:9000 --namespace="[USERNAME]-dockerimage"
Nicht vergessen den Pod Namen an die eigene Installation anzupassen. Falls installiert kann dafür Autocompletion verwendet werden.
Die Metrics können nun unter folgender URL abgerufen werden: http://localhost:9000/metrics/.
Die Metrics werden Ihnen als JSON angezeigt. Mit demselben Konzept können Sie nun bspw. mit Ihrem lokalen SQL Client auf eine Datenbank verbinden.
In der Dokumentation sind weiterführende Informationen zu Port Forwarding zu finden.
Note:
Der oc port-forward
-Prozess wird solange weiterlaufen, bis er vom User abgebrochen wird.
Sobald das Port-Forwarding also nicht mehr benötigt wird, kann er mit ctrl+c gestoppt werden.
Ende Lab 8