Kubernetes 集群默认时区?
Kubernetes cluster default timezone?
我对我的 Kubernetes 集群使用的时区有疑问。我知道我可以调整 pods(https://evalle.xyz/posts/kubernetes-tz/) 的时区。
但是,我想确保我的集群在时区中始终使用 UTC。这是默认选项还是会随时间变化?
查看文档 Using Container-Optimized OS:
Container-Optimized OS is the default node OS Image in Kubernetes
Engine and other Kubernetes deployments on Google Cloud Platform.
然后转到 Changing the time zone 以进行容器优化 OS:
The default time zone of Container-Optimized OS is UTC0.
和
Note that /etc is stateless, so the timezone will be reset to the
default (UTC0) every reboot.
因此,如果您不将节点的 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
容器不会从主机继承时区,只能从内核访问时钟——它始终是 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 准入控制器和一个将时区注入 Pods 的 CLI 工具。您可以使用 helm 轻松安装它,它会自动在集群中创建的任何 pod 上设置这些属性。默认情况下(如果没有另外指定)它强制执行 UTC。
helm repo add k8tz https://k8tz.github.io/k8tz/
helm install k8tz k8tz/k8tz
免责声明:我是 k8tz 的作者。
看起来 k8tz 不错,我刚刚试过了,问题是,我们能否控制在 pods 上使用 k8tz 在特定名称空间而不是在我的 k8s 集群中的所有名称空间上创建。
我对我的 Kubernetes 集群使用的时区有疑问。我知道我可以调整 pods(https://evalle.xyz/posts/kubernetes-tz/) 的时区。
但是,我想确保我的集群在时区中始终使用 UTC。这是默认选项还是会随时间变化?
查看文档 Using Container-Optimized OS:
Container-Optimized OS is the default node OS Image in Kubernetes Engine and other Kubernetes deployments on Google Cloud Platform.
然后转到 Changing the time zone 以进行容器优化 OS:
The default time zone of Container-Optimized OS is UTC0.
和
Note that /etc is stateless, so the timezone will be reset to the default (UTC0) every reboot.
因此,如果您不将节点的 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
容器不会从主机继承时区,只能从内核访问时钟——它始终是 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 准入控制器和一个将时区注入 Pods 的 CLI 工具。您可以使用 helm 轻松安装它,它会自动在集群中创建的任何 pod 上设置这些属性。默认情况下(如果没有另外指定)它强制执行 UTC。
helm repo add k8tz https://k8tz.github.io/k8tz/
helm install k8tz k8tz/k8tz
免责声明:我是 k8tz 的作者。
看起来 k8tz 不错,我刚刚试过了,问题是,我们能否控制在 pods 上使用 k8tz 在特定名称空间而不是在我的 k8s 集群中的所有名称空间上创建。