• 카테고리

    질문 & 답변
  • 세부 분야

    데브옵스 · 인프라

  • 해결 여부

    미해결

Retain 정책 관련하여 질문드립니다.

22.03.14 22:55 작성 조회수 815

2

안녕하세요! 강의 중 궁금한 부분이 있어 질문 드립니다.

5분 50초경 내용입니다.

Reclaim Policy가 Retain일 때, PVC가 제거되면 PV 내의 데이터는 보존되지만 PV를 다른 PVC에 다시 매핑하여 재사용 할 수는 없고 PV를 수동 삭제 해야 한다고 강의에서 설명해주셨는데요,

PVC가 제거됨으로 인해 PV에 저장된 데이터를 다시 활용할 수 없다면 어떤 상황에서 Retain 정책을 지정했을 때 의미가 있는지 궁금합니다.

Retain 정책을 세워도 결국 PV를 재사용 할 수 없다면 안에 저장된 데이터를 보존하고 복원할 수 없는 게 아닌가요? 그렇다면 외부 볼륨을 사용하는 의미가 없는게 아닌지..
 
구글링해서 찾아본 내용으로는 Retain으로 설정시 다른 PVC에 매핑하여 재사용 할 수 있는 것 처럼 나오기에 혼란스러워서 질문드립니다.
-> https://bcho.tistory.com/1259

답변 1

답변을 작성해보세요.

0

안녕하세요. 좋은 질문 감사합니다.

저도 오랫만에 개념적인 부분을 다시 한번 리마인드하게 되었네요.

 

실제 사용하다보면, 어려울 내용은 아닌데 개념적인 내용들로 유추하다보면 더 어려운것 같습니다.

저도 강의에서 좀더 내용을 클리어하게 정리드리지 못한점 죄송합니다.

 

일단 실무적인 사례로 생각해서 얘기해볼께요.

 

내 App(Pod)에 영구적으로 저장할 데이터가 필요합니다.

Pod는 삭제될수 있고, 다른 Pod가 생겨나면서 그 데이터를 그대로 써야하니까요. 

그래서 쿠버네티스 개념적으로 PVC와 PV를 이용해 Volume을 연결해요.

 

이런 케이스로 Volume은 재사용이 되어야 합니다.

 

그럼 Pod1에 PVC를 연결 합니다. 

이때 PVC와 PV를 사전에 연결해 놓을 수도 있고, StroageClass를 이용해 동적으로 PVC와 PV를 생성할 수 있습니다.

 

Pod1는 삭제될 수 있지만, 데이터를 재사용 해서 계속 쓰려면 PVC는 삭제하지 않습니다.

그리고 기존 PVC와 Pod2를 연결하면 데이터를 영속적으로 재사용해서 쓰는 개념이 됩니다.

 

PVC와 PV간의 재연결을 데이터 재사용의 방법으로 쓰지 않습니다.

 

----------------------------------------------------------------------------

 

이제 ReclaimPolicy의 정책에 대해서 말씀드리면,

 

이건 다 쓴 데이터 대한 반환 정책이라고 보시면 됩니다.

 

데이터를 다 썼을 때의 상황이 되었습니다.

App(pod)에서 해당 데이터를 이용하고, 

PVC-PV를 통해서 실제 물리적 볼륨(NFS, Volume 솔루션, 클라우드 Volume)에 데이터가 저장되어 있습니다.

 

Pod를 삭제하고, PVC를 지우게 되면 ReclaimPolicy가 Retain모드일때 PV는 삭제되지 않지만,

상태가 Released가 되서 해당 상태에서는 다른 PVC에 해당 PV를 연결 할 수가 없는 상태가 됩니다.

(이 부분이 제 강의에서 설명드린 부분이고요)

 

물론 API를 통해 Released상태를 다시 Available로 상태를 변경할 수 있습니다.

관련 방법은 아래 링크 참조하시면 되고요.

https://kubernetes.io/ko/docs/concepts/storage/persistent-volumes/#retain-%EB%B3%B4%EC%A1%B4

https://stackoverflow.com/questions/50667437/what-to-do-with-released-persistent-volume

 

아마 실수로 PVC를 지웠거나, Volume안에 데이터는 지우고 PV의 연결정보만 유지하고 싶어서 이렇게 할 수는 있겠네요.

이런 의미에선 제 강의 내용과는 달리 PVC와 PV는 재연결 가능하다고 할 수 있습니다.

 

해당 PV는 이제 사용하지 않지만, 사내 정책상 그 데이터를 유지해야할 수 있습니다.

