Nous allons continuer la configuration du fuseau horaire pour les machines virtuelles Tanzu Kubernetes Grid (TKGm), suite au premier article sur la configuration des serveurs de temps (NTP).

Cela n’est pas un problème majeur, mais peut être gênant en cas d’analyse de log ou encore de tâche CronJob K8S !

GMT+0

Tout d’abord, nous vérifions la configuration existante en nous connectant directement sur un node.

Depuis notre jumpbox, on recupere la liste des nodes. Ensuite, on rebondit pour se connecter sur un des nodes via la clé ssh et le compte utilisateur capv et pour obtenir cette information, nous utiliserons la commande timedatectl.

On est donc en UTC (ou encore GMT+0…) avec un décalage d’une heure (ou 2 heures en été…) sur nos journaux et/ou execution de taches cron.

DHCP : Mon sauveur ?

Dans un précédent article, nous avons vu comment réaliser la configuration NTP, et ma première idée a été d’utiliser la partie DHCP. En effet, il existe un code (101) pour spécifier la timezone (défini dans la RFC 4833).

 

Après un test non concluant et une capture de paquet, il s’est avère que les nœuds ne sont pas compatibles avec cette option, nous pouvons le constater dans les paramètres demandés par le DHCP DISCOVER d’un node.

Il faut donc trouver une autre solution !

$: timedatectl set-timezone

Lorsque nous souhaitons configurer le fuseau horaire sous Linux, nous utilisons la commande (en root ou sudo)

timedatectl set-timezone Europe/Paris

Mais nous n’allons pas nous connecter à l’ensemble des machines virtuelles pour effectuer cette opération !

Par chance, lors du déploiement d’un node, un ensemble de commandes sont passées avant kubeadm (preKubeAdmCommands). Ceci est spécifié, comme pour la partie NTP dans la ressource API KubeadmConfigTemplate pour les workers nodes et KubeAdmControlPlane pour les controlplanes .

Reconfiguration Timezone du cluster

Allez, nous reconfigurons notre cluster, et nous basculons dans le context du Management Cluster. 

kubectx
kubectx adm-tnz-admin@adm-tnz

On récupère la configuration des workers nodes

kubectl get KubeadmConfigTemplate time-tnz-md-0 -o yaml > time-tnz-md-0v1.yaml
nano time-tnz-md-0v1.yam

et on modifie le fichier en rajoutant la ligne suivante dans le bloc preKubeadmCommands

– timedatectl set-timezone Europe/Paris

Il faut aussi penser à changer le nom du template (on rajoute dans notre cas v1)

On applique notre yaml.

kubectl apply -f time-tnz-md-0v1.yaml

et on reconfigure maintenant le Machine Deployment de nos nodes

kubectl get MachineDeployment
kubectl edit MachineDeployment time-tnz-md-0

Il faut aussi changer le name du KubeadmConfigTemplate (on utilise notre v1)

et on applique la modification et on vérifie le status

Au bout de quelques minutes, les nouveaux workers sont disponibles et on peut verifier la configuration.

On réalise la même opération sur les Control Planes.

kubectl get KubeAdmControlPlane kubectl edit KubeAdmControlPlane time-tnz-control-plane

Comme pour le worker, on rajoute timedatectl dans le bloc preKubeAdmCommands

au bout de quelques minutes, c’est pret !

Déploiement d’un nouveau cluster

Comme pour le NTP, afin de ne pas devoir le reconfigurer suite à son deploiement, il est possible de specifier directement au déploiement la configuration timezone.

On rajoute le fichier (vsphere-timezone.yml) suivant dans le dossier ytt du provider vSphere de Tanzu à savoir:

.config/tanzu/tkg/providers/infrastructure-vsphere/ytt/
#@ load("@ytt:overlay", "overlay")
#@ load("@ytt:data", "data")

#@overlay/match by=overlay.subset({"kind":"KubeadmControlPlane"})
---
spec:
  kubeadmConfigSpec:
    #@overlay/match missing_ok=True
    preKubeadmCommands:
    #@overlay/append
    - timedatectl set-timezone Europe/Paris

#@overlay/match by=overlay.subset({"kind":"KubeadmConfigTemplate"}),expects="1+"
---
spec:
  template:
    spec:
      #@overlay/match missing_ok=True
      preKubeadmCommands:
        #@overlay/append
        - timedatectl set-timezone Europe/Paris

Les nouveaux clusters déployés auront directement la configuration de la timezone.

et avec TKGm 2 ?

Malheureusement, en TKGm 2, il n’est plus possible de le faire car nous utilisons la clusterclass qui n’utilise pas les mêmes options, et il n’y a plus de template yaml (avec ytt) mais Go…

Je mettrai à jour l’article lorsque j’aurai trouvé comment configurer facilement la timezone

 

Conclusion

Et vous, comment configurez-vous le fuseau horaire sur vos clusters K8S ?

Alexis La Goutte

Rédigé par

Alexis La Goutte

Alexis La Goutte est depuis 8 ans consultant Réseau & Sécurité chez Cheops Technology. Il intervient chez des ETI de l’ouest et quelques grands comptes nationaux. Spécialisé dans le réseau, et plus particulièrement sur les produits Aruba, et dans la virtualisation & sécurisation du réseau VMware NSX. Alexis est certifié Aruba Certified Mobility eXpert (ACMX) et Aruba Certified ClearPass Professional (ACCP) également membre des programmes Aruba Ambassador Partner et MVP Airheads depuis 2017.
Lors qu’il lui reste du temps, il est Core dev pour Wireshark (contributeur au dissector WiFi, TLS, QUIC…) depuis 2011. Il contribue aussi au module PowerNSX qui permet l’automatisation NSX via PowerShell. il y a aussi crée en 2018, PowerAruba qui regroupe différents modules concernant l’automatisation (utilisation des API REST) des produits Aruba/HPE (PowerArubaSW), pour ArubaCX (PowerArubaCX) et enfin pour ClearPass (PowerArubaCP).
Depuis 2020, Alexis est devenu vExpert, et reconnu aussi dans la catégorie vExpert NSX.