본문 바로가기
카테고리 없음

Kubernetes PV, PVC의 개념 및 볼륨 마운트

by EverReal 2024. 12. 21.

Kubernetes PV, PVC의 개념 및 볼륨 마운트

 

※ 본 내용은 「컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 - 길벗」를 참고하여 작성하였습니다.

 

NFS 볼륨에 PV/PVC를 만들고 파드에 연결하기

 

도커에서 파일을 저장하는 방식으로 바인드 마운트, 볼륨마운트가 있습니다.

마찬가지로 쿠버네티스에서도 파드에서 생성한 내용을 기록, 보관하거나 

모든 파드가 동일한 설정을 세팅하기 위해 공유된 볼륨으로부터 공통된 설정을 갖고 올 수 있도록 할 때가 있습니다.

이 때 사용할 수 있는 볼륨 스토리지가 다양하게 있는데, 그 중 주로 이야기 되는 것이 PV, PVC입니다. 

 

PV(Persistent Volume, 지속 사용가능한 볼륨) : 볼륨을 사용할 수 있게 준비

PVC(Persistent Volume Claim, 지속 사용가능한 볼륨 요청) : 볼륨에서 일정 공간 할당

 

 

# 공유 디렉터리 생성
mkdir /nfs_shared

# 디렉터리에 NFS로 받아들일 IP 영역 지정
# 옵션 적용하여 /etc/export에 기록(rw-읽기쓰기, sync-쓰기작업동기회, no_root_squash-root계정 사용)
echo '/nfs_shared 192.168.1.0/24(rw,sync,no_root_squash)' >> /etc/exports

 

NFS 서버 활성화 및 다음에 시작할 때 자동 적용

systemctl enable --now nfs

 

아래 오브젝트 스펙을 실행하여 PV 생성

kubectl apply -f ./nfs-pv.yaml
# nfs-pv.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 100Mi		# 쓸 수 있는 양을 명시(용량 제한이 아님)
  accessModes:
    - ReadWriteMany		# PV 사용방식(ReadWriteMany : 여러 노드가 읽고 쓸 수 있게 마운트)
  persistentVolumeReclaimPolicy: Retain		# PV가 제거됐을 때 작동방식 (Retain:유지)
  nfs:				# NFS 서버 연결위치
    server: 192.168.1.10
    path: /nfs_shared

 

PV 상태 확인

kubectl get pv

 

아래 오브젝트 스펙을 실행하여 PVC 생성

kubectl apply -f ~/_Book_k8sInfra/ch3/3.4.3/nfs-pvc.yaml
# nfs-pvc.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 10Mi

 

PVC 상태 확인

kubectl get pvc

PV 상태 확인

kubectl get pv

 

 

PV와 PVC의 관계

 

 

생성한 PVC를 볼륨으로 하는 디플로이먼트 오브젝트 스팩을 배포합니다.

kubectl apply -f ./nfs-pvc-deploy.yaml
# nfs-pvc-deploy.yaml

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:			# audit-train 이미지를 가져옴
      - name: audit-trail
        image: sysnet4admin/audit-trail
        volumeMounts:		# Volume Mount 위치 지정
        - name: nfs-vol		# PVC로 생성된 볼륨을 마운트 하기 위해서 nfs-pvc라는 이름 사용
          mountPath: /audit
      volumes:
      - name: nfs-vol
        persistentVolumeClaim:
          claimName: nfs-pvc

 

생성된 파드를 확인합니다. 아래와 같이 4개의 파드가 Running 중인 것을 볼 수 있습니다.

 

파드 중 하나에 접속합니다.

kubectl exec -it nfs-pvc-deploy-5fd9876c46-mvtxw -- /bin/bash

 

df -h를 실행하면 PVC의 마운트 상태를 볼 수 있습니다. 용량이 100Mi가 아닌 NFS 서버의 용량은 37G임을 볼 수 있습니다.

df -h

 

이제 마스터노드의 커맨드창을 하나 더 열어서 audit-trail 컨테이너 기능을 테스트합니다.

외부에서 파드(nfs-pv-deploy)에 접속할 수 있도록 expose로 로드밸런서 서비스를 생성합니다.

생성된 로드밸런서 서비스의 IP도 확인할 수 있습니다.

(*이 때 꼭 MetalLB 셋팅이 되어있어야 External-IP를 확인할 수 있습니다.)

kubectl expose deployment nfs-pvc-deploy --type=LoadBalancer --name=nfs-pvc-deploy-svc --port=80

 

 

호스트 컴퓨터에서 브라우저를 통해 접속하여 파드이름과 IP를 확인할 수 있습니다.

 

exec를 통해 접속한 파드에서 아래 명령어를 통해 접속기록 파일이 남았는지 확인이 가능합니다.

 

이제 마스터노드에서 scale 명령으로 파드를 4개에서 8개로 증가시킵니다.

kubectl scale deployment nfs-pvc-deploy --replicas=8

 

 

가장 최근 증가된 4개의 파드 중 1개를 선택해 exec로 접속하고 기록된 audit 로그가 동일한지 확인합니다.

또, 새로 추가된 audit 로그를 확인해서 기록된 내용을 확인할 수 있습니다.

 



NFS 볼륨을 파드에 직접 마운트하기

사용자가 관리자와 동일한 단일시스템이라면 PV와 PVC를 사용할 필요가 없이,

바로 파드에 공유가 가능한 NFS 볼륨을 마운트 할 수 있습니다.

 

먼저 아래 오브젝트 스펙을 적용합니다.

kubectl apply -f ./nfs-ip.yaml
# nfs-ip.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nfs-ip
spec:
  replicas: 4
  selector:
    matchLabels:
      app: nfs-ip
  template:
    metadata:
      labels:
        app: nfs-ip
    spec:
      containers:
      - name: audit-trail
        image: sysnet4admin/audit-trail
        volumeMounts:
        - name: nfs-vol			# PV와 PVC를 거치지 않고 바로 NFS 서버로 접속
          mountPath: /audit
      volumes:
      - name: nfs-vol
        nfs:
          server: 192.168.1.10
          path: /nfs_shared

 

새로 배포된 파드를 확인하고 그 중 하나에 접속합니다.

 

 

접속한 파드에서 ls /audit를 통해 동일한 NFS 볼륨을 보고 있음을 확인할 수 있습니다.

ls /audit

 

 

 

반응형

댓글