K8S修改Pod時(shí)間方案詳細(xì)代碼實(shí)例
需求:
不修改宿主系統(tǒng)時(shí)間前提下,只修改Pod 或 容器進(jìn)程時(shí)間。
方案:
- 本地部署faketime
- 部署fake-time-injector 插件
- 對(duì)Pod新增sidecar (比較靈活)
本地部署faketime:
1. 部署 faketime (所有節(jié)點(diǎn))
yum install faketime -y
2. yaml文件添加對(duì)應(yīng)環(huán)境
apiVersion: v1
kind: Pod
metadata:
name: fake-time-pod
spec:
containers:
- name: app
image: registry.cn-hangzhou.aliyuncs.com/acs/testc:v1
env:
- name: LD_PRELOAD
value: /usr/lib64/faketime/libfaketime.so.1
- name: FAKETIME
value: "+2y" # 設(shè)置為未來(lái)2年,使用"-2y"表示過(guò)去2年
volumeMounts:
- name: faketime-lib
mountPath: /usr/lib64/faketime
volumes:
- name: faketime-lib
hostPath:
path: /usr/lib64/faketime 
部署fake-time-injector 插件
vi fake-time-injector.yaml,新增以下內(nèi)容
apiVersion: v1
kind: ServiceAccount
metadata:
name: fake-time-injector-sa
namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: fake-time-injector-cr
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get", "list", "patch", "update", "watch"]
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "list"]
- apiGroups: ["admissionregistration.k8s.io"]
resources: ["mutatingwebhookconfigurations"]
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: fake-time-injector-rb
subjects:
- kind: ServiceAccount
name: fake-time-injector-sa
namespace: kube-system
roleRef:
kind: ClusterRole
name: fake-time-injector-cr
apiGroup: rbac.authorization.k8s.io
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: kubernetes-faketime-injector
namespace: kube-system
labels:
app: kubernetes-faketime-injector
spec:
replicas: 1
selector:
matchLabels:
app: kubernetes-faketime-injector
template:
metadata:
labels:
app: kubernetes-faketime-injector
spec:
containers:
- image: registry-cn-hangzhou.ack.aliyuncs.com/acs/fake-time-injector:v5 # 使用 fake-time-injector/Dockerfile 構(gòu)建鏡像
imagePullPolicy: Always
name: kubernetes-faketime-injector
resources:
limits:
cpu: 100m
memory: 100Mi
requests:
cpu: 100m
memory: 100Mi
env:
- name: CLUSTER_MODE # CLUSTER_MODE為true時(shí),命名空間內(nèi)的所有pod在一定時(shí)間范圍內(nèi)(40s)啟動(dòng)時(shí)獲得一致的偏移量
value: "true"
- name: Namespace_Delay_Timeout # 命名空間內(nèi)的所有pod在一定時(shí)間范圍內(nèi)(120s)啟動(dòng)時(shí)獲得一致的偏移量, 默認(rèn)值為40s.
value: "120"
- name: LIBFAKETIME_PLUGIN_IMAGE
value: "registry.cn-hangzhou.aliyuncs.com/acs/libfaketime:v1"
- name: FAKETIME_PLUGIN_IMAGE
value: "registry-cn-hangzhou.ack.aliyuncs.com/acs/fake-time-sidecar:v4.1" # 使用 fake-time-injector/plugins/faketime/build/Dockerfile 創(chuàng)建鏡像
serviceAccountName: fake-time-injector-sa
---
kind: Service
apiVersion: v1
metadata:
name: kubernetes-faketime-injector
namespace: kube-system
spec:
ports:
- port: 443
targetPort: 443
name: webhook
selector:
app: kubernetes-faketime-injectorkubectl apply -f fake-time-injector.yaml
對(duì)Pod修改時(shí)間方式:
libfaketime
apiVersion: v1
kind: Pod
metadata:
name: test
labels:
app: myapp
version: v1
# namespace: test
annotations:
cloudnativegame.io/fake-time-rate: "1.0" # 時(shí)間流逝速率(1.0=正常速度)
cloudnativegame.io/fake-time: "-10d" # 初始時(shí)間(支持絕對(duì)時(shí)間或相對(duì)偏移,如 +3h/-7h)
cloudnativegame.io/fake-time-enabled: "true" # 確保時(shí)間模擬功能完全激活
cloudnativegame.io/time-source: "incremental" # 指定增量時(shí)間源
spec:
containers:
- name: test
image: registry.cn-hangzhou.aliyuncs.com/acs/testc:v1
volumeMounts:
- name: host-timezone
mountPath: /etc/localtime # 掛載宿主機(jī)時(shí)區(qū)文件
readOnly: true # 只讀模式確保安全
volumes:
- name: host-timezone
hostPath:
path: /etc/localtime # 宿主機(jī)時(shí)區(qū)文件路徑
type: File # 明確指定資源類(lèi)型為文件結(jié)果:

