4

我对 Kubernetes 集群使用的时区有疑问。我知道我可以调整 pod 的时区(https://evalle.xyz/posts/kubernetes-tz/)。

但是,我想确保我的集群始终在时区使用 UTC。这是默认选项还是会随着时间而改变?

4

2 回答 2

2

查看文档Using Container-Optimized OS

Container-Optimized OS 是 Kubernetes Engine和 Google Cloud Platform 上的其他 Kubernetes 部署中的默认节点 OS 映像。

然后转到更改Container-Optimized OS 的时区:

Container-Optimized OS的默认时区UTC0

请注意,/etc 是无状态的,因此每次重新启动时时区都会重置为默认值 (UTC0)。

因此,如果您不Image type将节点从默认的 Container-Optimized OS 更改为 Ubuntu,则与时区设置无关。

此外,我检查了我的集群:

$ date
Tue Feb  4 09:15:51 UTC 2020
$ ls -l /etc/ | grep localtime
lrwxrwxrwx 1 root root    25 Jan 29 08:37 localtime -> ../usr/share/zoneinfo/UTC
于 2020-02-04T09:09:16.383 回答
2

容器不会从主机继承时区,并且只能从内核访问时钟 - 始终是 UTC。大多数镜像的默认时区是 UTC,但它不能保证并且可能因容器而异,因为它可以在 pod 或镜像级别更改。

您可以通过将 UTC TZif 文件从节点机器挂载到/etc/localtime容器中来设置 pod 的时区。例如:

apiVersion: v1
kind: Pod
metadata:
  name: date-pod-amsterdam
spec:
  containers:
  - image: ubuntu:21.04
    name: ubuntu
    args:
    - date
    volumeMounts:
    - name: zoneinfo
      mountPath: /etc/localtime
      subPath: UTC
      readOnly: true
  volumes:
  - name: zoneinfo
    hostPath:
      path: /usr/share/zoneinfo
  restartPolicy: OnFailure

TZ有时,容器会使用之前的环境变量设置其时区,/etc/localtime并且也需要将其设置为UTC

spec:
  containers:
  - env:
    - name: TZ
      value: UTC

k8tz可以通过使用Kubernetes 准入控制器和 CLI 工具将时区注入 Pod来简化此过程。您可以使用 helm 轻松安装它,它会自动在集群中创建的任何 pod 上设置这些属性。默认情况下(如果未另行指定),它强制执行 UTC。

helm repo add k8tz https://k8tz.github.io/k8tz/
helm install k8tz k8tz/k8tz

免责声明:我是 k8tz 的作者。

于 2021-10-31T20:33:07.040 回答