티스토리 뷰

영구 볼륨
PV 영구 스토리지 볼륨을 설정하기 위한 객체
PVC 영구 스토리지 볼륨 사용을 요청하기 위한 객체

 

 

 

 

PV / PVC 의 라이프 싸이클

● Provisioning

- 볼륨으로 사용하기 위한 물리적인 공간 확보

- 프로비저닝은 디스크 공간을 확보하여 PV 를 생성하는 단계

Provisioning
정적 프로비저닝 PV / PVC 직접 생성하여 직접 사용하는 방식
동적 프로비저닝 ex 클라우드

 

 

 

● Binding [ 바인딩 ]

- 프로비저닝으로 생성된 PV 와 PVC 를 연결하는 단계

- PVC 를 통하여 용량 등 조건에 맞는 PV 연결

- PVC 한개가 여러 개의 PV 에 바인딩 될 수 없다

 

 

● 사용

- PVC 는 파드에 설정되고 파드는 PVC 를 통해서 볼륨을 인식해서 사용

- 할당된 PVC 는 파드를 유지하는 동안 계속 사용하며 시스템에서 임의 삭제 할 수 없다

 

 

● Reclaming [ 반환 ]

- 사용이 끝난 PVC 가 삭제되고 사용하던 PV 를 다시 사용 가능한 상태로 반환되고 초기화 되는 과정

- PV 는 연결된 PVC 가 삭제된 후 다시 다른 PVC 에 의해서 재사용이 가능한데, 재사용시, 디스크의 내용을 삭제할지 유지할지에 대한 정책 설정 가능

Reclaming
retain [ default ] pvc 사용이 끝난 후에도 스토리지 볼륨의 데이터를 보존
pvc 삭제 >> pv released 상태 + 데이터 보존
pvc 실행하면 pv binding 불가
delete pvc 사용이 끝난 후에는 스토리지 볼륨 삭제 및 pv 도 삭제
pvc 삭제 >> pv 삭제 + 데이터 삭제
recycle
[ deprecated ]
pvc 사용이 끝난 후에 스토리지 볼륨 데이터 삭제 후 스토리지 볼륨을 사용 가능한 형태로 설정
pvc 삭제 >> pv 는 그대로 + available 상태 + 데이터 보존
# available 상태라면 바로 yaml 파일을 돌리면 적용된다
# released 상태라면 pv 를 삭제하고 yaml 파일을 돌려야된다

# host_path 의 경우, reclaim 정책이 delete 인 경우 / tmp 디렉터리에서만 적용된다 

# storage volume 타입에 따라서 차이가 있을 수 있다

 

● accessModes

accessModes
ReadWriteOnce [ RWO ] 하나의 노드에서 볼륨을 읽기 쓰기로 마운트
ReadOnlyMany [ ROX ] 여러 노드에서 볼륨을 읽기 전용으로 마운트 ex> nfs
ReadWriteMany [ RWX ] 여러 노드에서 볼륨을 읽기 쓰기로 마운트 ex> nfs

 

 

 

 

PV 생성

 

 

 

 

● per.yml 생성 >> PV 생성

# capacity > storage 는 nfs-server 에서 남아있는 양을 확인해봐야 한다 [ 37G 사용 가능 ]

[vagrant@storage ~]$ df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        40G  3.2G   37G   8% /

 

# persistentVolumeReclaimpolicy : Retain

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
  labels:
    volume: nfs-pv-volume
spec:
  capacity:
    storage: 5G
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy:
    Retain
  nfs:
    path: /var/nfs_storage
    server: 192.168.98.99
    readOnly: false
...

 

 

○ pv 를 확인 할 수 있다

[vagrant@ms work]$ kubectl get pv
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   VOLUMEATTRIBUTESCLASS   REASON   AGE
nfs-pv   5G         RWX            Retain           Available                          <unset>                          94s

 

 

 

 

 

 

 

PVC 생성

 

 

 

● Labels 이 PV 와 PVC 가 같아야 된다

# Label 을 참조하는 게 selector

>> pvc.yml 생성

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  selector:
    matchLabels:
      volume: nfs-pv-volume
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1G

 

 

○ PVC 와 PV 확인

