Post

클라우드프로그래밍 11주차 — ConfigMap·볼륨·사이드카 패턴

파드에 설정(ConfigMap)과 볼륨(emptyDir)을 주입하고, 사이드카 컨테이너로 관심사를 분리하는 패턴을 다룬 11주차 기록.

클라우드프로그래밍 11주차 — ConfigMap·볼륨·사이드카 패턴

11주차는 파드에 설정(ConfigMap)볼륨(emptyDir) 을 주입하고, 사이드카(sidecar) 컨테이너 로 관심사를 분리하는 패턴을 다룬다. 7주차 클러스터에 매니페스트를 적용해 진행했다.

핵심 개념

  • emptyDir: 파드 수명과 함께하는 임시 볼륨. 컨테이너가 재시작돼도 유지되지만, 파드가 삭제되면 사라진다.
  • ConfigMap: 설정값을 파드 이미지와 분리해 관리한다. 환경변수 또는 볼륨 파일 로 주입한다.
  • 사이드카 패턴: 한 파드 안에 메인 컨테이너 + 보조 컨테이너(로그 수집/프록시 등)를 두고 공유 볼륨 으로 협업한다. 관심사 분리에 쓰인다.

패턴별 동작 확인

emptyDir — 컨테이너 재시작에도 데이터 유지

sleep 파드(emptyDir 마운트)에 파일을 쓰고, 컨테이너를 강제 종료(killall5)해 재시작시켰다.

1
2
3
4
5
6
7
8
9
10
11
12
$ kubectl exec deploy/sleep -- sh -c 'echo ch05 > /data/file.txt; ls /data'
file.txt

$ kubectl get pod -l app=sleep -o jsonpath='{..containerStatuses[0].containerID}'
containerd://a1a99d833c22...                      # 재시작 전 컨테이너 ID

$ kubectl exec deploy/sleep -- killall5            # 컨테이너 프로세스 종료 → kubelet 재시작
$ kubectl get pod -l app=sleep -o jsonpath='{..containerStatuses[0].containerID}'
containerd://1143f2d81e90...                      # 재시작 후 ID 변경됨

$ kubectl exec deploy/sleep -- cat /data/file.txt
ch05                                              # emptyDir 데이터 유지

컨테이너 ID는 바뀌었지만(재생성됨) emptyDir 의 파일은 그대로 남는다.

ConfigMap을 볼륨으로 주입

ConfigMap을 /config 에 마운트한 config-reader 파드를 적용했다.

1
2
3
4
5
6
7
$ kubectl exec config-reader -- ls /config
app.properties

$ kubectl exec config-reader -- cat /config/app.properties
environment=TEST
release=v1.1
interval=7

이미지를 다시 빌드하지 않고 설정만 외부에서 주입 하는 방식이다(환경 분리).

사이드카 패턴 — 공유 볼륨으로 로그 수집

app(로그 기록) + logger(로그 수집) 두 컨테이너가 emptyDir(/logs)를 공유하는 sidecar-demo 파드를 적용했다.

1
2
3
4
5
6
7
8
9
10
11
12
13
$ kubectl get pod sidecar-demo -o jsonpath='{.spec.containers[*].name}'
app logger

$ kubectl get pod sidecar-demo
NAME           READY   STATUS
sidecar-demo   2/2     Running                 # 한 파드에 컨테이너 2개

$ kubectl logs sidecar-demo -c logger          # 사이드카가 app의 로그를 읽음
[app] log line 1
[app] log line 2
[app] log line 3
[app] log line 4
[app] log line 5

app 이 공유 볼륨에 기록한 로그를 logger 사이드카가 그대로 수집한다.

정리

1
$ kubectl delete -f sidecar-demo.yaml -f configmap-demo.yaml -f sleep-emptydir.yaml

정리

컨테이너 ID가 바뀌어도 emptyDir 데이터가 남는다는 점에서 “컨테이너 재시작”과 “파드 재생성”이 구분된다. 5주차 Docker 볼륨과 비교하면 emptyDir은 파드 수명 한정 영속성이며, 영구 보존은 PersistentVolume이 담당한다. ConfigMap은 5주차 Docker --env 의 확장으로 설정을 이미지에서 분리하는 방식이고, 사이드카는 공유 볼륨으로 보조 컨테이너가 메인 컨테이너의 출력을 처리하는 구조다.

This post is licensed under CC BY 4.0 by the author.