sum*_*mir 8 timezone kubernetes google-kubernetes-engine kubernetes-cluster
我对 Kubernetes 集群使用的时区有疑问。我知道我可以调整 Pod 的时区(https://evalle.xyz/posts/kubernetes-tz/)。
但是,我想确保我的集群始终在时区使用 UTC。这是默认选项还是会随着时间的推移而改变?
查看使用容器优化操作系统的文档:
容器优化操作系统是 Kubernetes Engine 和 Google Cloud Platform 上其他 Kubernetes 部署中的默认节点操作系统映像。
然后转到更改容器优化操作系统的时区:
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
Run Code Online (Sandbox Code Playgroud)
小智 7
容器不会从主机继承时区,只能访问内核的时钟 - 始终为 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
Run Code Online (Sandbox Code Playgroud)
有时,容器会使用TZ之前的环境变量来设置时区/etc/localtime,并且也需要将其设置为UTC。
spec:
containers:
- env:
- name: TZ
value: UTC
Run Code Online (Sandbox Code Playgroud)
可以通过使用k8tzkubernetes 准入控制器和 CLI 工具将时区注入 Pod 来简化此过程。您可以使用 helm 轻松安装它,它会自动在集群中任何创建的 pod 上设置这些属性。默认情况下(如果没有另外指定)它强制执行 UTC。
helm repo add k8tz https://k8tz.github.io/k8tz/
helm install k8tz k8tz/k8tz
Run Code Online (Sandbox Code Playgroud)
免责声明:我是 k8tz 的作者。
| 归档时间: |
|
| 查看次数: |
21128 次 |
| 最近记录: |