# PVC 는 1G 를 입력했는데 출력된 것에는 5G 가 생성되었는데 >> 강제적이지 않으므로 상관없다

 

 

● PV 와 PVC 교차 비교

 

 

 

 

 

 

 

 

●  apache.pvc.yml 생성

# containers > volumeMounts > name = = volumes > name

>> pv 의 이름과 상관없는 name 이 등록이 되어도 된다

>>> 스토리지에 대한 이해가 낮아도 사용 가능하다

apiVersion: v1
kind: Pod
metadata:
  name: apache-pod
  labels:
    app: myweb
spec:
  containers:
  - name: myweb-container
    image: httpd:2.4
    ports:
    - containerPort: 80
    volumeMounts:
    - name: nfs-pvc-storage
      mountPath: /usr/local/apache2/htdocs
  volumes:
  - name: nfs-pvc-storage
    persistentVolumeClaim:
      claimName:  nfs-pvc

 

 

 

 

 

 

파드와 PVC 삭제

 

 

 

 

 

>> nfs server 에는 데이터가 보존됨

 

 

 

 

>> Status 가 Released 상태이므로 바로 사용 할 수 없다

>>> 기존의 PV 를 삭제하고  recycle 로 다시 만들어야 된다

 

 

 

▩ 다시 pv 를 만들지 않으면 Pending 에서 넘어가지 않는다 [ Binding 이 안된다 ]

 

 

 

 

 

○ 그냥 pv 를 지우고 기존의 pv.yml 을 다시 재실행하면, 바운드 된다

 

 

 

 

 

 

 

▩ 일부러 PV 의 nfs server IP 를 엉터리로 입력해본다
# 192.168.98.99 >>> 192.168.98.100 으로 입력

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
  labels:
    volume: nfs-pv-volume
spec:
  capacity:
    storage: 5G
  accessModes:
  - ReadWriteMany
  persistentVolumeReclaimPolicy:
    Retain
  nfs:
    path: /var/nfs_storage
    server: 192.168.98.100
    readOnly: false
...

 

 

 

● PV 와 PVC 는 잘 올라간다

 

 

● pvc 를 사용하는 apache 를 실행해본다

더보기

apiVersion: v1
kind: Pod
metadata:
  name: apache-pod
  labels:
    app: myweb
spec:
  containers:
  - name: myweb-container
    image: httpd:2.4
    ports:
    - containerPort: 80
    volumeMounts:
    - name: nfs-pvc-storage
      mountPath: /usr/local/apache2/htdocs
  volumes:
  - name: nfs-pvc-storage
    persistentVolumeClaim:
      claimName:  nfs-pvc

 

 

>> 계속 연결이 되지 않아서 재실행 하지만 여전히 마운트가 안된다

kubectl describe pods apache-pod

 

kubectl logs apache-pod

 

○ describe / logs 로 디버깅을 하는데 정확한 이유를 알기 힘들 수도 있다

>> 직접 모두 살펴보며 디버깅 해야한다

# [ pv - pvc - pods ] 작동 중에 pv 만 삭제하면 삭제가 안된다 

>> pods 삭제하고 pvc 삭제하고 pvc 삭제하면 빠르게 삭제가 된다

# 강제 삭제로 - f  옵션을 넣을 수 있다

kubectl delete -f pv nfs-pv

 

https://kubernetes.io/ko/docs/concepts/storage/persistent-volumes/

 

퍼시스턴트 볼륨

이 페이지에서는 쿠버네티스의 퍼시스턴트 볼륨 에 대해 설명한다. 볼륨에 대해 익숙해지는 것을 추천한다. 소개 스토리지 관리는 컴퓨트 인스턴스 관리와는 별개의 문제다. 퍼시스턴트볼륨 서

kubernetes.io

 

'Kubernetes [ 쿠버네티스 ]' 카테고리의 다른 글

Kubernetes - secret / configmap  (0) 2024.03.13
Kubernetes - wordpress 배포 실습  (0) 2024.03.13
Kubernetes - nfs-volume  (0) 2024.03.12
Kubernetes emptyDir  (0) 2024.03.12
Kubernetes 커맨드 입력  (0) 2024.03.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
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
글 보관함