watchmaker
apiVersion: v1
kind: Pod
metadata:
name: testpod
labels:
app: myapp
version: v1
annotations:
cloudnativegame.io/process-name: "hello" # 如果需要同時(shí)修改多個(gè)進(jìn)程用`,`隔開(kāi)進(jìn)程名即可
cloudnativegame.io/fake-time: "2030-01-01 00:00:00" # 此處還可以配置調(diào)整的秒數(shù),'86400'表示時(shí)間向后漂移一天,watchmaker不支持過(guò)去的時(shí)間。
spec:
containers:
- name: myhello
image: registry.cn-hangzhou.aliyuncs.com/acs/hello:v1
env:
- name: Modify_Sub_Process # Modify_Sub_Process為true時(shí),同時(shí)修改子進(jìn)程的時(shí)間。
value: "true"
進(jìn)入容器查看時(shí)間
結(jié)果:

采用sidecar方式
即Pod 新增一個(gè)修改時(shí)間的容器
apiVersion: v1
kind: Pod
metadata:
labels:
name: hello
name: hello
spec:
containers:
- image: 'registry.cn-hangzhou.aliyuncs.com/acs/hello:v1'
imagePullPolicy: IfNotPresent
name: myhello
- env:
- name: modify_process_name
value: hello # 如果需要同時(shí)修改多個(gè)進(jìn)程用`,`隔開(kāi)進(jìn)程名即可
- name: delay_second
value: '86400'
image: 'registry-cn-hangzhou.ack.aliyuncs.com/acs/fake-time-sidecar:v4.1'
imagePullPolicy: Always
name: fake-time-sidecar
shareProcessNamespace: true問(wèn)題1:
同namespace下 多個(gè)pod 同時(shí)啟動(dòng)時(shí),可能會(huì)相互影響
podA 時(shí)間設(shè)定是:+2y , podB 時(shí)間設(shè)定是 -10d
那么有可能 podA 和podB 都是 -10d 或者都是 -2y
kubectl apply -f nginx.yaml & kubectl apply -f test.yaml

解決方案:
1.延遲啟動(dòng) (具體延遲多久根據(jù)fake-time-injector 配置的時(shí)間)
2.劃分命名空間(不推薦)
3.修改fake-time-injector
4.采用sidecar方式
修改fake-time-injector:
方案一中部署的fake-time-injector插件,其中需要修改CLUSTER_MODE 和Namespace_Delay_Timeout

問(wèn)題2:
時(shí)間設(shè)定問(wèn)題,
絕對(duì)偏移量 如"2024-12-01 12:00:00" 時(shí)間凍結(jié)這個(gè)時(shí)間點(diǎn),不會(huì)變動(dòng)。
相對(duì)偏移量 如"'+3h'或者'-20m'" ,時(shí)間會(huì)變動(dòng) 只能針對(duì)一個(gè)時(shí)間單位修改,
如 +7h -20m +30s -1y 不能 -1y10d 7h20m 這種形式。
# 可以下載faketime 單獨(dú)嘗試。 faketime -f '-7h' date 查看效果
絕對(duì)偏移量:cloudnativegame.io/fake-time: "2024-12-01 12:00:00"
apiVersion: v1
kind: Pod
metadata:
name: nginx
annotations:
cloudnativegame.io/fake-time-rate: "1.0" # 時(shí)間流逝速率(1.0=正常速度)
cloudnativegame.io/fake-time: "2024-12-01 12:00:00" # 初始時(shí)間(支持絕對(duì)時(shí)間或相對(duì)偏移,如 +3h/-7h)
cloudnativegame.io/fake-time-enabled: "true" # 確保時(shí)間模擬功能完全激活
cloudnativegame.io/time-source: "incremental" # 指定增量時(shí)間源
spec:
containers:
- name: my-container
image: nginx
resources:
requests:
cpu: "0.1"
memory: "50Mi"
limits:
cpu: "1"
memory: "100Mi"
volumeMounts:
- name: host-timezone
mountPath: /etc/localtime # 掛載宿主機(jī)時(shí)區(qū)文件
readOnly: true # 只讀模式確保安全
volumes:
- name: host-timezone
hostPath:
path: /etc/localtime # 宿主機(jī)時(shí)區(qū)文件路徑
type: File # 明確指定資源類(lèi)型為文件

