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 ?