【kubernetes系列学习】如何使pod和host主机的时间保持一致?

【kubernetes系列学习】如何使pod和host主机的时间保持一致?

问题及主要目的

pod内输出的当前date与host主机上输出的date是不一致的,这样有时候看pod的日志会有迷惑性,下面来解决一下~

实验环境信息

[root@ningan ~]# uname -a
Linux ningan 5.4.0-131-generic #147~18.04.1-Ubuntu SMP Sat Oct 15 13:10:18 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

在Ubuntu上,/etc/localtime是系统的本地时区设置文件,影响到系统的当前date输出。
Ubuntu 18.04上,/etc/localtime是一个symbolic link,链接到文件:/usr/share/zoneinfo/Asia/Shanghai
/usr/share/zoneinfo下存储着真正的时区设置文件,/usr/share/zoneinfo/Asia/Shanghai也是一个符号链接,指向的是/usr/share/zoneinfo/PRC

[root@ningan ~]# ls -l /etc/localtime
lrwxrwxrwx 1 root root 33 Sep 24 10:18 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai
[root@ningan ~]#
[root@ningan ~]# ls -l /usr/share/zoneinfo/Asia/Shanghai
lrwxrwxrwx 1 root root 6 Aug 30 16:20 /usr/share/zoneinfo/Asia/Shanghai -> ../PRC
[root@ningan ~]#
[root@ningan ~]# ls -l /usr/share/zoneinfo/PRC
-rw-r--r-- 1 root root 582 Aug 30 16:20 /usr/share/zoneinfo/PRC
[root@ningan ~]# file /etc/localtime
/etc/localtime: symbolic link to /usr/share/zoneinfo/Asia/Shanghai

[root@ningan ~]# file /usr/share/zoneinfo/Asia/Shanghai
/usr/share/zoneinfo/Asia/Shanghai: symbolic link to ../PRC

[root@ningan ~]# file /usr/share/zoneinfo/PRC
/usr/share/zoneinfo/PRC: timezone data, version 2, 3 gmt time flags, 3 std time flags, no leap seconds, 29 transition times, 3 abbreviation chars

实验1:正常创建pod,pod和host的时间不一致

[root@ningan ~]# cat nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        imagePullPolicy: Always
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  ports:
  - port: 9000
    name: nginx-svc
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx



### 下发yaml,创建pod
[root@ningan ~]# kubectl apply -f nginx.yaml
deployment.apps/nginx-deployment created
### 查看启动的pod和svc
[root@ningan ~]# kubectl get pod,svc -A |grep nginx
default                pod/nginx-deployment-68d5f6d6b7-4rhj4            1/1     Running            0                20s
default                pod/nginx-deployment-68d5f6d6b7-5dm2f            1/1     Running            0                20s
default                pod/nginx-deployment-68d5f6d6b7-mvhpg            1/1     Running            0                20s
default                service/nginx                       ClusterIP   11.254.209.126   <none>        9000/TCP                       20s

### 进入到容器中,查看容器的当前时间
[root@ningan ~]# kubectl exec -it nginx-deployment-68d5f6d6b7-4rhj4 -- sh
# uname -a
Linux nginx-deployment-68d5f6d6b7-4rhj4 5.4.0-131-generic #147~18.04.1-Ubuntu SMP Sat Oct 15 13:10:18 UTC 2022 x86_64 GNU/Linux
# ls -l /etc/localtime
lrwxrwxrwx 1 root root 27 Mar 26  2019 /etc/localtime -> /usr/share/zoneinfo/Etc/UTC
# date
Fri Oct 28 15:37:43 UTC 2022
# exit
### 到主机上,查看主机的当前时间
[root@ningan ~]# date
Fri Oct 28 23:37:49 CST 2022

可以看到,pod内的时间和host主机的时间是相差了8个小时的。

实验2:挂载主机的/usr/share/zoneinfo/Asia/Shanghai

修改pod的yaml文件,挂载主机的/usr/share/zoneinfo/Asia/Shanghai到pod的/etc/localtime,保证pod和host的时间一致

[root@ningan ~]# cat nginx-date-test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        imagePullPolicy: Always
        ports:
        - containerPort: 80
        volumeMounts:
        - name: tz-config
          mountPath: /etc/localtime
      volumes:
      - name: tz-config
        hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  ports:
  - port: 9000
    name: nginx-svc
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx

在之前的yaml里新加了挂载文件,如下:

在这里插入图片描述

### 重新下发yaml
[root@ningan ~]# kubectl apply -f nginx-date-test.yaml
deployment.apps/nginx-deployment configured
service/nginx unchanged

