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.
$ 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:
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.
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:
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.
$ 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.
$ 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.