Blogs
Zeitsynchronisierung in Kubernetes
Das Einstellen der Zeit-Synchronisierung innerhalb Kubernetes.
Das Einstellen der Zeit-Synchronisierung innerhalb Kubernetes
Konfigurieren Sie alle Container im Kubernetes Cluster, um regelmäßig und zuverlässig eine Synchronisation mit dem Network Time Protocol Servern (NTP) zu erzielen und Consistency im Cluster zu gewährleisten. Unerwartetes Verhalten kann bei asynchronen Setups durchaus die Folge sein und so zu unzureichender Performance und etwaigen anderen Hinderlichkeiten führen.
Darunter sind auch Fehler, die nicht einmal unbedingt durch das Timing-Problem verursacht werden. Zum Beispiel, sofern Sie Ihr System oder Kubernetes updaten möchten. Genau dort können auch Probleme durch entsprechende Zertifikate auftreten.
Auch beim Lesen der Log-Dateien kann die Verwirrung schnell eintreten, sofern dort urplötzlich eine andere Zeitzone angezeigt wird.
Zusätzlich könnten auch die so genannten Cronjobs etwas ins Schlackern kommen.
Um dies zu verhindern, installieren Sie zuerst einmal NTP auf allen Systemen innerhalb Ihres Clusters:
In unserem Beispiel arbeiten wir mit RHEL bzw. CentOS:
sudo yum install ntp ntpdate
sudo systemctl start ntpd
sudo systemctl enable ntpd
sudo systemctl status ntpd
sudo ntpdate -u -s 0.centos.pool.ntp.org
sudo systemctl restart ntpd
Nutzen Sie nun den Befehl
timedatectl
dann sollte Folgendes erscheinen:
Wie man Zeitzonen in Kubernetes verändert
Als Erstes wäre gut zu wissen, welcher Zeitzone unsere Pods überhaupt unterliegen.
Container erben keine Zeitzonen von Ihren Hosts und können nur über den Kernel auf die Uhr zugreifen. UTC sollte bei den allermeisten Images die Standardzone sein, wenngleich das auch nicht bei jedem Container garantiert ist!
Stellen wir uns die folgende Pod-Spezifikation vor:
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep
spec:
containers:
- name: busybox
image: busybox
args:
- sleep
- "1000000"
In der oben veranschaulichten Datei wird der Befehl „sleep“ 1000000-mal innerhalb der OS Busybox ausgeführt.
Speichern Sie diese Datei und nennen Sie sie „timecheck.yaml“ Kreieren Sie anschließend den Pod, damit wir dessen Zeitzone prüfen können.
kubectl apply -f timecheck.yaml
Ihnen sollte nun angezeigt werden, dass der Pod erfolgreich erschaffen wurde.
Der unterstehende Befehl zeigt Ihnen die Zeitzone des Pods an:
kubectl exec busybox-sleep date
Der Pod nutzt, wie wir hier sehen, die UTC Zeitzone.
Nun ändern wir dies mit einer zusätzlich eingefügten Information (Red Box) in der Yaml-Datei:
apiVersion: v1
kind: Pod
metadata:
name: busybox-sleep
spec:
containers:
- name: busybox
image: busybox
args:
- sleep
- "1000000"
volumeMounts:
- name: tz-config
mountPath: /etc/localtime
volumes:
- name: tz-config
hostPath:
path: /usr/share/zoneinfo/Europe/Berlin
Speichern Sie die Datei unter dem Namen „timecheck-new.yaml“ ab und aktivieren Sie sie mit
kubectl apply -f timecheck-new.yaml
Überprüfen wir nun nochmals die Zeitzone des Pods:
kubectl exec busybox-sleep --date
Die Zeitzone hat sich nun, wie wir es wollten, zu CEST geändert.
Möchten Sie die Zeitzone nun für alle Pods ändern, müssen Sie diese um deren „volumes“ und „volumeMounts“ innerhalb ihrer Beschreibungen erweitern. Damit wird sichergestellt, dass alle Pods die Zeitzone auch in Zukunft nutzen werden.
Automated setting of time zones: Automatisierte Einstellung für Zeitzonen:
Der Kubernetes Admission Controller K8tz dient darüber hinaus als CLI Tool, um die gewünschten Zeitzonen bei Pods und in die jeweiligen Cronjobs einzuspeisen.
Die Dokumentation dazu finden Sie hier.
Author: Ralf Menti