发现问题
在安装Kubernetes集群的过程中,我并没有注意到pod的时间问题。直到在Tomcat上部署应用后,我发现pod中的时间与Node上的时间不同步。
分析问题
解决这个问题基本上可以有两种思路:
-
直接修改镜像的时间设置。好处是应用部署时无需做特殊设置,但是需要手动构建Docker镜像
-
部署应用时,单独读取主机的
/etc/localtime
文件。好处是创建pod时同步时区,无需修改镜像,但是每个应用都要单独设置
解决问题
- 修改镜像的时间
FROM ubuntu:16.04
MAINTAINER xx@example
RUN ln -sf /usr/share/zoneinfo/Asia/ShangHai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
FROM alpine3.6
MAINTAINER xx@example.cn
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
RUN apk add --no-cache tzdata \
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&&rm -rf /var/cache/apk/* /tmp/* /var/tmp/* $HOME/.cache
- pod挂载宿主机时间
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: myweb
spec:
replicas: 2
template:
metadata:
labels:
app: myweb
spec:
containers:
- name: myweb
image: harbor/tomcat:8.5-jre8
volumeMounts:
- name: host-time
mountPath: /etc/localtime
ports:
- containerPort: 80
volumes:
- name: host-time
hostPath:
path: /etc/localtime
验证
创建deployment后,在pod内和node主机上,分别执行date命令,检查时间是否同步。
PodID# kubectl exec cdnplus-core-cdn-7dc6f77fdd-w5z78 -n test date
Fri Apr 23 11:36:05 CST 2021
# date
Fri Apr 23 11:36:07 CST 2021