前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何给tke集群的pod设置时区

如何给tke集群的pod设置时区

原创
作者头像
聂伟星
修改2023-08-14 12:35:10
2K4
修改2023-08-14 12:35:10
举报

腾讯云容器服务(TKE)集群中容器系统时间默认为 UTC 协调世界时间 (Universal Time Coordinated),与节点本地所属时区 CST (上海时间)相差8个小时。在容器使用过程中,当需要获取系统时间用于日志记录、数据库存储等相关操作时,容器内时区不一致问题将会带来一系列困扰。

默认时间不支持直接以集群为单位进行修改,但可在单个容器内进行修改。

1. 制作镜像设置时区

要想修改容器时区,我们可以在做镜像的时候就将时区设置好,具体可以参考tke官方文档

https://cloud.tencent.com/document/product/457/41877

2. pod设置环境变量配置时区

首先我们起一个测试pod,不配置时区,看下容器内是什么时间

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: time-zone-test
    qcloud-app: time-zone-test
  name: time-zone-test
  namespace: weixnie
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: time-zone-test
      qcloud-app: time-zone-test
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      labels:
        k8s-app: time-zone-test
        qcloud-app: time-zone-test
    spec:
      containers:
      - args:
        - 700d
        command:
        - sleep
        image: centos:7
        imagePullPolicy: Always
        name: time-zone-test
        resources: {}
        securityContext:
          privileged: false
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      imagePullSecrets:
      - name: qcloudregistrykey
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}

容器启动后,进入容器查看时间是utc时间,和本地相差8小时

下面我们用环境变量设置下时区

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: time-zone-test
    qcloud-app: time-zone-test
  name: time-zone-test
  namespace: weixnie
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: time-zone-test
      qcloud-app: time-zone-test
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      labels:
        k8s-app: time-zone-test
        qcloud-app: time-zone-test
    spec:
      containers:
      - args:
        - 700d
        command:
        - sleep
        env:
        - name: TZ
          value: Asia/Shanghai
        image: centos:7
        imagePullPolicy: Always
        name: time-zone-test
        resources: {}
        securityContext:
          privileged: false
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      imagePullSecrets:
      - name: qcloudregistrykey
      restartPolicy: Always

再登录pod的时候,容器时间就和本地时间一致了

3. 挂载本地时区文件

一般节点的时区是cst时区,我们可以将节点的时区文件挂载到容器里面,这样容器内就变成上海时间了

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    k8s-app: time-zone-test
    qcloud-app: time-zone-test
  name: time-zone-test
  namespace: weixnie
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s-app: time-zone-test
      qcloud-app: time-zone-test
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      labels:
        k8s-app: time-zone-test
        qcloud-app: time-zone-test
    spec:
      containers:
      - args:
        - 700d
        command:
        - sleep
        image: centos:7
        imagePullPolicy: Always
        name: time-zone-test
        resources: {}
        securityContext:
          privileged: false
        volumeMounts:
        - mountPath: /etc/localtime
          name: config
          readOnly: true
      dnsPolicy: ClusterFirst
      imagePullSecrets:
      - name: qcloudregistrykey
      restartPolicy: Always
      volumes:
      - hostPath:
          path: /etc/localtime
          type: File
        name: config

登录容器,发现node节点的时区文件挂载到容器内了,然后时间也变成了上海时间。

3. 问题处理

给pod设置时区时候,遇到了一个问题,就是pod里面的时区会不生效,环境变量和文件都设置了,登陆容器看,还是utc时区,这是什么原因呢?

文件和环境变量都设置生效的,但是时间没有改,这是因为容器使用的是alpine linux镜像,默认不含时区数据包,导致时区和时间配置无法生效。

容器内测试安装下tzdata时区数据包后,查看时间正常。将对应的安装包操作可以写到dockerfile,然后更新镜像即可。

代码语言:javascript
复制
#定义时区参数
ENV TZ=Asia/Shanghai
#安装时区数据包
RUN apk add tzdata
#设置时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 制作镜像设置时区
  • 2. pod设置环境变量配置时区
  • 3. 挂载本地时区文件
  • 3. 问题处理
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档