처음부터 차근차근

[Kubernetes] NFS provisioner를 이용해 PV 생성 본문

Devops/Kubernetes

[Kubernetes] NFS provisioner를 이용해 PV 생성

HangJu_95 2024. 8. 26. 21:49
728x90

NFS subdir external provisioner란 무엇인가?

NFS subdir external provisioner는 PVC(Persistent Volumes Claim)을 통해 NFS 서버를 쿠버네티스 PV(Persistent Volum)로 동적 프로비저닝(dynamic provisioning) 하기 위한 automatic provisioner 입니다.

 

PV(Persistent Volum)는 ${namespace}-${pvcName}-${pvName}으로 프로비저닝 됩니다.

https://awx.notion.site/Dynamic-PV-with-NFS-subdir-extrnal-provisioner-28b42a1543a24f9b80b9edeafb3d1c32#e8b8f12703b14ee6bddde9164fc90744

 

공식 문서에도 보면, Kubernetes에는 내장 nfs provisioner가 존재하지 않는다.
따라서 외부 provisioner를 사용하라고 나와있다.

 

Storage Classes

This document describes the concept of a StorageClass in Kubernetes. Familiarity with volumes and persistent volumes is suggested. A StorageClass provides a way for administrators to describe the classes of storage they offer. Different classes might map t

kubernetes.io

 

준비물

  • NFS Server
  • NFS Client - 모든 쿠버네티스 노드 및 마스터까지
  • Allow TCP/UDP Port

1. NFS Server에 nfs-tools 설치 및 daemon 설치

NFS Server는 CentOS 7.9로 진행하였다.

sudo yum install -y nfs-utils
sudo systemctl enable --now rpcbind
sudo systemctl enable --now nfs-server

sudo systemctl restart rpcbind
sudo systemctl restart nfs-server
# 공유할 디렉토리 설정
sudo mkdir -p /your/path
sudo chmod -R 777 /your/path

sudo vi /etc/exports
#{mount-path} {client-ip}({options})
/your/path XXX.XXX.0.XXX(rw,subtree_check,no_root_squash)

# 설정 적용
sudo exportfs -ra
# 설정 확인
sudo exportfs -v

2. master에 nfs-tools 설치 및 mount 진행

sudo yum install -y nfs-utils

sudo systemctl enable --now rpcbind
sudo systemctl restart rpcbind

showmount -e Server_IP

# mount 임시 적용
mount -t nfs server_IP:/path/to/share /path/to/local_mount_point

# mount 영구 적용 시
echo 'server_IP:/path/to/share /path/to/local_mount_point nfs defaults 0 0' >> /etc/fstab

2-1. PV 및 PVC 생성 진행

다양한 블로그 참조 시, PV를 동적으로 만들 수 있지만 현재 사내에서는 정적으로 PV 및 PVC를 만들어놓은 상태이다.
따라서 만들어진 PV와 PVC를 통해 진행한다.

PV

apiVersion: v1
kind: PersistentVolume
metadata:
  labels:
    volume: nfs
  name: nfs-pv
spec:
  capacity:
    storage: 1000Gi # nfs-server의 용량을 확인할 것
  accessModes:
    - ReadWriteMany 
  storageClassName: nfs-storage
  persistentVolumeReclaimPolicy: Retain
  nfs:
    path: /exported/path
    server: XXX.XXX.XXX.XXX # nfs-server의 주소는 확인 필요
    readOnly: false

PVC

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  labels:
    volume: nfs
  name: nfs-pvc
spec:
  selector:
    matchLabels:
      volume: nfs
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1000Gi # nfs-server 용량 확인할 것
  storageClassName: nfs-storage

3. 모든 worker Node에 nfs-tools 설치 진행

sudo yum install -y nfs-utils

sudo systemctl enable --now rpcbind
sudo systemctl restart rpcbind

4. helm을 통해 master에서 nfs-provisioner 설치 및 구축

helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm install nfs-subdir-external-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \
    --set nfs.server=x.x.x.x \
    --set nfs.path=/exported/path

kubectl get pv, pvc를 하면 완성되어 있는 것을 확인할 수 있으며, Pod을 띄워도 자동으로 잘 진행되는 것을 확인할 수 있다.

 

참조

 

Dynamic PV with NFS subdir extrnal provisioner | Notion

2022.03. 이장재 📧 cine0831@gmail.com 📂 https://github.com/jangjaelee 📒 http://www.awx.kr

awx.notion.site

 

 

K8S 기본 볼륨을 nfs로 사용해볼까

우선 NFS Client Provisioner 설치를 해야 합니다. 우리는 helm으로 설치 할 것입니다. 가장 심플하게 할 수 있는 방법 입니다. helm repo add nfs-subdir-external-provisioner \ https://kubernetes-sigs.github.io/nfs-subdir-extern

babo-it.tistory.com

 

 

NFS subdir external provisioner

1. 개요 - 쿠버네티스에는 내장 NFS 프로비저너가 없다. NFS를 위한 스토리지클래스를 생성하려면 외부 프로비저너를 사용해야 한다. ✓ NFS Ganesha server and external provisioner ✓ NFS subdir external provisione

1week.tistory.com

 

 

[Kubernetes] Helm Chart로 NFS Provisioner 구성하기

ENV 우선 구성할 NFS 서버 정보를 확인합니다. (NFS ver 3 기준으로 작성했습니다 ver4 는 추가 Option을 진행할 필요가 없습니다.) NFS 서버 정보 x.x.x.x:/test vers:3 refer to https://github.com/kubernetes-sigs/nfs-subdir

wyj.kr

'Devops > Kubernetes' 카테고리의 다른 글

[Kubernetes] PV, PVC의 개념  (0) 2024.08.22