遇到的問題
1. K8S管理docker容器的項目。
2. 測試需要更改docker容器的時間測試活動等等。
3. docker容器內更改時間會提示:cannot set date Operation not permitted
解決方案
1. 使用 faketime 的方式修改時間。失敗!!! (貌似需要程序做一些改動才行,后來沒有采用此種方案,但可以學習借鑒一下)
在github上有一個工具可以幫助我們修改容器內的時間: https://github.com/wolfcw/libfaketime
具體操作,以dockerfile為例
vim Dockerfile # 准備一個dockerfile文件
FROM alpine:latest # 此dockerfile文件基於alpine鏡像生成docker鏡像 # 修改軟件鏡像源為阿里鏡像 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories # 修改時區為上海 RUN apk add -U tzdata RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' >/etc/timezone # 安裝一些必要的軟件 RUN apk add gcc RUN apk add g++ RUN apk add make RUN apk add wget RUN apk add busybox-extras # 安裝telnet工具 RUN apk add curl RUN apk add vim RUN apk add git # 安裝容器內更改時間的軟件libfaketime RUN git clone https://github.com/wolfcw/libfaketime RUN cd libfaketime/src/ && make && make install
build 生成鏡像
docker build -t alpine_zuqiu:v1 .
查看鏡像
docker images
用該鏡像啟動容器
docker run -it alpine_zuqiu:v1 /bin/sh
驗證

弊端:
1. 根據上述做的容器內修改時間,時間不會走,只是起到一個欺騙程序的作用,需要程序這邊做一些機制才能達到程序識別欺騙時間的目的。
2. 退出當前容器,再進入容器時間還原了,連接docker容器是通過開一個線程去連接,當退出后線程關閉,就沒了。
可以將制作好的鏡像上傳到私有倉庫,大家都可以研究
docker tag alpine_jietouzuqiu:v1 192.168.1.231:80/jtzq/alpine_zuqiu:latest docker push 192.168.1.231:80/jtzq/alpine_zuqiu:latest
綜上所述:后來我們沒有采用這種方法更改docker容器內的時間。
最終采用方法:
1. 准備一台或者兩台K8S的node節點,作為測試的專門測試node
2. 將測試需要更改時間驗證的pod,通過K8S標簽的方式和測試服務器綁定在一起。
3. 直接shell連接測試的服務器,使用linux系統命令 date -s “年-月-日 時:分:秒” 的方式更改時間,主機時間更改了,容器內時間自動就會變化。
4. 當測試完畢需要調回東八區的時間,在ntpdate ntp1.aliyun.com和阿里雲時間同步服務器同步為當前時間。
