k8s podPreset更改所有容器時間爲當地時間。

問題:docker 容器默認會採用utc時區,所以K8s所起容器會比當前時間慢八個小時。
解決:通過Pod Preset預設置時區環境變量或掛載宿主機時間
1.配置設置時區的Pod Preset

對應的Pod Preset對象創建文件如下:

apiVersion: settings.k8s.io/v1alpha1
kind: PodPreset
metadata:
  name: allow-tz-env
spec:
  selector:
    matchLabels:
  env:
    - name: TZ
      value: Asia/Shanghai

這裏需要注意的地方是,一定需要寫selector…matchLabels,但是matchLabels爲空,標示應用於所有容器,這個正式我們所期望的

kubectl apply -f allow-tz-env.yaml
經測試發現時區是改變了,時間並沒有改變,並不一定好使。
2.掛載/etc/localtime的podpreset

apiVersion: settings.k8s.io/v1alpha1
kind: PodPreset
metadata:
  name: allow-localtime
  namespace: spinnaker
spec:
  selector:
    matchLabels:
  volumeMounts:
    - mountPath: /etc/localtime
      name: localtime
  volumes:
    - name: localtime
      hostPath:
        path: etc/localtime

網上好多資料都是這麼做的,但遇到了坑:
經測試,容器時間確實改爲當地時間。但是出現了另一個問題,容器apt-get 安裝東西的時候會報時區的錯誤,造成無法安裝環境。任意容器裏執行
root@gpupotal-backenddev-v096-vhs7l:/# ls -l /etc/localtime
lrwxrwxrwx. 1 root root 27 Apr 26 2018 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC
會發現容器自動會創建軟連接/etc/localtime -> /usr/share/zoneinfo/Etc/UTC。直接掛在/etc/localtime 到容器裏/etc/localtime會有一定衝突。所以自己採用了終結方案如下:
3.掛載/usr/share/zoneinfo的podpreset

apiVersion: settings.k8s.io/v1alpha1
kind: PodPreset
metadata:
  name: allow-localtime
  namespace: spinnaker
spec:
  selector:
    matchLabels:
  volumeMounts:
    - mountPath: /usr/share/zoneinfo/Etc/UTC
      name: localtime
  volumes:
    - name: localtime
      hostPath:
        path: /usr/share/zoneinfo/Asia/Shanghai

總結:經測試,這個方案應該是沒有問題,只需要在每個namespace下創建相應的podPreset即可。

參考:https://blog.csdn.net/yunqiinsight/article/details/82703796

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章