기존 아키텍처
이 섹션에서는 간단한 이미지 호스팅 예제를 사용하여 Kubernetes 배포에서 스토리지를 처리하는 방법을 살펴보겠습니다. 샘플 스토 어 애플리케이션의 기존 배포부터 시작하여 이를 이미지 호스트로 사용하도록 수정하겠습니다. UI 컴포넌트는 상태 비저장 마이크로서비스로, Deployment는 Pod의 수평적 확장과 선언적 상태 관리를 가능하게 하므로 배포를 시연하는 훌륭한 예제입니다.
UI 컴포넌트의 역할 중 하나는 정적 제품 이미지를 제공하는 것입니다. 현재 이러한 이미지는 빌드 프로세스 중에 컨테이너에 번들로 포함됩니다. 그러나 이 접근 방식에는 중요한 제한 사항이 있습니다. 컨테이너가 배포된 후에는 새 이미지를 추가할 수 없습니다. 이러한 제한 사항을 해결하기 위해 Amazon Elastic File System과 Kubernetes Persistent Volume을 사용하여 공유 스토리지 환경을 구축하는 솔루션을 구현하겠습니다. 이를 통해 여러 웹 서버 컨테이너가 수요에 맞춰 동적으로 확장하면서 자산을 제공할 수 있습니다.
현재 Deployment의 볼륨 구성을 살펴보겠습니다:
Name: ui
Namespace: ui
[...]
Containers:
ui:
Image: public.ecr.aws/aws-containers/retail-store-sample-ui:1.2.1
Port: 8080/TCP
Host Port: 0/TCP
Limits:
memory: 1536Mi
Requests:
cpu: 250
memory: 1536Mi
[...]
Mounts:
/tmp from tmp-volume (rw)
Volumes:
tmp-volume:
Type: EmptyDir (a temporary directory that shares a pod's lifetime)
Medium: Memory
SizeLimit: <unset>
[...]
Volumes 섹션을 보면, Deployment가 현재 Pod의 수명 동안만 존재하는 EmptyDir 볼륨 타입을 사용하고 있음을 알 수 있습니다. 이는 Pod가 종료되면 이 볼륨에 저장된 데이터가 영구적으로 손실된다는 것을 의미합니다.
그러나 UI 컴포넌트의 경우, 제품 이미지는 현재 Spring Boot를 통해 정적 웹 콘텐츠로 제공되고 있으므로 이미지가 파일 시스템에 존재하지 않습니다.