DevOps/Kubernetes

[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter14. 데이터 저장

noahkim_ 2021. 7. 22. 02:25

14.1 볼륨

 

컨테이너는 기본적으로 상태가 없는 앱 컨테이너를 사용함.

-> 다른 노드로 자유롭게 옮길 수 있음

-> 상태를 저장할 수 없어 컨테이너가 재시작시 데이터가 사라짐

 

데이터를 보존하기 위해 볼륨을 사용함. 

볼륨은 클라우드 볼륨 서비스, 디스크, 서버 컨테이너 볼륨 플러그인 등 다양한 종류가 있음

 

  • .spec.container.volumeMounts.mountPropagation : 파드 안에있는 컨테이너끼리 혹은 노드 안에 파드들끼리 공유할 지 설정
     None : 컨테이너가 만들어 놓은 마운트를 호스트에서 볼 수 없음.
     HostToContainer : 호스트에서 해당 볼륨 하위에 마운트된 다른 디렉터리들도 볼 수 있음
     Bidirectional : 호스트 안 모든 컨테이너나 파드에서 같은 볼륨을 사용할 수 있음.

  1. emptyDir 

파드가 실행되는 호스트의 디스크를 임시로 컨테이너에 볼륨으로 할당해서 사용.

파드가 사라지면 데이터도 함께 사라짐. 컨테이너가 문제가 생겨 재시작되도 파드는 살아있으므로 데이터 이용 가능.

  • spec.volumes[] : 사용하려는 볼륨들을 먼저 선언
     .name :
     .emptyDir : 값으로 설정

  • spec.containers[].volumeMounts[] : 선언했던 볼륨을 컨테이너 설정에서 불러와서 사용 가능
     .name : 볼륨의 이름을 가져와서 사용함
     .mountPath : 볼륨을 마운트할 디렉터리 설정

 

    2. hostPath

 

파드가 실행된 호스트의 파일이나 디렉터리를 파드에 마운트함.

호스트에 있는 실제 파일이나 디렉터리를 마운트함. 파드를 재시작 했을 때도 데이터가 남음.

  • spec.volumes[] : 사용하려는 볼륨들을 먼저 선언
     .name
     .hostPath
      .path : 호스트의 디렉터리 경로 설정
      .type :

  • spec.containers[].volumeMounts[] : 선언했던 볼륨을 컨테이너 설정에서 불러와서 사용 가능
     .name : 볼륨의 이름을 가져와서 사용함
     .mountPath : 볼륨을 마운트할 디렉터리 설정

 

    3. nfs

 

기존에 사용하는 NFS 서버를 이용해서 파드에 마운트함.

  • .spec.template.spec.containers[].ports[]
     .name : 사용하는 프로세스
     .containerPort : 포트번호 지정

  • Spec.template.spec.volumes.nfs
     .server : nfs-server pod의 ip
     .path

 

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

 

볼륨을 사용하는 구조는 PV(퍼시스턴트 볼륨)과 PVC(퍼시스턴트 볼륨 클레임) 두개로 분리되어 있음.

 

PV : 볼륨. 클러스터 안에서 자원으로 다룸. 파드와 별개로 관리되며 생명주기가 있음.

PVC : 사용자가 PV에 하는 요청. 사용하고자 하는 용량, 읽기/쓰기 모드 설정 등을 정해서 요청하기

 

PV의 생명주기 

 

  1. 프로비저닝

PV만들기. 

 

  • 정적요청 : PV를 미리 만들어두기. 스토리지 용량이 제한되어 있을 때 사용함.
  • 동적요청 : 요청이 있을 때마다 PV 만들기. 사용자가 PVC를 거쳐서 PV를 요청 시 생성함.

    2. 바인딩

프로비저닝으로 만든 PV를 PVC와 연결하기(매핑)


    3. 사용

 

PVC는 파드에 설정되고 파드는 PVC를 볼륨으로 인식해서 사용함.

할당된 PVC는 파드를 유지하는 동안 계속 사용하며 시스템에서 임의로 삭제할 수 없음.

 

    4. 반환

 

사용이 끝난 PVC는 삭제되고 PV를 초기화(Release)함.

초기화 정책

  • Retain
    PV를 그대로 보존함
  • Delete
    PV를 삭제하고 연결된 외부 스토리지 쪽의 볼륨도 삭제함.
    동적 볼륨 할당으로 생성된 PV들은 기본 반환정책이 Delete임
  • Recycle
    PV
    데이터들을 삭제하고 다시 새로운 PVC에서 PV 사용할 있도록 .

14.3 퍼시스턴트 볼륨 템플릿

 

  • .spec.capacity.storage : 스토리지 용량
  • .spec.volumeMode : 볼륨의 형식
  • .spec.accessMode : 볼륨의 모드 설정
  • .spec.storageClassName : 스토리지 클래스 설정 필드.
     특정 스토리지 클래스가 있는 PV는 해당 스토리지 클래스에 맞는 PVC에만 연결됨
  • .spec.persistentVolumeReclaimPolicy : PV가 해제되었을 때의 초기화 옵션
  • .spec.hostPath : 해당 PV의 볼륨 플러그인 명시

14.4 퍼시스턴트 볼륨 클레임 템플릿

14.5 레이블로 PVC와 PV연결하기

 

 

  • metadata.labels. : PVC에서 선택할 수 있도록 적절한 레이블 세팅

  • spec.selector.matchLabels : 매치할 레이블 조건 설정

14.6 파드에서 PVC를 볼륨으로 사용하기

  • spec.template.spec.volumes[].name : 사용할 볼륨 설정
     .persistentVolumeClaim.claimName에 사용할 PVC를 설정함

14.7 PVC 크기 늘리기

  • spec.storageClassName.allowVolumeExpansion 필드값을 true로 주기

.spec.resources.requests.storage 필드 값에 높은 용량을 설정한 클러스터에 적용하기

 

14.8 StorageClasses

 

‘Local-storage’ : no-provisioner and not support dynamic provisioning

 

‘ Kubectl get sc ‘