
Part1: 쿠버네티스 Storage 리소스 이해

1-1. 프로비저닝이란?
프로비저닝이란 사용자의 요구에 맞게 리소스를 준비하고 배치하는 것을 의미한다.
쿠버네티스 환경에서의 프로비저닝은 Pod가 사용할 실제 저장 공간(SSD, HDD 등)을 준비하는 과정을 말한다.
1-2. PV와 PVC: 공급과 수요
쿠버네티스는 저장소를 관리할 때 공급자와 사용자의 역할을 나눈다.
- PV (Persistent Volume - 지속성 볼륨):
- 공급자 측면: 관리자가 클러스터에 준비해 둔 실제 저장 공간
- 예) 10GB짜리 SSD가 존재하니 필요할 때 사용하세요
- PVC (Persistent Volume Claim - 지속성 볼륨 요청)
- 사용자(개발자) 측면: Pod가 저장 공간을 쓰기 위해 보내는 요청서
- 예) 5GB 정도의 용량이 필요하고, 읽기/쓰기 기능이 필요하다
1-3. 정적 프로비저닝과 동적 프로비저닝
- 정적 프로비저닝 (Static Provisioning)
- 관리자가 미리 저장소를 다 만들어 두는 방식
- 1) 관리자가 수동으로 외부에 실제 디스크를 생성
- 2) 쿠버네티스에 PV로 등록
- 3) 사용자가 PVC를 만들면 미리 만들어둔 PV와 연결
- 단점: 사용자가 얼마나 쓸지 모르기 때문에 미리 많이 만들어둬야 하므로 낭비 위험 존재.
- 동적 프로비저닝
- 사용자가 원할 때 자동으로 저장소를 만들어 주는 방식
- 1) 관리자가 StorageClass라는 설계도를 미리 생성
- 2) 사용자가 PVC를 만들 때 이 설계도면대로 만들어줘라고 요청
- 3) 쿠버네티스가 실제 디스크를 생성하고 PV까지 자동으로 만들어서 연결
- 장점: 관리자가 일일이 PV를 만들 필요 없음, 낭비 X, 현대 Cloud에 적합
기술적으로 pod에서 바로 NFS로 마운트가 가능하다
하지만 쿠버네티스 철학상 일부러 금지하게 만들었다.
왜냐하면 pod에 인프라정보가 들어가게 되고 스토리지 변경 시 pod를 바꿔야하기 때문이다
그래서 pv와 pvc라는 것을 도입하게 된 것이다

1) 외부 Volume이 아니라 Pod 내부에 존재하는 임시 휘발성 저장공간을 활용해,
Pod내부에 Container 2개가 서로 Volume을 나눠쓰는 실습
2) log-writer와 log-reader 컨테이너 2개가 생성
3) writer는 mount하여 log를 작성
4) reader 또한 마운트하여 log를 읽음



배포된 파드에 들어가서 보면 로그파일이 잘 생성된 모습을 볼 수 있다.


※ [참고] 문제 발생
cluster1에서 cluster3으로 가는 에러 발생
이거는 root경로의 .ssh에 있는 kwoun_hosts를 삭제해주면 가능하다
해당 파일에 등록된 clsuter3의 정보와 현재 cluster3의 정보가 다르기 때문인데,
이는 cluster3에 대해서 변화가 생겼기 때문이다.


Part2: 정적 프로비저닝
2-1. 정적 프로비저닝을 위해 StorageClass, PV, PVC 순으로 생성 및 배포
※ StorageClass= /PV=미리 준비된 저장 공간 / PVC=요청
- AccessModes
- ReadWriteOnce(RWO): 딱 하나의 노드에서만 읽기/쓰기 가능
- ReadOnlyMany(ROX): 여러 노드에서 읽기 전용을 공유 가능
- ReadWriteMany(RWX): 여러 노드에서 동시 읽기/쓰기 공유 가능 (NFS같은 공유 파일 시스템이 해당)


2-2. 실제 파드에서 미리 만들어둔 PVC 사용(이미 PV랑 bound 되어 있음)

2-4. NFS 클러스터 및 생성 Pod내부에서 최종 생성 확인


2-5. PV,PVC를 3개씩 배포하는 실습
PV3개를 만들고 이에 맞는 PVC3개를 생성 및 배포


2-6. 실제 Pod 3개를 배포해서 잘 연결되었는지 확인


Part3: 동적 프로비저닝
3-1. NFS Subdir External Provisioner 설치 + NFS 서버/StorageClass 설정
Kubernetes 클러스터에서 NFS 기반 동적 PersistentVolume 프로비저닝을 지원하기 위해 nfs-subdir-external-provisioner를 설치한다. 해당 Provisioner는 PVC 생성 요청 시 NFS 서버의 지정된 디렉터리 하위에 전용 하위 디렉터리를 자동으로 생성한다.
※ 프로비져닝 : storageclass를 보고서 자동으로 인프라를 구축해주는, 외부 스토리지를 생성해주는 역할

※ NFS 서버 설정값과 StorageClass 설정 값을 바탕으로 비로비저너를 실제 클러스터에 배포하기

※ 배포 후 helm list를 통해 배포된 프로비저너를 확인할 수 있다.

3-2. PVC 생성 및 해당 PVC를 사용하는 Pod를 생성.
1) StorageClass를 앞에서 만든 스토리지클래스로 명시해서 동적 생성이 가능하도록 설정.
2) 프로비저너가 앞에서 설정한 NFS 서버의 지정 경로에 해당 PVC를 위한 전용 폴더를 자동 생성
3) PV 자동 생성 및 바인딩: 생성된 전용 폴더에 요청에 맞는 PV를 쿠버네티스가 자동 등록
4) Pod 마운트: 파드가 실행되면서, 연결된 PV를 /mnt 경로에 마운트된다. 파드가 살아나자마자

3-3. PVC를 포함한 Pod 배포 및 PVC 조회를 통해 bound 여부 확인
※ PV를 안만들었지만 PVC에 대한 PV가 자동으로 Bound되어 있음

3-4. NFS 파일 시스템인 Cluster5에 잘 생성되었는지 확인하기.
