: 파드 내 메인 컨테이너가 종료하는 경우 사이드카도 종료할 수 있도록 Lifecycle을 맞춰주는 방법
- 파드에 멀티 컨테이너를 띄우는 경우, 메인 컨테이너가 종료되면 sidecar 또한 더이상 필요 없어지는 경우가 있다.(보통 로그용 컨테이너)
- 특히나 cronjob의 경우, 사이드카가 종료되지 않으면 job이
completed
되지 않고not ready
상태에 머무르게 된다. 이 경우 해당 cronjob은 성공했다 할지라도, 다음 cronjob이 실행되지 않게된다.
- 특히나 cronjob의 경우, 사이드카가 종료되지 않으면 job이
- 파드에서는 두 컨테이너 모두 그냥 컨테이너일 뿐이라 별도의 방법이 없는 듯하다.
Volume을 통해 상태체크
: 파드 내 공유 볼륨을 두고, 폴링 방식으로 상태를 체크하기
main container
1
2
3
4
5
6
7
8
9
10
11
12
13
...
- name: main-container
image: ...
command: [ "/bin/sh", "-c" ]
args:
- |
sh run.sh # Do something main container should do
...
touch /status/completed # Add completed status
volumeMounts:
- mountPath: /status
name: main-container-status
sidecar container
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
- name: sidecar-container
image: ...
command: [ "/bin/sh", "-c" ]
args:
- |
while ! test -f /status/completed; do
echo 'Waiting for the main container completed'
sleep 10
done # Polling volume /status/
echo 'Main container completed'
exit 0
volumeMounts:
- mountPath: /status
name: main-container-status
readOnly: true
volume
1
2
3
4
...
volumes:
- name: main-container-status
emptyDir: { } # Use volume emptyDir
Trouble shooting
- shell이 사용가능한 이미지여야 한다. shell이 지원되지 않는 이미지인데 이 작업을 위해
debug
이미지를 사용하기에는 이미지 크기도 너무크고 다른 방법이 없을지 고려해보는게 좋을 것 같다. - 해당 이미지에 기본
command
가 존재하는지를 파악해야한다. 컨테이너가 기본적으로 수행하는 커맨드를 오버라이드하면 의도와는 다른 동작을 하게된다.
Reference)
https://stackoverflow.com/questions/59777620/how-can-i-allow-a-sidecar-container-to-terminate-within-a-kubernetes-deploymen