모험가

Volume (기초) 본문

쿠버네티스/기초

Volume (기초)

라리음 2022. 7. 28. 18:29

 

이 글은 인프런의 대세는 쿠버네티스 강의를 보며 정리한 글입니다

 

 

 

 

 

Volume

-> Pod안에 volume이 생성되므로 pod가 망가지면 volume도 날라감 (일시적인 정보만 쓸 것)

 

1. emptyDir2. hostPath3. PVC / PV

 

 

 

 

 

emptyDir : 컨테이너끼리 데이터를 공유하기 위해서 볼륨을 사용하는 것 (최초에는 항상 비어있기에 명칭임)

 

 

 

hostPath : 각 노드의 path를 사용, 즉 pod가 죽어도 volume은 살아있음 but 만약 pod가 죽고 다른 node에 생성이 된다면 이 pod는 volume에 mount가 불가능함

 

-> Node추가시마다 Mount를 걸어주면 가능은 함

 

 

 

PVC / PV : 외부 volume에 연결하기 위해 만드는데 PV에 바로 연결이 아닌 PVC를 통해 가는게 좋음

 

* PV : Persistent Volume

  PVC : Persistent Volume Claim

 

 

 

Pod -> PVC (여기까지가 User 이며)

PVC -> Volume local (여기는 Admin으로 생각하면 됨)

 

 

 

 

순서

 

1. PV 정의 생성

2. PVC 생성

3. PV 연결

4.  Pod 생성시 PVC 마운팅

 

 

 

 

 

 

 

 

 

 

 

 

 

실습

 

 

 

 

 

 

emptyDir

-> 파드가 지워졌다가 다시 생성되면 안의 내용도 지워짐

 

 

 

 

1.파드 생성

 

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-1
spec:
  containers:
  - name: container1
    image: kubetm/init
    volumeMounts:
    - name: empty-dir
      mountPath: /mount1
  - name: container2
    image: kubetm/init
    volumeMounts:
    - name: empty-dir
      mountPath: /mount2
  volumes:
  - name : empty-dir
    emptyDir: {}

 

 

 

 

 

 

2. exec를 통해 컨테이너에서 mount1이 있는지 확인

 

 

 

 

 

 

 

3. 컨테이너1의 mount1에서 file.txt를 만든 후 컨테이너2의 mount2에도 있는지 확인

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

 

 

 

 

hostPath

-> 파드가 생성되는 노드를 지정하지 않으면 volume에 mount가 안됨 (일일이 만들 수 있는 방법도 있긴 함)

 

 

 

 

 

 

1. 파드 생성 (2개 2,3)

 

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-3
spec:
  nodeSelector:
    kubernetes.io/hostname: k8s-node1
  containers:
  - name: container
    image: kubetm/init
    volumeMounts:
    - name: host-path
      mountPath: /mount1
  volumes:
  - name : host-path
    hostPath:
      path: /node-v
      type: DirectoryOrCreate

 

 

 

 

 

 

이 파드들은 node-v라는 볼륨을 공유하고 있음

 

 

 

 

 

 

 

 

2. pod2에서 file.txt를 생성 후 pod3에서 공유 되어있는 것을 확인 함

 

 

 

 

 

3. node1에서 node-v가 생성되었는지 확인

 

 

 

 

 

 

 

 

 

 

 

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

 

 

 

 

PVC / PV

 

 

 

 

 

 

1. PV 3개 생성 (1,2,3)

 

1은 1G Write

2은 1G ReadOnlyMany

3은 2G Write

 

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-03
spec:
  capacity:
    storage: 2G
  accessModes:
  - ReadWriteOnce
  local:
    path: /node-v
  nodeAffinity:
    required:
      nodeSelectorTerms:
      - matchExpressions:
        - {key: kubernetes.io/hostname, operator: In, values: [k8s-node1]}

 

 

 

 

 

 

 

 

 

 

 

2. PVC 3개 생성

 

1은 1G Write

2은 1G ReadOnlyMany

3은 3G Write

 

 

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-01
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1G
  storageClassName: ""

 

 

 

3. 자동으로 PV에 연결이 됨

 

 

 

 

3은 스토리지가 안 맞기에 연결이 안됨

(더 적은 1G로 하면 연결이 되긴 함 즉 더 높으면은 안됨)

 

 

 

 

 

 

 

 

4. Pod 생성시 PVC 마운팅

 

 

 

 

apiVersion: v1
kind: Pod
metadata:
  name: pod-volume-3
spec:
  containers:
  - name: container
    image: kubetm/init
    volumeMounts:
    - name: pvc-pv
      mountPath: /mount3
  volumes:
  - name : pvc-pv
    persistentVolumeClaim:
      claimName: pvc-01

 

 

 

 

 

5. exec로 들어가서 hostPath로 만든 파일이 있는지 확인

 

 

'쿠버네티스 > 기초' 카테고리의 다른 글

Namespace, ResourceQuota, LimitRange (기초)  (0) 2022.08.05
ConfigMap, Secret (기초)  (0) 2022.08.05
Service (기초)  (0) 2022.07.28
POD (기초)  (0) 2022.07.28
kubernetes 설치  (0) 2022.07.27