alt
Home 메인 컨테이너 종료 시 사이드카 컨테이너 종료하기
Post
Cancel

메인 컨테이너 종료 시 사이드카 컨테이너 종료하기

: 파드 내 메인 컨테이너가 종료하는 경우 사이드카도 종료할 수 있도록 Lifecycle을 맞춰주는 방법


  • 파드에 멀티 컨테이너를 띄우는 경우, 메인 컨테이너가 종료되면 sidecar 또한 더이상 필요 없어지는 경우가 있다.(보통 로그용 컨테이너)
    • 특히나 cronjob의 경우, 사이드카가 종료되지 않으면 job이 completed 되지 않고 not ready 상태에 머무르게 된다. 이 경우 해당 cronjob은 성공했다 할지라도, 다음 cronjob이 실행되지 않게된다.
  • 파드에서는 두 컨테이너 모두 그냥 컨테이너일 뿐이라 별도의 방법이 없는 듯하다.


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

This post is licensed under CC BY 4.0 by the author.

시작하세요! 도커 / 쿠버네티스 2장 도커 엔진 - 2. 도커 이미지

시작하세요! 도커 / 쿠버네티스 2장 도커 엔진 - 3. Dockerfile