Dans les applications sensibles au temps, la dérive de l'horloge des pods peut désordonner les horodatages des journaux, ce qui rend la corrélation des incidents peu fiable et provoque des incohérences de données dans les systèmes distribués. Pour éviter ces problèmes, ajoutez l'annotation k8s.aliyun.com/eci-ntp-server à votre pod Elastic Container Instance (ECI) afin de pointer les conteneurs vers un serveur NTP spécifique.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Les autorisations nécessaires pour créer des Deployments et des pods
L'adresse IP d'un serveur NTP accessible
Fonctionnement
Lorsque ECI crée un pod, il lit l'annotation k8s.aliyun.com/eci-ntp-server et configure tous les conteneurs du pod pour synchroniser leurs horloges avec le serveur NTP spécifié.
Les annotations ECI sont appliquées uniquement lors de la création du pod. L'ajout ou la modification d'annotations sur un pod en cours d'exécution n'a aucun effet.
Pour les Deployments, ajoutez l'annotation dans spec.template.metadata.annotations, et non dans metadata.annotations au niveau supérieur. ECI lit les annotations depuis le modèle de pod, et non depuis l'objet Deployment lui-même.
Configurer NTP pour un pod
-
Créez un fichier YAML nommé
set-ntp.yamlavec le contenu suivant. Remplacez100.100.XX.XXpar l'adresse IP de votre serveur NTP.apiVersion: apps/v1 kind: Deployment metadata: name: test-ntp labels: app: test spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: name: test-ntp labels: app: nginx alibabacloud.com/eci: "true" annotations: k8s.aliyun.com/eci-ntp-server: 100.100.XX.XX # IP address of the NTP server spec: containers: - name: nginx image: registry.cn-shanghai.aliyuncs.com/eci_open/centos:7 ports: - containerPort: 80 command: ["/bin/sh","-c","sleep 3600"] -
Appliquez la configuration.
kubectl create -f set-ntp.yaml
Vérifier la configuration NTP
-
Récupérez le nom du pod.
kubectl get podSortie attendue :
NAME READY STATUS RESTARTS AGE test-ntp-599d5ff9f5-9kb56 1/1 Running 0 3m59s -
Ouvrez un shell dans le conteneur.
kubectl exec -it test-ntp-599d5ff9f5-9kb56 -- bash -
Vérifiez la source de synchronisation de l'heure.
Si chrony n'est pas installé, exécutez d'abord
yum -y install chrony.chronyc sourcesUne ligne commençant par
^*indique la source actuellement sélectionnée. Confirmez que l'adresse IP de votre serveur NTP apparaît sur cette ligne.210 Number of sources = 1 MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^* 100.100.XX.XX 2 6 377 35 +40us[ +135us] +/- 14ms