티스토리 뷰
영구 볼륨 | |
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 |