Volume

문주은·2022년 8월 19일
0

k8s volumne 개념

  • emptyDir

    • pod 안에 있는 2개의 container 간 공유하는 기법 : emptyDir
    • emptyDir은 별도의 storage가 있는 것이 아니라 연결되어져 있는 개념
    • emptyDir과 pod와 lifecycle이 같다
      (pod가 삭제되면 container, application 안에 있는 데이터까지 모두 삭제됨)
    • 하지만 hostPath를 쓰면 데이터 영속성이 보장된다
      (hostPath : node와 container 연결)
    • 하지만 node가 망가지면 hostPath도 망가짐
    • node와 node 연결하는 기법은 NFS 기법

2. volumne 기법

2-1. emptyDir

  • non-persistent storage (비영구적인 storage)

2-1. PV, PVC

PV

  • persistent volume
  • 클러스터에서 사용할 볼륨을 추가하기 위한 가상 스토리지 인스턴스
  • admin이 사용
  • 권한과 용량을 지정

PVC

  • Persistent Volume Claim
  • PV를 원하는 용량과 권한으로 요청
  • 개발자가 사용
  • PVC를 개발자가 요청
  • 특정 권한과 용량으로 요청
  • 매칭되는 PV가 자동으로 선택(사용자 지정도 가능)

1) pv로 권한과 용량 지정

apiVersion: v1
kind: PersistentVolume
metadata: 
  name: pv1
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadWriteOnce
  local:
    path: /data_dir
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - {key: kubernetes.io/hostname, operator: In, values: [k8s-node1]}
---
apiVersion: v1
kind: PersistentVolume
metadata: 
  name: pv2
spec:
  capacity:
    storage: 1Gi
  accessModes:
  - ReadOnlyMany
  local:
    path: /data_dir
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - {key: kubernetes.io/hostname, operator: In, values: [k8s-node1]}
---
apiVersion: v1
kind: PersistentVolume
metadata: 
  name: pv3
spec:
  capacity:
    storage: 2Gi
  accessModes:
  - ReadWriteMany
  local:
    path: /data_dir
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - {key: kubernetes.io/hostname, operator: In, values: [k8s-node1]}

2) pvc 생성

  • pvc는 용량과 접근방식에 따라 PV 선택(두개 모두 성립해야함)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc1
spec:
  accessModes:
  - ReadOnlyMany
  resources:
    requests:
      storage: 1G
  storageClassName: ""
  
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc2
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1G
  storageClassName: ""
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc4
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 1G
  storageClassName: ""

3) pod에 pvc지정하여 연결

# pod-pvc.yaml
apiVersion: v1
kind: Pod
metadata:
  name: mynode-pod
spec:
  containers:
  - image: dbgurum/mynode:1.0
    name: mynode-container
    ports:
    - containerPort: 8000
    volumeMounts:
    - name: mynode-path
      mountPath: /mynode
  volumes:
  - name: mynode-path
    persistentVolumeClaim:
      claimName: pvc1
      
# mynode-pod에 접속
kubectl exec -it mynode-pod -- bash

root@nodejs-pvc1-pod:/# ls
... mynode ...
root@nodejs-pvc1-pod:/# cd /mynode/
root@nodejs-pvc1-pod:/mynode# touch k8s-5.txt
root@nodejs-pvc1-pod:/mynode# ls
k8s-3.txt k8s-4.txt k8s-5.txt

# 아래의 경로에서도 확인 가능
[oot@k8s-node1 data_dir]# ls
k8s-5.txt
profile
Data Engineer

0개의 댓글