行业网站建设价格,长沙网站建设做得好的,怎么修改wordpress模板,我要发布招聘信息容器在主机的内核上运行#xff0c;并获得时钟#xff0c;但时区不是来自内核#xff0c;而是来自用户空间。在大多数情况下#xff0c;默认使用协调世界时 (UTC)。时区的不一致#xff0c;会带来很多困扰。即使代码与时区无关#xff0c;但容器日志与系统日志时间相关联… 容器在主机的内核上运行并获得时钟但时区不是来自内核而是来自用户空间。在大多数情况下默认使用协调世界时 (UTC)。时区的不一致会带来很多困扰。即使代码与时区无关但容器日志与系统日志时间相关联排查问题也会让人头疼。一些应用程序使用机器的时区作为默认时区并希望用户设置时区。当集群中容器的时区不一致时管理会很不容易。k8tzk8tz是开源项目请查看github.com/k8tz/k8tzk8tz是一个 Kubernetes 准入控制器和一个将时区注入 Pod 的 CLI 工具。可以用作手动工具来自动转换 Deployment 和 Pod 可以作为准入控制器安装并使用注释来完全自动化创建 Pod 的过程。k8tz 可以使用 hostPath的方式或者将 emptyDir 注入 initContainer并用 TZif时区信息格式) 文件填充卷。然后将 emptyDir挂载到 Pod 每个容器的 /etc/localtime和 /usr/share/zoneinfo。为了确保所需的时区有效它向所有容器添加了 TZ环境变量。安装用 Helm 安装 k8tz准入控制器helm repo add k8tz https://k8tz.github.io/k8tz/
helm install k8tz k8tz/k8tz --set timezoneAsia/Shanghai查看 Pod 状态、Mutatingwebhookconfigurations、Service 等资源是否正常# kubectl get mutatingwebhookconfigurations.admissionregistration.k8s.io k8tz
NAME WEBHOOKS AGE
k8tz 1 31m# kubectl get svc -n k8tz
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
k8tz ClusterIP 10.233.212.11 none 443/TCP 31m# kubectl get pod -n k8tz
NAME READY STATUS RESTARTS AGE
k8tz-59bb7f7cbd-5dzmq 1/1 Running 0 31m测试现在可以创建 Pod不需要任何额外配置# kubectl run -i -t ubuntu --imageubuntu:21.04 --restartOnFailure --rmtrue --command date
Defaulted container ubuntu out of: ubuntu, k8tz (init)
Wed Jun 15 14:11:53 CST 2022
pod ubuntu deleted此时的 Pod yaml 如下环境变量 TZ 使用安装时指定的 Asia/Shanghai以及注入了 initContainers、volumeMounts、volumes 等配置apiVersion: v1
kind: Pod
metadata:labels:run: ubuntuname: ubuntunamespace: default
spec:containers:- command:- dateenv:- name: TZvalue: Asia/Shanghaiimage: ubuntu:21.04imagePullPolicy: IfNotPresentname: ubuntuvolumeMounts:- mountPath: /etc/localtimename: k8tzreadOnly: truesubPath: Asia/Shanghai- mountPath: /usr/share/zoneinfoname: k8tzreadOnly: trueinitContainers:- args:- bootstrapimage: quay.io/k8tz/k8tz:0.5.0imagePullPolicy: IfNotPresentname: k8tzvolumeMounts:- mountPath: /mnt/zoneinfoname: k8tzvolumes:- emptyDir: {}name: k8tz还可以指定 annotations例如 k8tz.io/timezoneEurope/London选择 pod 的时区# kubectl run -i -t ubuntu --imageubuntu:21.04 --restartOnFailure --rmtrue --command date --annotations k8tz.io/timezoneEurope/London
Defaulted container ubuntu out of: ubuntu, k8tz (init)
Wed Jun 15 07:13:42 BST 2022
pod ubuntu deleted或者使用注解 k8tz.io/inject禁用时区注入 Pod # kubectl run -i -t ubuntu --imageubuntu:21.04 --restartOnFailure --rmtrue --command date --annotations k8tz.io/injectfalse
Wed Jun 15 06:14:47 UTC 2022
pod ubuntu deleted如果你想使用 hostPath而不是 initContainer方式注入时区配置可以使用 k8tz.io/strategy注解# kubectl run -i -t ubuntu --imageubuntu:21.04 --restartOnFailure --rmtrue --command date --annotations k8tz.io/strategyhostPath
Wed Jun 15 14:15:26 CST 2022
pod ubuntu deletedannotations 也可以在命名空间中指定并影响在命名空间中创建的所有 pod。下面创建一个 test-k8tz namespace 用于测试# k create ns test-k8tz
namespace/test-k8tz created# k annotate ns test-k8tz k8tz.io/strategyhostPath
namespace/test-k8tz annotated# k annotate ns test-k8tz k8tz.io/timezoneEurope/London
namespace/test-k8tz annotated上面将策略设置为 hostPath 注入方式。因为安装 k8tz 时默认时区已经设置为 Asia/Shanghai所以这里将 test-k8tz namespace 时区设置为 Europe/London方便区分。此时创建的 Pod 不需要加任何注解# kubectl run -n test-k8tz -i -t ubuntu --imageubuntu:21.04 --restartOnFailure --command date
Wed Jun 15 07:19:48 BST 2022此时创建的 Pod yaml 如下此时用的是 hostPath 注入方式apiVersion: v1
kind: Pod
metadata:labels:run: ubuntuname: ubuntunamespace: test-k8tz
spec:containers:- command:- dateenv:- name: TZvalue: Europe/Londonimage: ubuntu:21.04imagePullPolicy: IfNotPresentname: ubuntuvolumeMounts:- mountPath: /etc/localtimename: k8tzreadOnly: truesubPath: Europe/London- mountPath: /usr/share/zoneinfoname: k8tzreadOnly: truevolumes:- hostPath:path: /usr/share/zoneinfotype: name: k8tz结论Kubernetes 中的时区问题有多种解决方案这些解决方案可以手动实现但在此过程中存在一些挑战和限制。使用 k8tz可以自动执行该过程确保系统中所有组件的时区一致并且所有组件都可以访问有关不同时区的信息。并且无需额外设置或更改现有资源即可工作即使在节点上没有所需文件时也是如此。- END -点个在看集群永保稳定