Contents

[CKA] volume

persistent volume and persistent volume claim

pod์—์„œ ์‹คํ–‰์ค‘์ธ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ /log/app.log ํŒŒ์ผ์— ๋กœ๊ทธ๋ฅผ ์ €์žฅํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๋งŒ์•ฝ pod๊ฐ€ ์žฌ์‹œ์ž‘ ๋  ๊ฒฝ์šฐ, ํ•ด๋‹น log ํŒŒ์ผ์€ ์‚ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์—, host pc์— volume์„ mount ํ•˜์—ฌ ์‚ฌ์šฉํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

์ด๋ ‡๊ฒŒ ์ง€์ •ํ•˜๊ฒŒ ๋˜๋ฉด, ์–ด๋Š pod๊ฐ€ ์–ด๋–ค volume์„ ๋งˆ์šดํŠธํ–ˆ๋Š”์ง€ ๊ด€๋ฆฌํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง€๋ฏ€๋กœ, ์ฟ ๋ฒ„๋„คํ‹ฐ์Šค์—์„œ๋Š” ์Šคํ† ๋ฆฌ์ง€ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ธ persistent volume ๊ณผ pv์˜ ์ถ”์ƒํ™” ๋ ˆ๋ฒจ์ธ persistent volume claim์„ ์ง€์›ํ•œ๋‹ค.

persistent volume์€ ์‹ค์ œ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์˜๋ฏธํ•˜๊ณ , pvc๋Š” pod๊ฐ€ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-example
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-example
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  containers:
    - name: container-example
      image: nginx
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: storage
  volumes:
    - name: storage
      persistentVolumeClaim:
        claimName: pvc-example

์œ„์™€ ๊ฐ™์ด pv, pvc๋ฅผ ์ •์˜ํ•˜๊ฒŒ ๋˜๋ฉด, pv ๋Š” ๋…ธ๋“œ ๋‚ด์— ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ , pvc๋Š” 10gi๋ฅผ ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ๋Š” pv ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ๊ฒŒ ๋œ๋‹ค. pvc๋Š” pod ์ƒ์„ฑ ์‹œ volume mount ๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค. ์ด ๋•Œ ์œ„ ๋ช…์„ธ์„œ๋ฅผ ๋ณด๋ฉด, pv๋Š” 1gi ๋ฅผ ์ƒ์„ฑํ–ˆ๊ณ , pvc๋Š” 10gi๋ฅผ ์š”์ฒญํ•˜๋ฏ€๋กœ ์ ์ ˆํ•œ pv ๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์–ด pod๋Š” pending ์ƒํƒœ๋กœ ๋‚จ์•„์žˆ์„ ๊ฒƒ์ด๋‹ค.

๋˜ํ•œ ์œ„์— ์ •์˜๋˜์—ˆ๋“ฏ์ด, pv์™€ pvc์˜ accessMode๋„ ์„œ๋กœ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค.

  • reclaim policy ์œ„ ๋ช…์„ธ์„œ๋ฅผ ๋ณด๋ฉด pv์˜ reclaim policy๋Š” retain์œผ๋กœ ํ• ๋‹น๋˜์–ด ์žˆ๋‹ค. ๋งŒ์•ฝ pvc๊ฐ€ ์‚ญ์ œ๋˜์–ด๋„ pv์™€ ๊ทธ ์•ˆ์˜ ๋ฐ์ดํ„ฐ๋Š” ๋ณด์กด๋จ์„ ์˜๋ฏธํ•œ๋‹ค. ์ด๋•Œ pv๋Š” released ์ƒํƒœ๋กœ ๋ณ€๊ฒฝ๋˜๊ณ  pv๋ฅผ ๋‹ค์‹œ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„ , pv ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ์ˆ˜๋™์œผ๋กœ pvc๋ฅผ ๋ฐ”์ธ๋”ฉํ•ด์ค˜์•ผ ํ•œ๋‹ค.

    ๋งŒ์•ฝ pvc๊ฐ€ pod์— ํ• ๋‹น๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋ผ๋ฉด, kubectl delete pvc ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ, hang์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ๋‹ค.

storage classes

์Šคํ† ๋ฆฌ์ง€๋ฅผ ๋™์ ์œผ๋กœ provisioning ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ์†Œ์Šค์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด AWS EBS๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ GCE ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. pvc๋ฅผ ์ด์šฉํ•ด์„œ๋„ ๋™์  provision์„ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ storageClassName์— ํŠน์ • ์ด๋ฆ„์„ ์ ๊ฒŒ ๋˜๋ฉด, kubernetes ๊ด€๋ฆฌ์ž๋Š” ์ž๋™์œผ๋กœ pv๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ด๋ฅผ ํ• ๋‹นํ•œ๋‹ค.

  • provisioner: kubernetes.io/no-provisioner : local storage๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ, ๋™์ ์œผ๋กœ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  ์ˆ˜๋™์œผ๋กœ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ด ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ volumeBindingMode: WaitForFirstConsumer ๋กœ ์„ค์ •๋˜๋Š”๋ฐ ์ด๋Š” PVC๊ฐ€ ์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๊ธฐ ์ „๊นŒ์ง€ PV์— ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์„ ์ง€์—ฐํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.