BaeBox

PersistentVolume / PersistentVolumeClaim 본문

개발 관련

PersistentVolume / PersistentVolumeClaim

배모씨. 2019. 11. 2. 17:47
반응형

volume 에는 많은 종류가 있다. 

그 중 가장 일반적인 persistent Volume을 알아보자.

persistentVolume (이하 pv): pod 의 라이프사이클과 별개로 존재하는 저장소.

persistentVolumeClaim (이하 pvc):  pv를 추상화 해 놓은 것. 왜 claim 이 필요한지는 모르겠음.  그저 pod 가 pv 에 직접적인 접근이 불가능하기 때문인것이라 예상. pv 생성자와 사용자가 다른 경우이거나 그도 아니면, pv 도 추상화를 하고 싶었나?

* PersistentVolume 생성

kind: PersistentVolume 
apiVersion: v1 
metadata: 
  name: task-pv-volume 
  labels: 
    type: local 
spec: 
  storageClassName: manual 
  capacity: 
    storage: 10Gi 
  accessModes: 
    - ReadWriteOnce 
  hostPath: 
    path: "/mnt/data" 

* PersistentVolumeClaim 생성

kind: PersistentVolumeClaim 
apiVersion: v1 
metadata: 
  name: task-pv-claim 
spec: 
  storageClassName: manual 
  accessModes: 
    - ReadWriteOnce 
  resources: 
    requests: 
      storage: 3Gi 
  volumeName: task-pv-volume 

* 생성된 pv 와 pvc 확인

kubectl get pv
&&
kubectl get pvc

 

* pv 와 pvc 를 이용한 Depoloyment(mysql) 생성

apiVersion: extensions/v1beta1 
kind: Deployment 
metadata: 
  creationTimestamp: null 
  labels: 
    io.kompose.service: db 
  name: db 
spec: 
  replicas: 1 
  strategy: {} 
  template: 
    metadata: 
      creationTimestamp: null 
      labels: 
        io.kompose.service: db 
    spec: 
      volumes: 
        - name: task-pv-claim 
          persistentVolumeClaim: 
            claimName: task-pv-claim 
      containers: 
      - args: 
        - --default-authentication-plugin=mysql_native_password 
        env: 
        - name: MYSQL_ROOT_PASSWORD 
          value: example 
        image: mariadb:10.2.8 
        name: db 
        volumeMounts: 
        - mountPath: /testDir
          name: task-pv-claim 
        - mountPath: /var/lib/mysql 
          name: task-pv-claim           
        restartPolicy: Always         
        ports: 
        - containerPort: 3306 
        resources: {}
NameSpace Description
volume task-pv-claim 이라는 PVC 를 사용하겠다는 선언
volumeMounts 컨테이너의 마운트 디렉토리와 마운트할 볼륨을 지정

mount 된 volume

kubectl describe deployments <deployment_name> 명령어를 이용하면 해당 deployment 의 상세정보를 볼 수 있다.

Mount 하위에 특정 볼륨(task-pv-claim)이 어떤 위치(/sam, /var/lib/mysql)에 마운트 되어있는지 확인할 수 있다.  

위의 이미지에서도 확인 가능하지만, 동일한 볼륨을 하나의 포드의 여러 디렉토리에 마운트 가능하다. 

 

덤. pv 를 만들지 않고, pvc 를 만들고 이용시 임시 pv 가 같이 선언(Dynamic Provisioning)되기 때문에 호스트의 디렉토리를 마운트할 것이 아니라면, pv 를 선언하지 않고 사용하여도 된다. 즉, 호스트의 디렉토리를 마운트 할 것이라면 pv와 pvc를 둘 다 선언하여야 한다.

 


https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/#create-a-persistentvolumeclaim

 

Configure a Pod to Use a PersistentVolume for Storage

 

kubernetes.io

https://kubernetes.io/docs/concepts/storage/volumes/#hostpath

 

Volumes

 

kubernetes.io

https://supergiant.io/blog/persistent-storage-with-persistent-volumes-in-kubernetes/

 

Persistent Storage with Persistent Volumes in Kubernetes

This article introduces to the persistent storage in Kubernetes focusing on the concepts of Persistent Volumes.and Persistent Volume Claims.

supergiant.io

https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistent-volumes

 

Persistent Volumes

 

kubernetes.io

공식 문서가 어지간한 다른 블로그에서 설명해주는것보다 쉽다. 뭐야 이거

반응형

'개발 관련' 카테고리의 다른 글

Pod (포드)  (0) 2019.11.02
local registry  (0) 2019.11.02
Ingress  (0) 2019.11.02
Web UI(dashboard) 설치  (0) 2019.11.02
Minikube 설치 및 cluster 구성  (0) 2019.11.02
Comments