쿠버네티스 Kubernetes 스토리지 볼륨 6 / 정적 볼륨 프로비저닝 1
# 정적 볼륨 프로비저닝
- PV 및 PVC리소스를 직접 생성하고 사용하는 방식
# NFS 스토리지 구성
# NFS 서버 패키지 설치
# NFS 공유 디렉터리 설정
# NFS 내보내기 설정
# NFS 공유 디렉터리에 파드가 사용 할 index.html 파일 생성
# NFS 공유 디렉터리에 적절한 권한 부여
# NFS 서버 서비스 재시작
# NFS 서버 서비스 상태 확인
vagrant@k-control:~$ sudo apt install -y nfs-kernerl-server
vagrant@k-control:~$ sudo mkdir /nfs-volume -
vagrant@k-control:~$ echo "/nfs-volume *(rw,sync,no_subtree_check)" | sudo tee /etc/exports
vagrant@k-control:~$ echo "hello NFS volume" | sudo tee /nfs-volume/index.html
vagrant@k-control:~$ sudo chown -R nobody:nogroup /nfs-volume
vagrant@k-control:~$ sudo chmod 777 /nfs-volume
vagrant@k-control:~$ sudo systemctl restart nfs-kernel-server
vagrant@k-control:~$ sudo systemctl status nfs-kernel-server
# NFS 클라이언트 구성(node1, node2, node3)
# NFS 클라이언트 패키지인 nfs-common 설치
파드가 직접 서버에 마운트해서 사용하는게 아니다. NFS서버가 있으면 호스트가 연결을 해서 호스트가 파드로 제공해주는 형태이기 때문에 노드에 nfs-common 패키지를 설치해야한다.
# PV 생성 및 확인
# pv 리소스 정의 파일 작성
# ldh-pv-nfs.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: ldh-pv-nfs
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
path: /nfs-volume
server: 192.168.200.50
https://kubernetes.io/ko/docs/concepts/storage/persistent-volumes/
# .spec.capacity.storage : 스토리지 용량 지정(용량 제한)
# .spec.accessMode : 접근 방식 관련 옵션(스토리지에 따라 지원 옵션이 다름, 사용자 임의로 설정 불가)
1) ReadWriteOnce : 하나의 파드만 읽기/쓰기 가능
2) ReadWirteMany : 여러 파드 읽기/쓰기 가능
3) ReadOnlyMany : 여러 파드 읽기만 가능
ex) share목적인 파일시스템은 공유하기 위해 ReadWriteMany가 가능
# .spec.persistentVolumeReclaimPolicy : 회수 정책
1) Retain
2) Delete
3) Recycle
# .spec.nfs : NFS 볼륨 ,emptyDir, hostPath와 같은 볼륨을 지정. 볼륨에 따라 하위 필드는 달라진다.
# PV 리소스 생성
# PV 리소스 상태 확인
vagrant@k-control:~$ kubectl create -f ldh-pv-nfs.yml
vagrant@k-control:~$ kubectl get persistentvolumes
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS
ldh-pv-nfs 5Gi RWX Retain Available
볼륨의 접근 모드 : RWX(ReadWriteMany)
정책 : 유지 정책 (Retain)
상태 : 사용 가능 (Available)
PV 리소스의 4가지 상태
- Available: 다른 PVC에 연결되지 않은 상태로 사용가능한 상태
- Bound : 특정 PVC에 연결
- Released: 연결되었던 PVC가 해제되었으며, 리소스를 회수하지 않은 상태
- Failed : 회수 실패
# PVC 생성 및 확인
#PVC 리소스 정의 파일
# ldh-pvc-nfs.yml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: ldh-pvc-nfs
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
volumeName: ldh-pv-nfs
storageClassName: ''
PVC 리소스의 주요 필드
- .spec.accessModes : PV의 필드와 동일
- .spec.requests.storage : PV에 요청하는 크기
- .spec.volumeName : PV 리소스 이름을 지정
- .spec.storageClassName : 스토리지 클래스 이름 (지금은 지정하지 않음)
# PVC 리소스 생성
# PVC 리소스 상태 확인
볼륨의 접근 모드 : RWX(ReadWriteMany)
상태 : 연결 (Bound)
- 상태가 보류(Pending)상태면 연결 중 또는 적절한 PV리소스를 못찾은 것 (이러면 kubectl describe로 리소스 이벤트 원인을 찾아 해결)
# PV 리소스 상태 재확인
볼륨의 접근 모드 : RWX(ReadWriteMany)
정책 : 유지 정책 (Retain)
상태 : 연결 (Bound)
요청 : ldh-pvc-nfs PVC 리소스가 연결