### 查看启动的pod和svc
[root@ningan ~]# kubectl get pod,svc -owide -A |grep nginx
default                pod/nginx-deployment-ff5879d6b-lxb5h             1/1     Running            0                3m55s   192.169.219.76   master   <none>           <none>
default                pod/nginx-deployment-ff5879d6b-tr2h6             1/1     Running            0                3m59s   192.169.219.75   master   <none>           <none>
default                pod/nginx-deployment-ff5879d6b-zjmzf             1/1     Running            0                4m4s    192.169.219.74   master   <none>           <none>
default                service/nginx                       ClusterIP   11.254.209.126   <none>        9000/TCP                       28m     app=nginx
### 进入到容器中,查看容器的当前时间
[root@ningan ~]# kubectl exec -it nginx-deployment-ff5879d6b-lxb5h -- date
Sat Oct 29 00:03:02 CST 2022
### 到主机上,查看主机的当前时间
[root@ningan ~]# date
Sat Oct 29 00:03:08 CST 2022

已经修改成功,大功告成!

实验3:挂载主机的/etc/localtime

修改pod的yaml文件,挂载主机的/etc/localtime到pod的/etc/localtime,保证pod和host的时间一致

[root@ningan addons]# cat nginx-date-test2.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        imagePullPolicy: Always
        ports:
        - containerPort: 80
        volumeMounts:
        - name: tz-config
          mountPath: /etc/localtime
      volumes:
      - name: tz-config
        hostPath:
          path: /etc/localtime
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  ports:
  - port: 9000
    name: nginx-svc
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx

在实验1的yaml里新加了挂载文件,如下:
在这里插入图片描述

在实验2的yaml里修改了挂载文件,如下:
在这里插入图片描述

### 删除之前pod
[root@ningan addons]# kubectl delete -f nginx-date-test.yaml
deployment.apps "nginx-deployment" deleted
service "nginx" deleted

[root@ningan addons]# kubectl get pod,svc -owide -A |grep nginx
[root@ningan addons]#

### 下发新的yaml
[root@ningan addons]# kubectl get pod,svc -owide -A |grep nginx
default                pod/nginx-deployment-b85dc87bc-6zds7             1/1     Running   0                54s     192.169.219.77   master   <none>           <none>
default                pod/nginx-deployment-b85dc87bc-httb5             1/1     Running   0                54s     192.169.219.79   master   <none>           <none>
default                pod/nginx-deployment-b85dc87bc-n4rfm             1/1     Running   0                54s     192.169.219.78   master   <none>           <none>
default                service/nginx                       ClusterIP   11.254.240.43   <none>        9000/TCP                       54s     app=nginx
### 进入到容器中,查看容器的当前时间
[root@ningan addons]# kubectl exec -it nginx-deployment-b85dc87bc-6zds7 -- date
Sat Oct 29 00:15:08 CST 2022

### 到主机上,查看主机的当前时间
[root@ningan addons]# date
Sat Oct 29 00:15:10 CST 2022

大功告成~

参考

Kubernetes集群Pod使用Host的本地时区设置

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用 kubeadm 工具可以自动化安装和配置 Kubernetes 集群。以下是在单节点 CentOS 7 上使用 kubeadm 安装 Kubernetes 集群的步骤: 1. 安装 Docker:在单节点上安装 Docker,这是 Kubernetes 集群所需的容器运行时。 ``` sudo yum install -y docker sudo systemctl enable docker sudo systemctl start docker ``` 2. 安装 kubeadm:kubeadm 是用于安装 Kubernetes 集群的命令行工具。 ``` sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add - sudo touch /etc/apt/sources.list.d/kubernetes.list echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list sudo apt-get update sudo apt-get install -y kubeadm ``` 3. 初始化 Kubernetes 集群:使用 kubeadm 工具初始化 Kubernetes 集群,此命令将在单节点上安装 Kubernetes 控制平面组件。 ``` sudo kubeadm init --pod-network-cidr=10.244.0.0/16 ``` 该命令将在单节点上启动 Kubernetes 控制平面组件,并在完成后输出一个 kubeadm join 命令。将此命令保存以便稍后使用。 4. 安装网络插件:安装 CNI 网络插件,以便 Kubernetes 集群中的 Pod 可以相互通信。 ``` sudo kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml ``` 5. 加入节点(可选):如果您想将其他节点添加到 Kubernetes 集群中,请使用之前保存的 kubeadm join 命令。 ``` sudo kubeadm join <control-plane-host>:<control-plane-port> --token <token> --discovery-token-ca-cert-hash <hash> ``` <control-plane-host> 是 Kubernetes 控制平面节点的 IP 地址或主机名,<control-plane-port> 是 Kubernetes API 服务器的端口号,<token> 是用于加入节点的安全令牌,<hash> 是用于加入节点的证书哈希值。 现在,您已经在单节点上成功安装和配置了 Kubernetes 集群。您可以使用 kubectl 命令管理 Kubernetes 集群中的 Pod、服务和其他资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安安csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值