본문 바로가기

인프라/kubernetes

kubernetes 볼륨

볼륨

볼륨은 pod spec 에서 정의한다.

자체적으로 생성, 삭제 불가능하고 파드의 각 컨테이너에서 마운트한다.

 

 

볼륨 예제

파드 내부에 컨테이너들이 공유할 볼륨이 있다.

볼륨을 사용하지 않는 경우

 

볼륨을 사용하는 경우

볼륨을 사용한 컨테이너 간 데이터 공유

emptyDir 볼륨 사용

 

임시로 저장할 데이터를 빈 디렉토리에 볼륨으로 저장한다.

파드가 죽으면 데이터는 삭제된다.

 

워커 노드의 파일 시스템의 파일 접근

특정 워커 노드의 파일시스템에 데이터를 저장시킨다.

파드가 다른 노드로 스케줄링 되면 사용 불가능해진다.

보통 로그나 CA인증서 접근 용도로 사용된다.

워커 노드에 볼륨을 만들어 사용한다.

 

퍼시스턴스 스토리지

 

디스크에 데이터를 유지시키는 방식으로

클러스터에 퍼시스턴트 디스크를 생성하여 마운트한다.

워커 노드에 상관없이 데이터에 접근 할 수 있다.

 

- 디스크 생성 방법

gcloud compute disks create --size=1GiB --zone=europe-west1-b mongodb

 

퍼시스먼트 디스크 사용

apiVersion: v1
kind: Pod
metadata:
  name: mongodb 
spec:
  volumes:
  - name: mongodb-data
    gcePersistentDisk:                 # 볼륨의 유형은 GCE 퍼시스턴트 디스크
      pdName: mongodb            
      fsType: ext4                         # 리눅스 파일시스템 유형
  containers:
  - image: mongo
    name: mongodb
    volumeMounts:
    - name: mongodb-data
      mountPath: /data/db           # 컨테이너 내 마운트 되는 path
    ports:
    - containerPort: 27017
      protocol: TCP

 

기반 스토리지 기술과 파드 분리

 

쿠버네티스를 사용하는 개발자는 어떤 종류의 스토리지 기술이 사용되는지 알 필요가 없어야 하고

파드를 실행하기 위해 어떤 물리 서버가 사용되는지 알 필요가 없어야 한다.

 

파드의 볼륨이 실제 인프라스트럭쳐를 참조하는건 쿠버네티스가 추구하는 바가 아니다.

 

파드 정의에 인프라 스트럭처 정보가 있으면 동일한 파드를 다른 클러스터에서는 쓸 수 없게 됨을 의미한다.

 

 

퍼시스턴트 볼륨과 퍼시스턴트봄륨 클레임

관리자는 네트워크 스토리지 유형을 설정하고 쿠버네티스 api에 PV 디스크립터를 보내 PV 를 생성한다.

 

사용자는 PVC 를 생성하고 쿠버네티스는 PV 와 PVC를 바인딩한다.

사용자는 PVC를 참조하는 볼륨을 가진 파드를 생성한다.

 

인프라 세부사항을 처리하지 않고도 앱이 스토리지 요청을 할 수 있게 된다. 

퍼시스턴트 볼륨 생성

이전에 생성한 퍼시스턴트 디스크를 연결한 퍼시스턴트 볼륨을 생성했다.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: mongodb-pv
spec:
  capacity: 
    storage: 1Gi        // size 
  accessModes:
    - ReadWriteOnce     // 읽기/쓰기용
    - ReadOnlyMany      // 읽기 전용
  persistentVolumeReclaimPolicy: Retain  // 클레임이 해제된 후 볼륨 유지 (데이터 삭제x)
  gcePersistentDisk:    // 이전에 생성한 GCE 퍼시스턴트 디스크 기반
    pdName: mongodb 
    fsType: ext4

 

퍼시스턴트와 노드는 특정 네임스페이스에 속하지 않는다

 

 

퍼시스턴트 볼륨 클레임 생성을 통한 퍼시스턴트 볼륨 요청하기

 

파드가 재스케줄링되더라도 동일한 퍼시스턴트 볼륨 클레임을 사용하기 위해 클레임을 생성한다.

클레임은 생성되자마자 적절한 퍼시스턴스 볼륨을 찾고 클레임에 바인딩한다.

 

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

파드에서 퍼시스턴트 볼륨 사용하기

persistentVolumeClaim 으로 적어준다.

apiVersion: v1
kind: Pod
metadata:
  name: mongodb 
spec:
  containers:
  - image: mongo
    name: mongodb
    volumeMounts:
    - name: mongodb-data
      mountPath: /data/db
    ports:
    - containerPort: 27017
      protocol: TCP
  volumes:
  - name: mongodb-data
    persistentVolumeClaim:    
      claimName: mongodb-pvc   // PVC 이름으로 볼륨클레임 참조

'인프라 > kubernetes' 카테고리의 다른 글

kubernetes 디플로이먼트  (0) 2021.08.25
kubernetes 컨피그맵과 시크릿  (0) 2021.08.24
kubernetes 서비스  (0) 2021.08.24
kubernetes 레플리케이션과 그밖의 컨트롤러  (0) 2021.08.23
kubernetes 파드  (0) 2021.08.23