K8s Pod與宿主機時區不同步

2022-06-20 16:39:08 字數 2725 閱讀 8752

在k8s集群中執行的容器缺省會使用utc時間,即北京時間為凌晨3點時,容器時間為晚上7點,中間會有8小時時差。而有些分布式系統對於時間極為敏感,不允許出現時間誤差

這裡我們構建乙個nginx映象,檢視構建前的時間

apiversion: v1

kind: pod

metadata:

name: time-nginx

spec:

containers:

- name: time-nginx

image: nginx

args: [/bin/sh, -c,

'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']

建立完pod後檢視一下時間

kubectl  logs -f time 

337: fri may 1 19:01:30 utc 2020

338: fri may 1 19:01:31 utc 2020

339: fri may 1 19:01:32 utc 2020

解決問題

首先要確保宿主機時間同步

timedatectl set-timezone asia/shanghai

#將當前的 utc 時間寫入硬體時鐘

timedatectl set-local-rtc 0

#重啟依賴於系統時間的服務

systemctl restart rsyslog

systemctl restart crond

目前解決pod和宿主機時間不一致有以下集中解決方案

1、通過定製dockerfile新增時區

2、通過將時區檔案掛在到pod中

3、通過環境變數定義時區

4、進入容器內修改時區,或者docker cp時區進去

5、網上資料還有通過podpreset的方式

$ cat dockerfile.date

from centos

run rm -f /etc/localtime \

&& ln -sv /usr/share/zoneinfo/asia/shanghai /etc/localtime \

&& echo "asia/shanghai" > /etc/timezone

# 構建容器映象

$ docker build -t centos7-date:test -f dockerfile.date .

$ docker run -it centos7-date:test /bin/sh

sh-4.2# date

wed mar 6 16:40:01 cst 2019

cat time-mount.yaml 

apiversion: v1

kind: pod

metadata:

name: time

spec:

containers:

- name: time

image: nginx

args: [/bin/sh, -c,

'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']

volumemounts:

- name: timezone

mountpath: /etc/localtime

volumes:

- name: timezone

hostpath:

path: /usr/share/zoneinfo/asia/shanghai

通過命令檢視,/etc/localtime的目錄實際上就是個軟連線

如果需要系統修改時區,那麼只需要將時區檔案覆蓋到/etc/localtime,前提是宿主機設定好上海的時區。

ll /etc/localtime

lrwxrwxrwx. 1 root root 35 apr 20 00:11 /etc/localtime -> ../usr/share/zoneinfo/asia/shanghai

cat time.yaml 

apiversion: v1

kind: pod

metadata:

name: time-nginx

spec:

containers:

- name: time-nginx

image: nginx

args: [/bin/sh, -c,

'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']

env:

- name: tz

value: asia/shanghai

kubectl exec -it time-nginx /bin/sh

# date

fri may 1 19:28:33 utc 2020

# rm -f /etc/localtime && ln -sv /usr/share/zoneinfo/asia/shanghai /etc/localtime

# date

sat may 2 03:29:11 cst 2020

k8s pod的yaml檔案詳解

apiversion v1 版本 kind pod 型別,pod metadata 元資料 name string 元資料,pod的名字 namespace string 元資料,pod的命名空間 labels 元資料,標籤列表 name string 元資料,標籤的名字 annotations 元...

k8s pod的狀態為evicted

使用kubectl get pods,發現很多pod的狀態為evicted。原因eviction,即驅趕的意思,意思是當節點出現異常時,kubernetes將有相應的機制驅趕該節點上的pod。多見於資源不足時導致的驅趕。解決方案 排查資源和異常原因,防止新的驅趕產生。使用如下命令刪除舊驅趕的遺留 k...

k8s pod多種處理邏輯過程

kubernetes 建立pod 的 工作流 1 kubectl 向 k8s api server 發起乙個create pod 請求 即我們使用kubectl敲乙個create pod命令 2 k8s api server接收到pod建立請求後,不會去直接建立pod 而是生成乙個包含建立資訊的ya...