Docker container의 경우 timezone은 UTC(협정세계표준시,Coordinated Universal Time)를 따라간다. (왜 CUT가 아닌 UTC일까..)
Kubernetes 상에 container를기동할 경우 timezone을 한국표준시에 맞추어 달라는 요구사항에 직면하게된다.(ex.DB와 시간이 맞아야해요..)
세가지 방법을 생각해볼 수 있다.
- Base Image에 Timezone정보를 가지고 있다면 설정을 변경한다.(Ubuntu 등 무거운 Base Image의경우 가능하다.)
- Base Image에 Timezone정보가 없는 경우.Dockerfile을 이용하여 timezone정보를 복사하여 넣고 설정을 변경한다.(Alpine 등의 이미지는 /usr/share/zoneinfo 하위 내용이 없다.)
- 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. 방식
deployment
나 statefulset
, 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파일의 길이가 늘어나 복잡해 질 수 있다.