전공공부
[K8S] 서로 다른 네임스페이스 Pod간 볼륨을 공유하는 방법 본문
해결법 : NFS 서버를 두고 PV - PVC 각각 Pod끼리 파서 연결을 하게 되었다.
서로 같은 네임스페이스에 POD가 공유된다면 볼륨 공유를 하나의 PV - PVC 연결 한 후 Pod or Deployment에 등록하여 사용하면 되지만 실제 업무에서는 이렇지 않은 경우가 종종 발생한다.
그래서, NFS Mount를 하여서 해결하게 되었는데
예제 코드는 아래와 같다.
storageClass 정의
아래 내용은 PV를 동적으로 프로비저닝하기 위한 PV이다.
(자원 요청이 PV로 부터 들어오면 storageClass가 직접 자원을 가져와서 배치 하는 개념을 생각하자. 클라우드 환경에서는 항상 자원을 가지고 있을 필요가 없으므로 필요 할 때마다 가져와서 쓰기 때문에 이런 프로비저닝 지원이 자유롭다.)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: example-nfs
provisioner: example.com/external-nfs
parameters:
server: nfs-server.example.com
path: /share
readOnly: "false"
PV 정의
그 후, 이런식으로 NFS 서버와 매칭해주는 PV를 구성한다. (+ 참고로 PV는 클러스터 범위의 개체라 네임스페이스 제약에서 자유로울줄 알았으나 PVC와 1대 1 매칭이 되기 때문에 사실상 PVC의 네임스페이스 범위에서만 놀 수 있다.)
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
labels:
name: nfs-pv
spec:
capacity:
storage: 1G
accessModes:
- ReadWriteMany
nfs:
server: 192.168.0.1
path: /usr/local
PVC 정의
이렇게 설정시 PVC는 PV로 바로 붙지 않는다 storageClass가 동적으로 맞는 PV에 맞춰 준다. 일반적으로는 이렇게 쓰는데 volumeName 지정해서 그냥 PV로 붙이는 경우도 있긴하다. 하지만, 유연한 대응을 위해서는 storageClass가 알아서 맞춰진 PV로 할당하게끔 하는게 좋다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: example-nfs # StorageClass의 이름
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1G # 요청하는 스토리지 크기
볼륨 공유 방법
위와 같이 셋팅된 Pod에 추가로 연결이 필요한 Namespace의 Pod에는 연결 할 PV - PVC 추가로 만드는데 같은 storageClass를 바라 보고 path 등을 같은 곳으로 셋팅해주면된다.
그러면 A pod의 볼륨에 있는 값들이 B pod의 볼륨에도 공유가 된다.
'Study > K8S' 카테고리의 다른 글
[K8S - CKA] Configure Secrets in Applications (1) | 2023.11.12 |
---|---|
[K8S - CKA] Application Commands (0) | 2023.11.05 |
[K8S - CKA] Rolling Updates ands Rollbacks (0) | 2023.10.28 |
[K8S - CKA] Monitor Cluster Components (0) | 2023.10.28 |
[K8S - CKA] Static Pods (1) | 2023.10.16 |