그럴때 Retain을 사용하고, PVC와 PV는 삭제하지만, 실제 Volume의 데이터는 남겨둡니다. 

 

그리고 해당 Volume은 Pod와 다시 연결이 되야할 상황이면, PV를 해당 Volume에 연결되도록 다시 만들어줍니다.

 

----------------------------------------------------------------------------

 

생각을 정리해가며 쭉 적어봤는데, 이제 어느정도 감이 오셨을지요?

부족한 강의 내용에 혼란을 드려 죄송하며, 질의응답으로 보충해 드리도록 하겠습니다.

감사합니다.

 

csat4님의 프로필

csat4

질문자

2022.03.20

상세히 답변 해주셔서 감사합니다.

답변주신 부분에서

------->답변내용

아마 실수로 PVC를 지웠거나, Volume안에 데이터는 지우고 PV의 연결정보만 유지하고 싶어서 이렇게 할 수는 있겠네요.

이런 의미에선 제 강의 내용과는 달리 PVC와 PV는 재연결 가능하다고 할 수 있습니다.

 

해당 PV는 이제 사용하지 않지만, 사내 정책상 그 데이터를 유지해야할 수 있습니다.

그럴때 Retain을 사용하고, PVC와 PV는 삭제하지만, 실제 Volume의 데이터는 남겨둡니다. 

 

그리고 해당 Volume은 Pod와 다시 연결이 되야할 상황이면, PV를 해당 Volume에 연결되도록 다시 만들어줍니다.

-------

 

이 부분이 제가 궁금했던 부분입니다.

볼륨에 데이터를 저장하는 목적이 영속성을 위해서인데, PVC가 제거됨으로 인해 PV를 재사용 불가능하게 되고 그 안의 데이터를 확인할 수 없어서는 안되지 않는가?라는 생각이 들어서 질문드리게 되었습니다.

답변과 함께 kubernetes document의 Retain항목을 보니 이해가 조금 되는 것 같습니다.

 

--->https://kubernetes.io/ko/docs/concepts/storage/persistent-volumes/

Retain(보존)

Retain 반환 정책은 리소스를 수동으로 반환할 수 있게 한다. 퍼시스턴트볼륨클레임이 삭제되면 퍼시스턴트볼륨은 여전히 존재하며 볼륨은 "릴리스 된" 것으로 간주된다. 그러나 이전 요청자의 데이터가 여전히 볼륨에 남아 있기 때문에 다른 요청에 대해서는 아직 사용할 수 없다. 관리자는 다음 단계에 따라 볼륨을 수동으로 반환할 수 있다.

  1. 퍼시스턴트볼륨을 삭제한다. PV가 삭제된 후에도 외부 인프라(예: AWS EBS, GCE PD, Azure Disk 또는 Cinder 볼륨)의 관련 스토리지 자산이 존재한다.
  2. 관련 스토리지 자산의 데이터를 수동으로 삭제한다.
  3. 연결된 스토리지 자산을 수동으로 삭제한다.

동일한 스토리지 자산을 재사용하려는 경우, 동일한 스토리지 자산 정의로 새 퍼시스턴트볼륨을 생성한다.

-----

 

즉,

- 1. PVC 제거 후 PV는 Released 상태(데이터가 남아있는)이기 때문에 타 PVC에서 연결하여 새 볼륨처럼 할당하여 사용할 수 없음. 수동으로 삭제 후 재사용.

- 이와는 별개로 실수나 오류로 PVC를 제거하더라도 Retain인 경우 PV와 그 안의 데이터는 보존됨.

- 이런 경우 PVC를 재정의하여 PV와 연결하고 Pod에서 데이터를 다시 확인할 수 있음

- PVC 제거 후 PV를 제거하더라도 실제 연결된 스토리지 안의 데이터는 보존됨.

- PVC, PV 제거 후 데이터가 아직 남아있는 외장 스토리지를 따로 분리해서 보관하다가 다시 데이터 확인이 필요한 경우 PC에 연결하여 데이터 확인 가능

 

이렇게 이해하면 될까요? 제가 잘못 이해한 부분이 있을까요?

 

 

 

네 잘 이해하셨습니다.

해당 이해를 바탕으로 PV 솔루션을 결정할 때,

그 솔루션에 지금 얘기한 부분들이 잘 가이드 되있고, 쉽게, 잘 동작하는지 확인해 보면 좋습니다.

쿠버네티스는 Volume에 대한 여러 기능적인 정의를 PV와 PVC를 통해서 해놓거고

실제 Volume 솔루션이 어떤 기능들이 먹히도록 만들어졌는지는 또 확인해 봐야하거든요.

감사합니다.