Zum Hauptinhalt springen

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