카테고리 없음

Application 기능으로 이해하기 - PV/PVC(local, hostP)

종종이94 2024. 3. 31. 21:47

1. PV, PVC - search

1-1. local, hostPath

[지상편] 쿠버네티스 첫 오브젝트 잘 끼우기 > Application 기능으로 이해하기3 > PVC, PV > local, hostPath

​PV와 PVC는 select와 label로 연결 되어 있음

local: PV에서 노드를 스토리지로 사용할 수 있게 해주는 옵션

 

테스트 환경에서 별도의 스토리지를 구축하기가 번거롭기 때문에 Kubernetes 노드 중에 한 곳을 임시 스토리지로 정해놓고 쓰는건고 이렇게  노드의 "/root/k8s-local-volume/1231" Path에 Container의 "/usr/src/myapp/files/dev" Path에 연결해서 사용 가능합니다.

 

 

 

- HostPath를 사용하는 방법도 있다.

 HostPath 볼륨 파드가 동작하는 쿠버네티스 클러스터의 노드(host)의 로컬 파일시스템의 파일 및 디렉토리를 파드가 사용할 수 있는 볼륨으로 제공해줍니다.

같은 노드에 배치된 파드 및 컨테이너에게 공유 디렉토리를 제공할 목적으로 사용될 수 있지만, 다른 노드에 배치된 파드 및 컨테이너에는 데이터를 공유할 수 없습니다. 즉, 각 노드마다 볼륨이 생성됩니다.

PV와 PVC를 이용하여 별도의 저장소를 쓰는 것이 좋다. 왜냐하면 저장소로 쓰고 있는 노드가 죽어버리면 파드들의 데이터들 까지 다 날라가버리는 대참사가 일어나기 때문이다.

 

 

 

 

PV의 local vs HostPath 차이점

PV의 local 볼륨은 디스크, 파티션 또는 디렉터리 같은 마운트된 로컬 스토리지 장치를 뜻합니다.

hostPath와 달리 수동으로 파드를 노드에 예약하지 않고도 휴대성을 갖춘 방식으로 사용된다. 시스템은 퍼시스턴트 볼륨의 노드 어피니티를 확인하여 볼륨의 노드 제약 조건을 인식한다.

 

 

 

더 자세한 설명은 이 블로그를 참고하면 될거 같다. 아...... 어렵네 ㅋㅋ

https://nearhome.tistory.com/101  

 

 

 

1-2. 동작 확인

[지상편] 쿠버네티스 첫 오브젝트 잘 끼우기 > Application 기능으로 이해하기3 > PVC, PV > 동작 확인

 

 

 

▶ 1~4. local 동작 확인

실습을 하면  http://192.168.56.30:31231/list-file-pod은 파드가 삭제된 뒤 파일이 삭제되었지만 

http://192.168.56.30:31231/list-file-pv는 계속해서 파일이 남아있다. 

// 1번 API - 파일 생성
http://192.168.56.30:31231/create-file-pod
http://192.168.56.30:31231/create-file-pv

// 2번 - Container 임시 폴더 확인
[root@k8s-master ~]# kubectl exec -n anotherclass-123 -it <pod-name> -- ls /usr/src/myapp/tmp
// 2번 - Container 영구저장 폴더 확인
[root@k8s-master ~]# kubectl exec -n anotherclass-123 -it <pod-name> -- ls /usr/src/myapp/files/dev
// 2번 - master node 폴더 확인
[root@k8s-master ~]# ls /root/k8s-local-volume/1231

// 3번 - Pod 삭제
[root@k8s-master ~]# kubectl delete -n anotherclass-123 pod <pod-name>

// 4번 API - 파일 조회
http://192.168.56.30:31231/list-file-pod
http://192.168.56.30:31231/list-file-pv

 

 

 

 
apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: anotherclass-123
  name: api-tester-1231
spec:
  template:
    spec:
      nodeSelector:
        kubernetes.io/hostname: k8s-master
      containers:
        - name: api-tester-1231
          volumeMounts:
            - name: files
              mountPath: /usr/src/myapp/files/dev
            - name: secret-datasource
              mountPath: /usr/src/myapp/datasource
      volumes:
        - name: files
          persistentVolumeClaim:  // 삭제
            claimName: api-tester-1231-files  // 삭제
          // 아래 hostPath 추가
          hostPath:
            path: /root/k8s-local-volume/1231
        - name: secret-datasource
          secret:
            secretName: api-tester-1231-postgresql

 

 

 

 

 

 

 

 

1-3. 레퍼런스

▶ nodeAffinity

https://kubernetes.io/ko/docs/tasks/configure-pod-container/assign-pods-nodes-using-node-affinity/

 

 

 

 

▶ local

https://kubernetes.io/ko/docs/concepts/storage/volumes/#local