Neuigkeiten von trion.
Immer gut informiert.

Kubernetes Dashboard auf ARM 64

Kubernetes bietet eine Weboberfläche zur Clusterverwaltung bzw. Administration: Das sogenannte Kubernetes Dashboard. Das Dashboard gibt es als vorbereitetes Deployment für die Architekturen AMD/Intel 64 und ARM. Leider gibt es derzeit kein fertiges ARM 64 Deployment. Wer das reguläre ARM Deployment ausprobiert, wird zwar die zugehörigen Resourcen erfolgreich erzeugen, jedoch wird der Container nicht erfolgreich starten und in der Folge wird der Pod-Status mit einem der Fehler Error oder CrashLoopBackOff ausgegeben.

Fehlerhaftes Kubernetes Dashboard Deployment auf ARM 64
$ kubectl get pods --all-namespaces
NAMESPACE     NAME                        READY  STATUS              RESTARTS
kube-system   kubernetes-dashboard-7d597  0/1    ContainerCreating   0
kube-system   kubernetes-dashboard-7d597  0/1    Error               0
kube-system   kubernetes-dashboard-7d597  0/1    CrashLoopBackOff    1

In zukünftigen Versionen des Kubernetes Dashboard sollen Multiarch-Manifeste erzeugt werden, so dass bei einer hinreichend aktuellen Docker-Version automatisch die richtigen Images für die jeweilige Plattform bezogen werden. (Siehe https://github.com/kubernetes/dashboard/pull/3143 )

Aktuell muss noch das ARM Image auf ARM 64 umkonfiguriert werden. Mit Linux Bordmitteln wie curl und sed ist das schnell gemacht:

Deployment von Kubernetes Dashboard für ARM 64
curl -sSL https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard-arm.yaml | sed 's/-arm:/-arm64:/' | kubectl apply -f -

Wenn das Deployment erfolgt ist, kann bei laufendem kube-proxy nun mit der folgenden URL auf das Kubernetes-Dashboard im Browser zugegriffen werden:

Das verwendete Deployment erfordert einen Account, über den alle Operationen am Kubernetes-Cluster autorisiert werden. Mit einem Service-Account und einem zugehörigen Secret-Token befasst sich daher der nächste Abschnitt.

Authentifizierung für Kubernetes dashboard

Während früher der Zugriff auf das Kubernetes-Dashboard auch ohne Authentifizierung erfolgen konnte und damit beliebige Operationen am Kubernetes Cluster möglich sind, wird inzwischen ein entsprechend abgesicherter Zugriff empfohlen.

Damit das Dashboard nutzbar wird, wird ein Service-Account mit dem frei gewählten Namen dashboard eingerichtet. Dem Account werden mit einem ClusterRoleBinding clusterweite Rechte eingeräumt.

Erstellung eines Service-Account für das Kubernetes-Dashboard
kubectl create serviceaccount dashboard -n default
kubectl create clusterrolebinding dashboard-admin -n default \
  --clusterrole=cluster-admin \
  --serviceaccount=default:dashboard

Um das Token zu erhalten, mit dem der Zugriff dann erfolgen kann, wird das automatisch erzeugte zugehörige Secret abgefragt:

Abfrage des Tokens für den Service-Account dashboard
$ kubectl describe secret dashboard-token

Name:         dashboard-token-b52fm
Namespace:    default
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=dashboard
              kubernetes.io/service-account.uid=5c879bb0-9593-11e8-a796-001e06360673

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  7 bytes
token:      eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9....

Der gesamte bei token: angezeigte String ist das in die Login-Maske des Kubernetes-Dashboard einzugebende Token. Damit das Kubernetes-Dashboard nicht nur eine Verwaltung der Resourcen ermöglicht, sondern auch Metrikdaten anzeigt, sind noch ein paar weitere Schritte zu erledigen.

Heapster für ARM 64

Das Kubernetes-Dashboard verfügt über eine Integration zur Auswertung von Cluster-Metriken, wie z.B. CPU und Memory. Eine Analyse ist damit bis zu einzelnen Pods möglich. Umgesetzt werden die Metrikauswertungen mit dem Werkzeug Heapster, das wiederum auf eine InfluxDB als Timeseries-Database zurückgreift. Aktuell (Mitte 2018) wird das Kubernetes-Dashboard von AngularJS auf Angular als Frontendframework umgestellt. Nach der Umstellung wird statt der engen Kopplung an Heapster eine allgemeinere Schnittstelle, der Metrics-Server, implementiert. Wenn der Zeitpukt gekommen ist, wird das bereits als deprecated markierte Heapster entsprechenden Alternativen weichen. Bis es so weit ist, gibt es jedoch keine Alternative zu Heapster.

Installation Heapster auf ARM 64
$ curl -sSL "https://raw.githubusercontent.com/kubernetes/heapster/v1.5.4/deploy/kube-config/influxdb/influxdb.yaml" | sed "s/amd64/arm64/g" | kubectl apply -f -
$ curl -sSL "https://raw.githubusercontent.com/kubernetes/heapster/v1.5.4/deploy/kube-config/influxdb/heapster.yaml" | sed "s/amd64/arm64/g" | kubectl apply -f -

$ kubectl apply -f "https://raw.githubusercontent.com/kubernetes/heapster/v1.5.4/deploy/kube-config/rbac/heapster-rbac.yaml"

Damit das Kubernetes Dashboard die Heapster-Daten auch anzeigt, muss es einmal neu gestartet werden. Dazu reicht es, den entsprechenden Pod zu löschen - Kubernetes legt ihn automatisch neu an. Ob der Pod über das Kubernetes Dashboard oder kubectl gelöscht wird, ist dabei unerheblich.

Grafana mit Heapster

Eine noch umfangreichere Auswertung der Metrikdaten kann mit Grafana vorgenommen werden. Das Heapster Projekt stellt ein Grafana-Deployment zur Verfügung, bei dem direkt einige Dashboards für den Kubernetes-Cluster vorkonfiguriert sind.

Installation Heapster-Grafana auf ARM 64
$ curl -sSL "https://raw.githubusercontent.com/kubernetes/heapster/v1.5.4/deploy/kube-config/influxdb/grafana.yaml" | sed "s/amd64/arm64/g" |  sed "s/# type: NodePort/type: NodePort/g" | kubectl apply -f -

Nachdem Grafana installiert wurde, kann - auch wieder über kube-proxy - mit der folgenden URL die Grafana Anwendung aufgerufen werden: http://localhost:8001/api/v1/namespaces/kube-system/services/monitoring-grafana/proxy/




Zu den Themen Kubernetes, Docker und Cloud Architektur bieten wir sowohl Beratung, Entwicklungsunterstützung als auch passende Schulungen an:

Auch für Ihren individuellen Bedarf können wir Workshops und Schulungen anbieten. Sprechen Sie uns gerne an.

Feedback oder Fragen zu einem Artikel - per Twitter @triondevelop oder E-Mail freuen wir uns auf eine Kontaktaufnahme!

Zur Desktop Version des Artikels