繁体   English   中英

Kube.netes 集群默认时区?

[英]Kubernetes cluster default timezone?

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

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

查看使用容器优化操作系统的文档:

Container-Optimized OS 是 Kube.netes Engine 和 Google Cloud Platform 上的其他 Kube.netes 部署中的默认节点操作系统映像

然后转到更改 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

容器不会从主机继承时区,并且只能访问来自 kernel 的时钟——它始终是 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

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

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

这个过程可以通过使用k8tz来简化,它是一个 kube.netes 入口 controller 和一个将时区注入 Pod 的 CLI 工具。 您可以使用 helm 轻松安装它,它会自动在集群中创建的任何 pod 上设置这些属性。 默认情况下(如果没有另外指定)它强制执行 UTC。

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

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

看起来 k8tz 不错,我刚刚试过了,问题是,我们能否控制在特定命名空间上创建的 pod 上使用 k8tz,而不是在我的 k8s 集群中的所有命名空间上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM