쿠버네티스 인 액션 책 내용 요약 + 제 생각을 녹여냈습니다.
쿠버네티스에서 볼륨은 컨테이너 내부에 데이터를 저장하는 가상 디스크이다. 이렇게 볼륨을 사용하면 컨테이너가 종료되어도 데이터를 보존할 수 있다. 또한 여러 개의 컨테이너가 공유하는 데이터를 사용할 수 있다.
쿠버네티스에서 제공하는 볼륨 종류는 다양하다. 그 중에서도 가장 빠르고 쉽게 사용할 수 있는 것은 emptyDir, hostPath, configMap, secret 등이 있다.
emptyDir과 hostPath는 당장 쉽게 할 수 있지만, 파드가 재시작되면서 다른 노드로 옮겨질 때도 같은 데이터를 유지해야 한다면 적합하지 않은 기술이다. 이를 지원하기 위해 gce persistent storage나 nfs 같은 기술을 사용한다.
그러나 위와 같은 기술을 사용하려면 스토리지 기술에 대한 이해와 설정들을 개발자가 세세히 알고 있어야 사용가능하며, 일일이 기재하는 것은 다른 클러스터에 적용할 때 그대로 동작하지 않을 수 있게 된다. 따라서 스토리지 기술과 파드를 분리할 필요가 있으며 이를 위한 것이 PersistentVolume(PV)
과 PersistentVolumeClaim(PVC)
이다.
클러스터 관리자가 스토리지 기반을 설정하고 해당 스토리지를 사용 설정, 용량과 접근모드를 정의한 PV
를 생성한다. 그 다음 개발자는 어떤 스토리지 기술을 썼는지 알 필요 없이 접근모드와 용량을 적어 PVC
로 생성한다. PVC
가 생성되면 쿠버네티스가 알맞은 PV
를 찾아 바인딩하게 된다. 그 다음 파드에서 PVC
를 볼륨으로 사용하면 된다.
리클레임 정책이란 PV를 재사용할 때 기존에 PV안에 있는 데이터를 어떻게 할 지 결정하는 정책이다.
PVC
가 삭제되면 PV
도 같이 삭제된다. 따라서 재사용할 수 없다.기존 방법에선 PV
를 미리 생성해놔야 한다는 단점이 있다. 동적 프로비저닝을 사용하면 PVC
를 만들면 자동으로 PV
를 만들어준다. 동적 프로비저닝을 사용하기 위해선 클러스터에 퍼시스턴트 볼륨 프로비저너를 배포하고 PV
타입을 선택할 수 있는 StorageClass
리소스를 클러스터에 배포해놓아야 한다. StorageClass
리소스는 어떤 프로비저너가 사용돼야 할 지 지정하는 역할을 한다.