쿠버네티스 Pod 내부의 데이터를 영구적으로 저장하고 다른 Pod와 공유하는 방안

2021-09-27

.

Data_Engineering_TIL(20210927)

[학습자료]

“클라우드 네이티브를 위한 쿠버네티스 실전 프로젝트” 책을 읽고 정리한 내용입니다.

** 동양북스, 아이자와 고지&사토 가즈히코 지음, 박상욱 옮김

참고자료 URL : https://github.com/dybooksIT/k8s-aws-book

“쿠버네티스에서 설정정보를 저장하고 활용하는 내부구조”에 이어서 공부한 내용을 정리한 내용임

** URL : https://minman2115.github.io/DE_TIL279

[학습내용]

  • 파드 내부의 데이터는 파드가 정지되면 모두 삭제된다.

  • 따라서 파드 내부의 데이터를 저장하고 싶다면 별도로 데이터를 영구적으로 저장할 수 있는 스토리지가 필요하다.

  • 이를 위해서 쿠버네티스에서는 Persistent Volume이라는 리소스로 스토리지를 정의하고 Persistent VolumeClaim이라는 리소스를 사용해 파드에서 참조하여 원하는 영구적인 스토리지를 사용할 수 있도록 제공한다.

  • AWS 기준으로 EBS를 Persistent Volume과 마운트하여 사용할 수 있다. 또한 EKS를 사용하면 사전에 EBS나 별도의 Persistent Volume을 준비하지 않아도 Persistent VolumeClaim을 정의하거나, 파드에서 볼륨을 생성해서 데이터를 저장해야 할때 자동으로 EBS를 생성해 파드에 마운트하는 기능을 사용할 수 있다. 이를 Dynamic provisioning이라고 한다.

  • Dynamic provisioning 아키텍처

1

  • 하지만 일반적으로는 위와 같이 EBS를 영구적인 볼륨으로 사용하지는 않는다. 왜냐하면 EBS는 다른 파드와 동시에 참조해서 file을 읽거나 쓸 수 없기 때문이다. 따라서 EBS를 영구적인 볼륨이라고 달고 다녀도 파드의 수명주기가 다 하면 이 영구적인 EBS 볼륨도 의미가 없어지는 것이다.

그래서 결론적으로 일반적으로 파드가 삭제되더라도 보존하고 싶은 데이터가 있거나 파드 여러개에 어떤 file을 공유하고 싶다면 S3를 참조하는게 일반적이다. 경우에 따라서는 RDS 디비를 사용하거나 EFS를 사용할수도 있을 것이다.

  • 일반적으로 파드의 데이터를 영구적으로 저장하고 공유하는 양상

2

  • 일반적으로 쿠버네티스의 파드는 stateless 형태이기 때문에 이를 고려해서 아키텍처를 구성하는 것이 좋다.