[K8S] PV와 PVC (Feat. Minikube, MAC M1)

mDev_97·2023년 10월 13일
0

Kubernetes

목록 보기
2/10
post-thumbnail

◉ 실습 과제

이번 실습 주제는 로컬 스토리지를 활용한 쿠버네티스 PV와 PVC 생성 및 사용입니다.

📌 실습 환경

  • Mac OS m1 pro
  • kubernetes With Minikube

실습 환경 구축

이번 실습을 진행하기 위해서 먼저 실습을 진행할 수 있는 MiniKuibe 환경을 구축해보겠습니다.

우선 MiniKuibe 설치 페이지에 접속하여 본인과 맞는 환경을 선택하여 나타나는 명령어를 입력해줍니다.

그 이후에 Terminal에서 아래의 명령어를 입력해서 minikube를 시작해줍니다.

그렇다면 이제 Docker Desktop에서 minikube가 잘 작동하는 것을 확인하실 수 있습니다.

실습 환경이 구축되었으면 이제 쿠버네티스의 PV와 PVC에 대한 실습을 진행해보겠습니다.


Persistent Volume(PV) 생성

먼저, 로컬 디스크를 사용하여 Persistent Volume을 생성합니다.

  • 스토리지 크기는 10Gi
  • 경로는 /tmp/local-storage

PV를 생성하기 위한 메니페스트를 Kubernetes 공식문서 를 참고하여 작성 해주겠습니다.

# pv-volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pv-volume
  labels:
    type: local
spec:
  storageClassName: ""
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /tmp/local-storage

그리고 나서 아래의 명령어를 통해서 퍼시스턴트 볼륨을 생성합니다.

kubectl apply -f pv-volume.yaml

퍼시스턴트 볼륨에 대해서 조회해보면 퍼시스턴트 볼륨의 STATUSAvailable 임을 보여줍니다.
이는 아직 퍼시스턴트 볼륨이 바인딩되지 않았다는 것을 의미합니다.


Persistent Volume Claim(PVC) 생성

다음으로는 위에서 생성한 PV에 해당하는 PVC를 생성하는 단계입니다.
파드는 PVC를 사용하여 물리적인 스토리지를 요청합니다.

# pv-claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pv-claim
spec:
  storageClassName: ""
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 3Gi

위의 메니페스트를 작성해주고 아래의 명령어를 통해서 PVC를 생성해줍니다.

kubectl apply -f pv-claim.yaml

그리고 나서 PV를 다시 확인해보면 이제는 STATUSBOUND 임을 확인할 수 있습니다.
CLAIM을 보면 방금 생성해준 default/local-pv-claim 으로 잘 바인딩되어 있습니다.


Deployment 생성

이제는 볼륨으로 PVC를 사용하는 파드를 위한 Deployment를 생성하는 단계입니다.

Deployment로 nginx를 배포하고 /usr/share/nginx/html 디렉토리에 연동을 시켜줍니다.

디플로이먼트를 위한 메니페스트를 Kubernetes 공식 문서를 참고하여 아래와 같이 작성합니다.

# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80
        volumeMounts:
        - name: local-persistent-storage
          mountPath: /usr/share/nginx/html
      volumes:
      - name: local-persistent-storage
        persistentVolumeClaim:
          claimName: local-pv-claim

메니페스트를 작성하고 나서 아래의 명령어를 통해서 디플로이먼트를 생성하고
파드의 컨테이너가 실행 중인지를 확인해봅니다.

kubectl apply -f nginx.deployment.yaml
kubectl get pod


결과 확인

그럼 이제 로컬 스토리지에서 index.html을 수정하고, 수정된 사항을 확인해보겠습니다.

먼저 실습을 minikube 환경에서 진행하기 때문에 아래의 명령어를 통해서
단일 노드에 연결되는 셸을 열어줍니다.

아래의 명렁어를 입력하면 노드로 연결되는 셸을 열 수 있습니다.

minikube ssh

그리고 나서 아래의 명령어를 통해서
볼륨의 경로로 지정해준 /tmp/local-storage 디렉토리를 만들어주겠습니다.

sudo mkdir /tmp/local-storage

이제 /tmp/local-storage 디렉토리에 index.html을 생성하고 작성해주겠습니다.

sudo sh -c "echo 'Kubernetes Local Storage PV and PVC Project' > /tmp/local-storage/index.html"

위의 명령어의 결과는 다음과 같습니다.
이제 사용자 노드에서 셸을 종료하시면 됩니다.

cat /tmp/local-storage/index.html

다시 터미널로 돌아와서 실행 중인 파드의 이름을 확인하고 아래의 명령어를 통해
실행 중인 세 개의 파드 중 하나에서 구동되고 있는 컨테이너의 셸로 접근합니다.

그럼 이제 이번 실습의 목표의 결과를 확인 해보겠습니다.
컨테이너의 셸로 접근하여서 파드의 볼륨 경로로 지정했던
/usr/share/nginx/html 디렉토리index.html이 저장되어 있는지를 확인하고

cd /usr/share/nginx/html
ls

index.html의 내용이 우리가 입력한 내용과 같은지를 확인해보겠습니다.

cat /usr/share/nginx/html/index.html

profile
안녕하세요. 백엔드, 클라우드, 인프라에 관심과 열정이 있는 김문성입니다. 😊

0개의 댓글