相對(duì)偏移量:
只會(huì)識(shí)別最后的單位以及數(shù)字
apiVersion: v1
kind: Pod
metadata:
name: nginx
annotations:
cloudnativegame.io/fake-time-rate: "1.0" # 時(shí)間流逝速率(1.0=正常速度)
cloudnativegame.io/fake-time: "+2y10d2h" # 初始時(shí)間(支持絕對(duì)時(shí)間或相對(duì)偏移,如 +3h/-7h20m)
cloudnativegame.io/fake-time-enabled: "true" # 確保時(shí)間模擬功能完全激活
cloudnativegame.io/time-source: "incremental" # 指定增量時(shí)間源
spec:
containers:
- name: my-container
image: nginx
resources:
requests:
cpu: "0.1"
memory: "50Mi"
limits:
cpu: "1"
memory: "100Mi"
volumeMounts:
- name: host-timezone
mountPath: /etc/localtime # 掛載宿主機(jī)時(shí)區(qū)文件
readOnly: true # 只讀模式確保安全
volumes:
- name: host-timezone
hostPath:
path: /etc/localtime # 宿主機(jī)時(shí)區(qū)文件路徑
type: File # 明確指定資源類(lèi)型為文件

只識(shí)別最后的單位以及數(shù)字,增加兩小時(shí)
總結(jié)
到此這篇關(guān)于K8S修改Pod時(shí)間方案的文章就介紹到這了,更多相關(guān)K8S修改Pod時(shí)間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Hadoop 2.x與3.x 22點(diǎn)比較,Hadoop 3.x比2.x的改進(jìn)
本文介紹了Hadoop3版本中添加的新功能,Hadoop 2和Hadoop 3的區(qū)別,在這篇文章中,我們將討論Hadoop 2.x與Hadoop 3.x之間的比較。感興趣的朋友跟隨小編一起看一下2018-09-09
k8s中容器創(chuàng)建的全過(guò)程實(shí)踐
這篇文章主要介紹了k8s中容器創(chuàng)建的全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-07-07
Kubernetes集群中Calico網(wǎng)絡(luò)插件報(bào)錯(cuò)問(wèn)題分析及解決過(guò)程
Kubernetes集群中Calico網(wǎng)絡(luò)插件報(bào)錯(cuò)(如FailedCreatePodSandBox)通常由配置錯(cuò)誤、RBAC權(quán)限缺失或組件故障導(dǎo)致,解決方法包括重啟Calico組件、驗(yàn)證配置和權(quán)限,定期監(jiān)控與維護(hù)以確保網(wǎng)絡(luò)正常運(yùn)行2025-10-10
Kubernetes故障排除有效維護(hù)集群的最佳實(shí)踐工具
這篇文章主要為大家介紹了Kubernetes故障排除有效維護(hù)集群的最佳實(shí)踐工具詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
通過(guò)kubernetes部署nginx+php網(wǎng)站環(huán)境過(guò)程
本文詳細(xì)介紹了如何在Kubernetes中部署Nginx+PHP網(wǎng)站環(huán)境,包括環(huán)境準(zhǔn)備、部署步驟、Service、ConfigMap、Ingress等配置,并提供了具體的YAML文件示例和命令,通過(guò)這些步驟,可以實(shí)現(xiàn)高可用、可擴(kuò)展的Web服務(wù)2026-01-01
Istio 自動(dòng)注入 sidecar 失敗導(dǎo)致無(wú)法訪問(wèn)webhook服務(wù)的解決方法
最近工作中在部署Istio環(huán)境的過(guò)程中發(fā)現(xiàn)官方示例啟動(dòng)的pod不能訪問(wèn)不到Istio的webhook,這個(gè)問(wèn)題也是困擾了我一天,我把他歸類(lèi)到sidecar注入失敗的情況下,本文給大家分享問(wèn)題解決方法,感興趣的朋友跟隨小編一起看看吧2023-10-10
再分享6個(gè)可無(wú)限激活阿里云盤(pán)邀請(qǐng)碼,不信你不能激活阿里云盤(pán)
這篇文章主要分享6個(gè)可無(wú)限激活的阿里云盤(pán)邀請(qǐng)碼,不信你不能激活阿里云盤(pán),需要的朋友可以參考下2020-11-11

