En las aplicaciones sensibles al tiempo, la desviación del reloj en los pods de contenedores provoca que las marcas de tiempo de los registros se desordenen. Esto hace que la correlación de incidentes pierda fiabilidad y genera inconsistencias de datos en los sistemas distribuidos. Para evitar estos problemas, agregue la anotación k8s.aliyun.com/eci-ntp-server al pod de Elastic Container Instance (ECI). De este modo, los contenedores apuntarán a un servidor NTP específico.
Requisitos previos
Antes de empezar, asegúrese de contar con lo siguiente:
Permiso para crear Deployments y pods
La dirección IP de un servidor NTP accesible
Cómo funciona
Cuando ECI crea un pod, lee la anotación k8s.aliyun.com/eci-ntp-server y configura todos los contenedores del pod para que sincronicen sus relojes con el servidor NTP especificado.
Las anotaciones de ECI solo se aplican durante la creación del pod. Agregar o modificar anotaciones en un pod en ejecución no tiene ningún efecto.
Para los Deployments, agregue la anotación en spec.template.metadata.annotations, no en metadata.annotations del nivel superior. ECI lee las anotaciones de la plantilla del pod, no del objeto Deployment en sí.
Configurar NTP para un pod
-
Cree un archivo YAML llamado
set-ntp.yamlcon a continuación contenido. Reemplace100.100.XX.XXpor la dirección IP de su servidor 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"] -
Aplique la configuración.
kubectl create -f set-ntp.yaml
Comprobar la configuración de NTP
-
Obtenga el nombre del pod.
kubectl get podSalida esperada:
NAME READY STATUS RESTARTS AGE test-ntp-599d5ff9f5-9kb56 1/1 Running 0 3m59s -
Abra un shell en el contenedor.
kubectl exec -it test-ntp-599d5ff9f5-9kb56 -- bash -
Compruebe el origen de sincronización de hora.
Si chrony no está instalado, ejecute primero
yum -y install chrony.chronyc sourcesUna línea que comienza con
^*indica el origen seleccionado actualmente. Confirme que la IP de su servidor NTP aparezca en esa línea.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