데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      Kubernetes에서 NFS를 활용한 ReadWriteMany 스토리지 구성하기

      sungil 25.02.07
      2,945 7 2
      DEVOTEE 요약
      Kubernetes 환경에서 여러 파드가 동시에 접근 가능한 공유 스토리지가 필요할 때, 가장 간단하게 NFS를 활용한 ReadWriteMany(RWX) 스토리지를 구성할 수 있다. Ganesha NFS 프로비저너를 사용하여 Helm으로 설치하고, 동적 프로비저닝을 지원하여 쉽게 스토리지를 설정할 수 있다. 이 방법은 여러 파드가 동시에 로그 수집, 공유 파일 시스템, 미디어 처리 등의 작업을 수행할 때 용이하며, 네트워크 성능과 보안 설정도 고려해야 한다.
      DEVOTEE 추천 블로그

      Kubernetes 환경에서 여러 파드가 동시에 접근할 수 있는 공유 스토리지가 필요한 경우가 있다.

      이 글에서는 가장 간단하게 구성할 수 있는 NFS를 활용한 ReadWriteMany 스토리지 구성 방법을 알아본다.


      Kubernetes 스토리지의 접근 모드

      Kubernetes에서는 스토리지 접근 방식을 다음과 같이 구분한다:

      • ReadWriteOnce (RWO): 단일 노드에서만 읽기/쓰기 가능

      • ReadOnlyMany (ROX): 여러 노드에서 읽기만 가능

      • ReadWriteMany (RWX): 여러 노드에서 읽기/쓰기 모두 가능

      Screenshot 2025-02-03 at 11.22.38 AM.png

      (저장소별 지원 모드 https://kubernetes.io/docs/concepts/storage/persistent-volumes/)


      NFS 서버 구성 방법

      1. 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
      1. 직접 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:latest


      PV와 PVC 구성

      정적 프로비저닝

      NFS 서버가 준비되면 다음과 같이 PV와 PVC를 구성한다:

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: nfs-pv
      spec:
        capacity:
          storage: 500Gi
        accessModes:
          - ReadWriteMany
        nfs:
          path: /shared
          server: nfs-service

      동적 프로비저닝

      Ganesha 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  hi2


      주의사항

      • NFS 클라이언트 패키지 설치가 필요

      • 네트워크 성능이 스토리지 성능에 영향을 미침

      • 보안 설정 고려 필요

      이렇게 구성된 NFS 스토리지는 여러 파드가 동시에 접근해야 하는 로그 수집, 공유 파일 시스템, 미디어 처리 등의 용도로 활용할 수 있다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      sungil 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기