Print
카테고리: [ Cloud Computing & MSA ]
조회수: 87183

Docker container의 경우 timezone은 UTC(협정세계표준시,Coordinated Universal Time)를 따라간다. (왜 CUT가 아닌 UTC일까..)

Kubernetes 상에 container를기동할 경우 timezone을 한국표준시에 맞추어 달라는 요구사항에 직면하게된다.(ex.DB와 시간이 맞아야해요..)


세가지 방법을 생각해볼 수 있다.

  1. Base Image에 Timezone정보를 가지고 있다면 설정을 변경한다.(Ubuntu 등 무거운 Base Image의경우 가능하다.)
  2. Base Image에 Timezone정보가 없는 경우.Dockerfile을 이용하여 timezone정보를 복사하여 넣고 설정을 변경한다.(Alpine 등의 이미지는 /usr/share/zoneinfo 하위 내용이 없다.) 
  3. K8S에 배포시 사용하는 yaml파일을 이용해 Worker Node의 Timezone정보를 mount하여 설정한다.

1. 방식

Dockerfile에서 설정하여 사용한다.

FROM ubuntu //버전등은 자유
RUN ln -snf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

 

2. 방식

Dockerfile에서 설정하여 사용하나 alpine 등의 경량화된 이미지엔 /usr/share/zoneinfo하위정보가 없어 파일을 넣어주어야한다.

FROM alpine
COPY /usr/share/zoneinfo/Asia/Seoul /etc/localtime

 

3. 방식

deploymentstatefulset, pod를 만드는 yaml파일에 굵게 표시된 부분을 삽입한다.

pod가 기동되는 worker node의 /usr/share/zoneinfo 하위 지역을 pod에 mount하여 사용하는 방식이다.

apiVersion: v1
kind: Deployment
...
spec:
  containers:
    ...
    volumeMounts:
    - name: tz-config
      mountPath: /etc/localtime
  volumes:
    - name: tz-config
      hostPath:
        path: /usr/share/zoneinfo/Asia/Seoul

 

===================================================
 
1,2의 경우 Docker Image에 Layer가 쌓여 Docker Image 사이즈가 커질 수 있고,
3의 경우 yaml파일의 길이가 늘어나 복잡해 질 수 있다.