一、修改pod中容器的时区
修改的方法有以下几种:
- 挂载宿主机的时区
- 传递变量
- 做镜像前修改镜像时区
- 修改apiserver的配置清单,用Pod Pres方式更改所有容器的时区
使用busybox作为测试服务,busybox的yaml文件如下
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox:1.34
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
imagePullPolicy: IfNotPresent
修改前时区前的时区如下
]# kubectl exec -it busybox -- date
Sat Mar 26 08:53:31 UTC 2022
一)挂载宿主机的时区
1、修改后的配置文件
busybox.yaml
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox:1.34
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
imagePullPolicy: IfNotPresent
volumeMounts:
- name: host-time
mountPath: /etc/localtime
readOnly: true
volumes:
- name: host-time
hostPath:
path: /etc/localtime
2、使配置生效并验证
使配置生效
# kubectl apply -f busybox.yaml
pod/busybox created
验证
]# kubectl exec -it busybox -- date
Sat Mar 26 17:02:28 CST 2022
二)传递变量
恢复试验前的配置
]# kubectl exec -it busybox -- date
Sat Mar 26 09:10:14 UTC 2022
修改配置
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
labels:
app: busybox
spec:
containers:
- name: busybox
image: busybox:1.34
imagePullPolicy: IfNotPresent
command:
- "/bin/sh"
- "-c"
- "sleep 3600"
env:
- name: TZ
value: "Asia/Shanghai"
三)做镜像前修改镜像时区
在dockerfile中添加下面的命令
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai'
四)修改apiserver的配置清单,用Pod Pres方式更改所有容器的时区
注:阿里云托管ack集群暂时不支持修改此信息,pro版本支持apiserver自定义参数
1、修改kube-apiserver.yaml文件开启PodPreset
#在末尾添加以下内容
- --runtime-config=settings.k8s.io/v1alpha1=true
#再在enable-admission-plugins=NodeRestriction下加一个PodPreset
- --enable-admission-plugins=NodeRestriction,PodPreset
[root@master ~]# cat -n /etc/kubernetes/manifests/kube-apiserver.yaml|grep runtime-config=settings.k8s.io/v1alpha1
- --runtime-config=settings.k8s.io/v1alpha1=true
[root@master ~]# cat -n /etc/kubernetes/manifests/kube-apiserver.yaml|grep enable-admission-plugins=NodeRestriction
2、创建Shanghai时区的PodPreset(仅创建了PodPreset资源的namespace名称空间中的资源支持修改的时区)
#创建PodPreset
[root@master ~]# cat time-PodPreset.yaml
apiVersion: settings.k8s.io/v1alpha1
kind: PodPreset
metadata:
name: tz-env
namespace: default #default的namespace空间中支持Asia/Shanghai时区
spec:
selector:
matchLabels:
env:
- name: TZ
value: Asia/Shanghai
#导入
[root@master ~]# kubectl apply -f time-PodPreset.yaml
podpreset.settings.k8s.io/tz-env
3、创建新pod查看时间
#创建新pod查看时间
[root@master ~]# kubectl apply -f busybox.yaml
[root@master ~]# kubectl exec -it busybox date
4、测试在kube-system名称空间中创建pod查看除default名称空间外是否还是UTC时区
只有创建了PodPreset的namespace中的资源的时区改变
#在其他namespace名称空间中创建pod测试时区是否改变
[root@master ~]# kubectl apply -f demo.yaml -n kube-system
pod/nginx-pod created
[root@master ~]# kubectl get pod -n kube-system nginx-pod
NAME READY STATUS RESTARTS AGE
nginx-pod 1/1 Running 0 24s
[root@master ~]# kubectl -n kube-system exec -it nginx-pod date