Making Sense Out of Native Sidecar Containers in Kubernetes
iximiuz Labs
Kubernetes 1.28에 Native Sidecar 기능이 추가된 다는걸 알고 업무상 필요하기도 해서 광심있게 보고 있고 관련 글도 몇번 공유했었는데 어떻게 동작하는지까지 이해할 수 있게 쉽게 설명한 글입니다.
먼저 Kubernetes Pod에서 보통 사이드카 패턴이라고 하면 메인 컨테이너 외에 다른 컨테이너를 하나 더 띄워서 추가적인 작업을 하는 것을 말합니다. 예를 들어 프록시 역할을 하는 컨테이너를 실행한다거나 로그를 받아서 다른 곳에 보내주는 컨테이너를 띄워서 처리합니다. 물론 같은 컨테이너 내에서 로직으로 풀어도 되긴 하지만 관심사도 분리되는 등의 장점이 있어서 사이드카 패턴을 많이 씁니다.
하지만 사이드카 패턴은 Pod 안에 여러 컨테이너를 실행하는 것을 그냥 이용한 것이므로 요구사항에 맞게 정확히 사용하기는 어렵습니다. 대표적으로 프록시나 로그 수집을 한다고 하면 자연히 사이드카가 메인 컨테이너 보다 먼저 뜨고 나중에 죽어야 누락이 없이 제대로 처리될 수 있지만 Kubernetes에서는 같은 생명 주기로 관리하기 때문에 처리가 어렵습니다.
이부분을 해결하기 위한 것인 Kubernetes 1.28에 도입되는 사이드카 컨테이너입니다.
하지만 사이드카 컨테이너는 새로운 기능이 추가되었다기 보다 기존 기능을 활용할 것입니다. Pod에는 initContainers가 있어서 메인 컨테이너가 뜨기 전에 해야할 작업을 처리할 수 있게 하고 initContainers의 작업이 끝나야 다음 initContainers로 넘어가고 모두 완료되어야 메인 컨테이너를 실행합니다.
사이드카 컨테이너는 sidecarContainers같은 걸 추가한 것이 아니라 initContainers의 기능을 그대로 사용하면서 restartPolicy를 Always로 주어서 initContainers임에도 다른 컨테이너의 시작을 맞기 않도록 했습니다. 그래서 보통은 initContainers에 정의된 순서대로 순차적으로 실행되지만 사이드카로 정의하면 다음 컨테이너가 앞의 컨테이너의 종료를 기다리지 않고 바로 시작되고 사이드카 컨테이너가 종료되어도 재시작됩니다.(Pod의 컨테이너로 사이드카를 사용했을 때는 사이드카가 죽으면 팟이 종료됩니다.) 사이드카는 프로브도 지원하며 일반 컨테이너가 모두 종료된 뒤에 종료되는 특징을 가지는데 그림과 함께 잘 설명되어 있습니다.
https://labs.iximiuz.com/tutorials/kubernetes-native-sidecars
다음 내용이 궁금하다면?
이미 회원이신가요?
2023년 10월 14일 오전 7:37