최신글

kubernetes sidecar가 왜 initContainers로 구현가능하게 했을까? Kubernetes native sidecar 간단 정리

반응형

이 글은 Kubernetes native sidecar container에 대해 간단히 설명합니다.

 

native sidecar container란?

native sidecar container는 sidecar container를 initContainer로 실행하는 기능입니다. Kubernetes 1.33에서 GA가 되었습니다. restartPolicy: Always가 붙은 init container는 기존 init container와 다르게 종료되지 않고 계속 실행됩니다. 그리고 main container가 모두 종료된 뒤에 종료됩니다.

initContainers:
- name: istio-proxy
  restartPolicy: Always 

 

왜 initContainer로 sidecar를 실행하는 기능이 나왔을까?

sidecar container는 main container의 기능을 확장하기 위해 실행하는 추가 컨테이너로 사용되었는데, sidecar는 Kubernetes가 지원하는 native 기능이 아니어서 불편한 점들이 있었습니다.

 

대표적인 예가 라이프사이클입니다. 예를 들어 Istio sidecar proxy container는 main container보다 먼저 실행되고 main container보다 나중에 종료되어야 합니다. 하지만 sidecar container는 containers 중 하나이기 때문에 라이프사이클을 의도한 대로 제어할 수 없었고, Istio는 여러 가지 우회 방법으로 라이프사이클 문제를 해결했습니다.

containers:
- name: app
  image: my-app:1.0
  ports:
  - containerPort: 8080
- name: istio-proxy
  image: docker.io/istio/proxyv2:1.26.0
  args:
  - proxy
  - sidecar

 

initContainer는 main container보다 먼저 실행되고 main container보다 늦게 종료되기 때문에 라이프사이클을 명확히 관리할 수 있습니다.

 

initContainer는 Kubernetes native 기능이기 때문에 Kubernetes 블로그에서도 native sidecar container로 소개되었습니다.
- https://kubernetes.io/blog/2023/08/25/native-sidecar-containers/

 

native 기능으로 sidecar를 설정할 수 있게 되자 많은 오픈소스가 발 빠르게 initContainer를 적용하기 시작했습니다. 대표적으로 Istio는 1.27 이상부터 sidecar container를 initContainer로 실행합니다.

 

참고자료

반응형