23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
Kubernetes 환경에서 여러 파드가 동시에 접근할 수 있는 공유 스토리지가 필요한 경우가 있다.
이 글에서는 가장 간단하게 구성할 수 있는 NFS를 활용한 ReadWriteMany 스토리지 구성 방법을 알아본다.
Kubernetes에서는 스토리지 접근 방식을 다음과 같이 구분한다:
ReadWriteOnce (RWO): 단일 노드에서만 읽기/쓰기 가능
ReadOnlyMany (ROX): 여러 노드에서 읽기만 가능
ReadWriteMany (RWX): 여러 노드에서 읽기/쓰기 모두 가능
(저장소별 지원 모드 https://kubernetes.io/docs/concepts/storage/persistent-volumes/)
Ganesha NFS 프로비저너 사용
Kubernetes SIG에서 개발한 Ganesha NFS를 사용하는 것이 가장 추천되는 방법이다. Helm을 통해 쉽게 설치할 수 있으며, 동적 프로비저닝을 지원한다.
persistence:
enabled: true
storageClass: taco-storage
accessMode: ReadWriteOnce
size: 500Gi설치 명령어:
helm install nfs-provisioner nfs-ganesha-server-and-external-provisioner/nfs-server-provisioner -f ganesha.vo.yaml직접 NFS 서버 파드 구성
StatefulSet을 사용해 NFS 서버를 직접 구성할 수 있다:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nfs-server
spec:
serviceName: "nfs-service"
replicas: 1
template:
spec:
containers:
- name: nfs-server
image: itsthenetwork/nfs-server-alpine:latestNFS 서버가 준비되면 다음과 같이 PV와 PVC를 구성한다:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 500Gi
accessModes:
- ReadWriteMany
nfs:
path: /shared
server: nfs-serviceGanesha NFS를 사용하는 경우 PVC만 생성하면 된다:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: shared-storage
spec:
storageClassName: "nfs"
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Gi아래는 앞에서 만든 pvc를 사용하는 3개의 pod를 생성하여 동시에 파일시스템을 활용하는 예시이다.
apiVersion: v1
kind: Pod
metadata:
name: nfs
spec:
containers:
- name: app
image: busybox
volumeMounts:
- name: shared-storage
mountPath: /mnt/shared
volumes:
- name: shared-storage
persistentVolumeClaim:
claimName: shared-storage
---
apiVersion: v1
kind: Pod
metadata:
name: nfs2
... <spec은 동일> ...
---
apiVersion: v1
kind: Pod
metadata:
name: nfs3
... <spec은 동일> ...$ kubectl apply -f nfs_pod.yaml -n nfs
pod/nfs created
pod/nfs2 created
pod/nfs3 created
$ kubectl exec -it -n nfs nfs sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # cd /mnt/nfs/
/mnt/nfs # mkdir hi
/mnt/nfs # ls
hi
/mnt/nfs # mkdir hi1
/mnt/nfs # ls
hi hi1
/mnt/nfs # exit
$ kubectl exec -it -n nfs nfs2 sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # cd /mnt/nfs/
/mnt/nfs # ls
hi hi1
/mnt/nfs # mkdir hi2
/mnt/nfs # exit
$ kubectl exec -it -n nfs nfs3 sh
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
/ # ls /mnt/nfs/
hi hi1 hi2NFS 클라이언트 패키지 설치가 필요
네트워크 성능이 스토리지 성능에 영향을 미침
보안 설정 고려 필요
이렇게 구성된 NFS 스토리지는 여러 파드가 동시에 접근해야 하는 로그 수집, 공유 파일 시스템, 미디어 처리 등의 용도로 활용할 수 있다.
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.