참고
NFS 볼륨에 PV/PVC 만들기
NOTE
NFS는 네트워크를 통해 파일을 공유할 수 있도록 하는 분산 파일 시스템이다!
k8s에서 PV(NFS)를 활용한 구조도
PV/PVC 흐름도
NFS - 설치
NOTE
sudo apt-get update
sudo apt-get install nfs-kernel-server
mkdir /nfs_share
chmod 777 /nfs_shared/*
# /nfs_shared 디렉토리를 해당 CIDR 범위내의 시스템과 공유한다.
# rw(읽기 권한), sync(변경사항 즉시 기록), no_root_squash(원격 root 접근해도 권한유지)
echo '/nfs_shared 192.168.32.0/24(rw,sync,no_root_squash)' >> /etc/exports
systemctl restart nfs-kernel-server
systemctl enable nfs-kernel-server
showmount -e
Bash
복사
NFS 서버 패키지 설치
lsblk
sudo mkfs.ext4 /dev/sdb
sudo mount /dev/sdb /mnt/nfs_shared
echo "/mnt/nfs_share 192.168.32.0/2(rw,sync,no_root_squash,no_subtree_check)" | sudo tee -a /etc/exports
sudo exportfs -arv
sudo systemctl restart nfs-kernel-server
Bash
복사
만약 다른 디스크를 사용한다면 마운트 작업추가
sudo apt install nfs-common -y
Bash
복사
NFS 클라이언트 서버 패키지 설치
NFS - PV/PVC
NOTE
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 40Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
server: 192.168.32.10
path: /nfs_shared
YAML
복사
nfs-pv
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Mi
YAML
복사
nfs-pvc
apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-pvc-deploy
spec:
replicas: 4
selector:
matchLabels:
app: nfs-pvc-deploy
template:
metadata:
labels:
app: nfs-pvc-deploy
spec:
containers:
- name: audit-trail
image: sysnet4admin/audit-trail
volumeMounts:
- name: nfs-vol
mountPath: /audit
volumes:
- name: nfs-vol
persistentVolumeClaim:
claimName: nfs-pvc
YAML
복사
nfs-deploy
k apply -f nfs-pv.yaml
k apply -f nfs-pvc.yaml
k apply -f nfs-pvc-deploy.yaml
k exec -it nfs-pvc-deploy-7b6f4fcc94-bvv4j -- /bin/bash
k expose deployment nfs-pvc-deploy --type=LoadBalancer --name=nfs-pvc-deploy-svc --port=80
curl http://192.168.32.10
Bash
복사
실행코드
NFS Client Provisioner 설정 (NFS SC)
NOTE
NFS Client Provisioner는 쿠버네티스 환경에서 자동으로 NFS기반의 PV를 프로비저닝하는 도구이다!
helm repo add nfs-subdir-external-provisioner \
https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/
helm pull nfs-subdir-external-provisioner/nfs-subdir-external-provisioner --untar
Bash
복사
helm repo & pull
nfs:
server: 192.168.32.20 # 수정
path: /mnt/nfs_shared # 수정
# For creating the StorageClass automatically:
storageClass:
# Set StorageClass as the default StorageClass
# Ignored if storageClass.create is false
defaultClass: true # 수정
Bash
복사
values.yaml 수정
kubectl patch storageclass nfs-storageclass -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
YAML
복사
기본 SC설정