1.6.2 File Storage 사용하기(CSI Driver 기반) - 있는 File System 쓰기
컨테이너의 내부 스토리지는 기본적으로 컨테이너가 삭제, 종료되면 사라집니다. 데이터가 사라지는 것을 막고 보존이 필요한 데이터를 저장하기 위해 별도의 Persistent Volume을 사용합니다.
Persistent Volume으로 파일 공유를 위해 저장소로 많이 사용하는 NFS(Network File System)을 사용할 수 있습니다. 네트워크 파일 시스템인 NFS의 경우 동시 쓰기를 지원하기에 Kubernetes에서 멀티 POD에서 동시에 읽고 쓰는 용도로 사용할 수 있습니다. OCI에서는 OCI File Storage Service(FSS)가 OCI에서 제공하는 NFS 서비스입니다. 이제 OKE에서 OCI File Storage을 Persistent Volume으로 사용하는 RWX 접근 모드로 사용하는 방법을 확인해 보겠습니다.
업데이트
File System 만들기
관련 문서를 참고하여 File System을 만듭니다.
OCI 콘솔에서 내비게이션 메뉴를 엽니다. Storage > File Storage > File Systems 항목으로 이동합니다.
Create File System 클릭
생성정보 입력
기본값을 그대로 사용해도 되지만 편의상 이름을 변경합니다.
File System Information
- Name: 우측 Edit Details를 클릭하여 원하는 이름으로 변경, oke-fss-system 입력
Export Information : 기본값 사용
Mount Target Information
- Create New Mount Target 선택
- New Mount Target Name: 우측 Edit Details를 클릭하여 원하는 이름으로 변경, oke-fss-mount-target 입력
- Virtual Cloud Network: OKE 클러스터가 사용하는 VCN 선택
- Subnet: Subnet 선택, 예, oke-svclbsubnet-~~~
생성 후 File System 화면에서 Mount Target을 클릭하여 생성된 Mount Target 상세 정보로 이동하여 다음 정보를 확인합니다.
- Mount Target OCID: …wtcaaa
IP Address: 예) 10.0.20.12
- Export Path: 예) /oke-fss-system
Security List 설정
Mount Target의 속한 서브넷에 Security List에 File Storage 서비스를 위한 규칙을 추가합니다.
- OKE Worker Nodes Subnet -> 생성한 Mount Target으로 접근 허용
File Storage 서비스를 이용하여 Persistent Volume 사용하기
Persistent Volume (PV) 만들기
- spec.csi.driver: fss.csi.oraclecloud.com를 사용
- spec.csi.volumeHandle: <FileSystemOCID>:<MountTargetIP>:<path> 형식으로 아래와 같이 설정
- spec.accessModes: FFS CSI Driver는 RWX - ReadWriteMany를 지원하므로 테스트를 위해 ReadWriteMany 접근 모드로 지정
# oke-fss-pv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: oke-fss-pv spec: capacity: storage: 50Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain csi: driver: fss.csi.oraclecloud.com volumeHandle: ocid1.filesystem.oc1.ap_chuncheon_1.aaaaa_____wtcaaa:10.0.20.12:/oke-fss-system
Persistent Volume Claim(PVC) 만들기
- storageClassName: ““로 설정
- volumeName: 앞서 만든 PV의 이름 지정
# oke-fss-pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: oke-fss-pvc spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 50Gi volumeName: oke-fss-pv
PVC를 사용하는 POD 배포하기
생성한 PVC를 볼륨으로 등록하여 마운트합니다.
ReadWriteMany 접근모드를 사용하므로 앞선 Block Volume을 PV 사용하는 예제와 달리 replica를 복수개로 지정할 수 있습니다.
# nginx-deployment-fss-pvc.yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: nginx-fss-pvc name: nginx-fss-pvc spec: replicas: 3 selector: matchLabels: app: nginx-fss-pvc template: metadata: labels: app: nginx-fss-pvc spec: containers: - name: nginx image: nginx:latest volumeMounts: - name: data mountPath: /usr/share/nginx/html volumes: - name: data persistentVolumeClaim: claimName: oke-fss-pvc
실행 및 결과 예시
3개 POD가 각각 서로 다른 3개의 Worker Node에 위치하지만 정상 기동된 것을 볼 수 있습니다.
kildong@cloudshell:~ (ap-chuncheon-1)$ kubectl apply -f oke-fss-pv.yaml persistentvolume/oke-fss-pv created kildong@cloudshell:~ (ap-chuncheon-1)$ kubectl apply -f oke-fss-pvc.yaml persistentvolumeclaim/oke-fss-pvc created kildong@cloudshell:~ (ap-chuncheon-1)$ kubectl get pv,pvc NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE persistentvolume/oke-fss-pv 50Gi RWX Retain Bound default/oke-fss-pvc 24s NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/oke-fss-pvc Bound oke-fss-pv 50Gi RWX 18s kildong@cloudshell:~ (ap-chuncheon-1)$ kubectl apply -f nginx-deployment-fss-pvc.yaml deployment.apps/nginx-fss-pvc created kildong@cloudshell:~ (ap-chuncheon-1)$ kubectl get pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-fss-pvc-cc4d6b798-s9jrl 1/1 Running 0 27s 10.244.1.4 10.0.10.39 <none> <none> nginx-fss-pvc-cc4d6b798-snr2t 1/1 Running 0 27s 10.244.0.134 10.0.10.143 <none> <none> nginx-fss-pvc-cc4d6b798-wcvpl 1/1 Running 0 27s 10.244.0.6 10.0.10.107 <none> <none>
파일 쓰기 테스트
아래와 같이 첫번째 POD에서 PV로 파일쓰기를 했지만, 모든 POD에서 동일내용을 확인할 수 있습니다.
kildong@cloudshell:~ (ap-chuncheon-1)$ kubectl exec -it nginx-fss-pvc-cc4d6b798-s9jrl -- bash -c 'echo "Hello FSS from 10.0.10.39" >> /usr/share/nginx/html/hello_world.txt' kildong@cloudshell:~ (ap-chuncheon-1)$ kubectl exec -it nginx-fss-pvc-cc4d6b798-s9jrl -- cat /usr/share/nginx/html/hello_world.txt Hello FSS from 10.0.10.39 kildong@cloudshell:~ (ap-chuncheon-1)$ kubectl exec -it nginx-fss-pvc-cc4d6b798-snr2t -- cat /usr/share/nginx/html/hello_world.txt Hello FSS from 10.0.10.39 kildong@cloudshell:~ (ap-chuncheon-1)$ kubectl exec -it nginx-fss-pvc-cc4d6b798-wcvpl -- cat /usr/share/nginx/html/hello_world.txt Hello FSS from 10.0.10.39
참고 문서
- OCI Documentation > Container Engine > Setting Up Storage for Kubernetes Clusters
이 글은 개인으로서, 개인의 시간을 할애하여 작성된 글입니다. 글의 내용에 오류가 있을 수 있으며, 글 속의 의견은 개인적인 의견입니다.