'Time Zone in Kubernetes Pods Using Environment Variable

I am trying to update my pod time to Asia/Kolkata zone as per kubernetes timezone in POD with command and argument. However, the time still remains the same UTC time. Only the time zone is getting updated from UTC to Asia.

I was able to fix it using the volume mounts as below. Create a config map and apply the deployment yaml.

kubectl create configmap tz --from-file=/usr/share/zoneinfo/Asia/Kolkata -n <required namespace>

Why is the environmental variable method not working? Will a pod eviction occur from one host to another if we use volume mount time and will if affect the volume mount time after pod eviction?

The EV deployment YAML is below which does not update the time

apiVersion: apps/v1
kind: Deployment
metadata:
  name: connector
  labels:
    app: connector
  namespace: clients
spec:
  replicas: 1
  selector:
    matchLabels:
      app: connector
  template:
    metadata:
      labels:
        app: connector
    spec:
      containers:
      - image: connector
        name: connector
        resources:
          requests:
            memory: "32Mi"  # "64M"
            cpu: "250m"
          limits:
            memory: "64Mi"  # "128M"
            cpu: "500m"
        ports:
          - containerPort: 3307
            protocol: TCP
        env:
          - name: TZ
            value: Asia/Kolkata
        volumeMounts:
          - name: connector-rd
            mountPath: /home/mongobi/mongosqld.conf
            subPath: mongosqld.conf
      volumes:
      - name: connector-rd
        configMap:
          name: connector-rd
          items:
          - key: mongod.conf

Volume Mount yaml is below.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: connector
  labels:
    app: connector
  namespace: clients
spec:
  replicas: 1
  selector:
    matchLabels:
      app: connector
  template:
    metadata:
      labels:
        app: connector
    spec:
      containers:
      - image: connector
        name: connector
        resources:
          requests:
            memory: "32Mi"  # "64M"
            cpu: "250m"
          limits:
            memory: "64Mi"  # "128M"
            cpu: "500m"
        ports:
          - containerPort: 3307
            protocol: TCP
        volumeMounts:
          - name: tz-config
            mountPath: /etc/localtime
          - name: connector-rd
            mountPath: /home/mongobi/mongosqld.conf
            subPath: mongosqld.conf
      volumes:
      - name: connector-rd
        configMap:
          name: connector-rd
          items:
          - key: mongod.conf
            path: mongosqld.conf
      - name: tz-config
        hostPath:
           path: /usr/share/zoneinfo/Asia/Kolkata


Solution 1:[1]

In this scenario you need to mention type attribute as File for hostPath in the deployment configuration. The below configuration should work for you.

 - name: tz-config
        hostPath:
           path: /usr/share/zoneinfo/Asia/Kolkata
           type: File

Solution 2:[2]

Simply setting TZ env variable in deployment works for me

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Kiruba
Solution 2 Suresh Ganesan