14.1 볼륨
컨테이너는 기본적으로 상태가 없는 앱 컨테이너를 사용함.
-> 다른 노드로 자유롭게 옮길 수 있음
-> 상태를 저장할 수 없어 컨테이너가 재시작시 데이터가 사라짐
데이터를 보존하기 위해 볼륨을 사용함.
볼륨은 클라우드 볼륨 서비스, 디스크, 서버 컨테이너 볼륨 플러그인 등 다양한 종류가 있음
- .spec.container.volumeMounts.mountPropagation : 파드 안에있는 컨테이너끼리 혹은 노드 안에 파드들끼리 공유할 지 설정
None : 컨테이너가 만들어 놓은 마운트를 호스트에서 볼 수 없음.
HostToContainer : 호스트에서 해당 볼륨 하위에 마운트된 다른 디렉터리들도 볼 수 있음
Bidirectional : 호스트 안 모든 컨테이너나 파드에서 같은 볼륨을 사용할 수 있음.
- 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의 생명주기
- 프로비저닝
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 ‘
'DevOps > Kubernetes' 카테고리의 다른 글
[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter16. 쿠버네티스 DNS (0) | 2021.07.22 |
---|---|
[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter15. 클러스터 네트워킹 구성 (0) | 2021.07.22 |
[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter13. 인증과 권한 관리 (0) | 2021.07.21 |
[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter12. 파드 스케줄링 (0) | 2021.07.21 |
[ 쿠버네티스 입문: 90가지 예제로 배우는 컨테이너 관리 자동화 표준 ] Chapter11. 시크릿 (0) | 2021.07.21 |