時間依存性の高いビジネスシナリオでは、コンテナの時刻同期が不正確だと、ビジネスの正常な動作に影響を与える可能性があります。たとえば、分散システム内のコンテナの時刻が一致していないと、データに不整合が生じる可能性があります。ログに基づいてプログラムをデバッグする際にログのタイムスタンプが不正確な場合、ログが正しくソートされず、エラー原因を正しく特定できない可能性があります。時間依存性の高いビジネスシナリオでコンテナ化アプリケーションをデプロイする場合は、Elastic Container InstanceベースのPodのNetwork Time Protocol (NTP) サービスを設定して、Pod内のコンテナの時刻同期を正確にすることができます。これにより、不正確な時刻によって発生する問題が解決され、データの正確性とビジネスの正常な動作が保証されます。
設定の説明
Elastic Container InstanceベースのPodを作成する際に、Podにk8s.aliyun.com/eci-ntp-server
アノテーションを追加して、NTPサーバーのアドレスを指定できます。これにより、Pod内のコンテナの時刻をNTPサービスの時刻と同期させることができます。これにより、Pod内のコンテナの時刻の正確性を確保できます。
アノテーションは、Podの設定ファイル内のメタデータに追加する必要があります。たとえば、Deploymentを作成する場合は、spec.template.metadataセクションにアノテーションを追加する必要があります。
Elastic Container Instanceの機能を使用するには、Elastic Container InstanceベースのPodを作成するときにのみアノテーションを追加できます。Podの更新時にアノテーションを追加または変更しても、これらのアノテーションは有効になりません。
設定例
NTPサービスを設定するために使用するアプリケーションを作成します。
kubectl create -f set-ntp.yaml
次のコードは、サンプルのset-ntp.yamlファイルの内容を示しています。
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 # NTPサーバーのIPアドレスを指定します。 spec: containers: - name: nginx image: registry.cn-shanghai.aliyuncs.com/eci_open/centos:7 ports: - containerPort: 80 command: ["/bin/sh","-c","sleep 3600" ]
コンテナにログインし、NTPサービスが想定どおりに動作するかどうかを確認します。
Podに関する情報をクエリします。
kubectl get pod
次のコマンド出力が返されます。
NAME READY STATUS RESTARTS AGE test-ntp-599d5ff9f5-9kb56 1/1 Running 0 3m59s
コンテナにアクセスします。
kubectl exec -it test-ntp-599d5ff9f5-9kb56 -- bash
コンテナの時刻が同期されているソースをクエリします。
chronyc sources
説明chronyがインストールされていない場合は、
yum -y install chrony
コマンドを実行してchronyをインストールできます。NTPサーバーのIPアドレスが返された場合、PodにNTPサービスが設定されています。次のコードは、出力例を示しています。
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