์ปจํ…Œ์ด๋„ˆ ๋‚ด์˜ ํŒŒ์ผ์€ ๋ชจ๋‘ ์ผ์‹œ์ ์ธ ์กด์žฌ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด, ์ปจํ…Œ์ด๋„ˆ์— ๊ธฐ๋ก๋œ ๋ฐ์ดํ„ฐ ๋ชจ๋‘ ์‚ฌ๋ผ์ง„๋‹ค. ์ด๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Docker์™€ K8s๋Š” Volume ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

2 minute read

์ปจํ…Œ์ด๋„ˆ ๋‚ด์˜ ํŒŒ์ผ์€ ๋ชจ๋‘ ์ผ์‹œ์ ์ธ ์กด์žฌ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด, ์ปจํ…Œ์ด๋„ˆ์— ๊ธฐ๋ก๋œ ๋ฐ์ดํ„ฐ ๋ชจ๋‘ ์‚ฌ๋ผ์ง„๋‹ค. ์ด๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Docker์™€ K8s๋Š” Volume ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์ด๊ธ€์€ Docker ์ปจํ…Œ์ด๋„ˆ์˜ Volume ๊ฐœ๋…์€ ์ด๋ฏธ ์•„๋Š” ๊ฒƒ์„ ์ „์ œ๋กœ ํ•œ๋‹ค. K8s์˜ Volume์€ Docker ์ปจํ…Œ์ด๋„ˆ Volume๋ณด๋‹ค ๋” ๋‹ค์–‘ํ•˜๊ณ , ์œ ์—ฐํ•˜๋‹ค.

Volume์˜ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

spec.volumes[*]์— ๋ณผ๋ฅจ์„ ์ •์˜ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  spec.containers[*]์— ์ •์˜๋œ ์ปจํ…Œ์ด๋„ˆ์— volumeMounts[*]๋กœ ๋ณผ๋ฅจ์„ ์—ฐ๊ฒฐํ•ด์ค€๋‹ค.

apiVersion: v1
kind: Pod
spec:
  volumes:
    - name: name-of-volume
      ...
  containers:
    - image: ...
      name: ...
      volumeMounts:
        - name: name-of-volume
          mountPath: /container-dir

Volume ์œ ํ˜•๋“ค

emptyDir ์œ ํ˜•

๋น„์–ด์žˆ๋Š”(empty) ๋ณผ๋ฅจ์„ ์ œ๊ณตํ•˜๋Š” ์œ ํ˜•์ด๋‹ค. Pod์ด ์ œ๊ฑฐ๋˜๋ฉด, emptyDir ๋ณผ๋ฅจ์— ๋‹ด๊ฒจ์žˆ๋˜ ๋ฐ์ดํ„ฐ๋Š” ์˜๊ตฌ์ ์œผ๋กœ ์‚ญ์ œ๋œ๋‹ค. ๋‹จ, ์ปจํ…Œ์ด๋„ˆ ํฌ๋ž˜์‹œ ๊ฐ™์ด ์ปจํ…Œ์ด๋„ˆ ์˜ค๋ฅ˜์˜ ๊ฒฝ์šฐ์—๋Š” emptyDir์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜์ง€ ์•Š๋Š”๋‹ค. Pod์ด ์™„์ „ํžˆ ๋‚ด๋ ค๊ฐ„ ๊ฒฝ์šฐ์—๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ณดํ†ต ์บ์‹ฑ(caching) ๋“ฑ์˜ ์ž„์‹œ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋Š”๋ฐ ์ ํ•ฉํ•˜๋‹ค.

...
spec:
  volumes:
    - name: cache-volume
      emptyDir: {}
  containers:
    ...

hostPath ์œ ํ˜•

ํ˜ธ์ŠคํŠธ ๋…ธ๋“œ์˜ ๋””์Šคํฌ์— ๋ณผ๋ฅจ์„ ์ƒ์„ฑํ•ด Pod์ด ์ œ๊ฑฐ๋˜๋”๋ผ๋„ ๋ณผ๋ฅจ์˜ ๋ฐ์ดํ„ฐ๋Š” ์œ ์ง€ํ•˜๋Š” ์œ ํ˜•์ด๋‹ค. ๋‹จ, ํ˜ธ์ŠคํŠธ์˜ ๋””์Šคํฌ๋ฅผ Pod ์ปจํ…Œ์ด๋„ˆ์— ๋…ธ์ถœํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์™ ๋งŒํ•˜๋ฉด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฉฐ, ์‚ฌ์šฉ์— ๋งค์šฐ๋งค์šฐ ์œ ์˜ํ•ด์•ผ ํ•œ๋‹ค.

...
spec:
  volumes:
    - name: node-volume
      hostPath:
        # ํ˜ธ์ŠคํŠธ์˜ ๋””๋ ‰ํ† ๋ฆฌ ์œ„์น˜
        path: /data
        type: Directory # ์ฃผ์–ด์ง„ ๊ฒฝ๋กœ์— ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์žˆ์–ด์•ผ ํ•จ
        type: DirectoryOrCreate # ๊ฒฝ๋กœ์— ๋””๋ ‰ํ„ฐ๋ฆฌ๊ฐ€ ์—†๋‹ค๋ฉด, kubelet์˜ ๊ถŒํ•œ๊ณผ ๊ฐ™์€ ๊ถŒํ•œ์„ ๊ฐ€์ง„ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑ
        type: ...
  containers:
    ...

hostPath.type์œผ๋กœ ํƒ€์ž…์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด์— ๋”ฐ๋ผ ๋ณผ๋ฅจ ์ ‘๊ทผ๊ณผ ์ƒ์„ฑ์— ๋Œ€ํ•ด ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ์™ธ ํƒ€์ž…๋“ค์€ k8s ๋ฌธ์„œ๋ฅผ ์ฐธ์กฐํ•  ๊ฒƒ.

ConfigMap & Secret ์œ ํ˜•

K8s์˜ ConfigMap ๋ฆฌ์†Œ์Šค๋ฅผ ๋ณผ๋ฅจ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ, ConfigMap์— ์ •์˜๋œ key๋ฅผ ํŒŒ์ผ ์ด๋ฆ„์œผ๋กœ ํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ , value๊ฐ€ ํŒŒ์ผ ์•ˆ์— ์ž‘์„ฑ๋œ๋‹ค.

...
spec:
  volumes:
    - name: config-volume
      configMap:
        name: my-config
  containers:
    ...

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ Secret ๋ฆฌ์†Œ์Šค๋„ ์ปจํ…Œ์ด๋„ˆ ๋ณผ๋ฅจ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

PersistentVolumeClaim ์œ ํ˜•

๋’ค์—์„œ๋„ ์‚ดํŽด๋ณผ K8s ๋ฆฌ์†Œ์Šค๋กœ Persistent Volume์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ”์ธ๋”ฉ ํ•˜๋Š” ๋ฆฌ์†Œ์Šค์ด๋‹ค. ์ง€๊ธˆ์€ ์–ด๋–ป๊ฒŒ Pod์˜ Volume์œผ๋กœ ์“ธ ์ˆ˜ ์žˆ๋Š”์ง€๋งŒ ํ™•์ธํ•˜์ž.

...
spec:
  volumes:
    - name: pv-storage
      persistentVolumeClaim:
        claimName: my-pvc
  containers:
    ...

References