임시 컨테이너
임시 컨테이너 (Ephemeral Containers)
이 페이지는 임시 컨테이너(ephemeral containers)에 대한 개요를 제공해요. 임시 컨테이너는 문제 해결(troubleshooting) 같은 사용자 시작 작업을 수행하기 위해 기존 파드에서 일시적으로 실행되는 특수한 유형의 컨테이너예요. 임시 컨테이너는 애플리케이션을 빌드하기보다는 서비스를 검사하는 데 사용해요.
출처: 문서
본문
임시 컨테이너 이해하기
파드(Pod)는 쿠버네티스 애플리케이션의 기본 구성 요소예요. 파드는 일회용이고 교체 가능하도록 의도됐기 때문에, 일단 생성된 파드에는 컨테이너를 추가할 수 없어요. 대신 보통 deployment를 사용해 통제된 방식으로 파드를 삭제하고 교체해요.
하지만 때로는 기존 파드의 상태를 검사해야 할 필요가 있어요. 예를 들어 재현하기 어려운 버그를 해결할 때요. 이런 경우 기존 파드에서 임시 컨테이너를 실행해 그 상태를 검사하고 임의의 명령을 실행할 수 있어요.
임시 컨테이너란 무엇인가?
임시 컨테이너는 리소스나 실행에 대한 보장이 없고 자동으로 재시작되지도 않는다는 점에서 다른 컨테이너와 달라요. 그래서 애플리케이션을 빌드하는 데는 적합하지 않아요. 임시 컨테이너는 일반 컨테이너와 같은 ContainerSpec으로 설명되지만, 많은 필드가 임시 컨테이너에는 호환되지 않고 허용되지 않아요.
- 임시 컨테이너는 포트를 가질 수 없으므로
ports,livenessProbe,readinessProbe같은 필드는 허용되지 않아요. - 파드 리소스 할당은 불변이므로
resources설정은 허용되지 않아요. - 허용되는 필드의 전체 목록은 EphemeralContainer 참조 문서를 참고하세요.
임시 컨테이너는 pod.spec에 직접 추가하는 대신 API의 특수한 ephemeralcontainers 핸들러를 사용해 생성되므로, kubectl edit으로 임시 컨테이너를 추가하는 것은 불가능해요.
일반 컨테이너처럼, 파드에 추가한 후에는 임시 컨테이너를 변경하거나 제거할 수 없어요.
참고:
임시 컨테이너의 용도
임시 컨테이너는 컨테이너가 충돌했거나 컨테이너 이미지에 디버깅 유틸리티가 없어서 kubectl exec만으로는 부족할 때 대화형 문제 해결에 유용해요.
특히 distroless 이미지는 공격 표면과 버그·취약점에 대한 노출을 줄여 주는 최소한의 컨테이너 이미지를 배포할 수 있게 해줘요. distroless 이미지에는 셸이나 디버깅 유틸리티가 없기 때문에, kubectl exec만으로는 distroless 이미지를 문제 해결하기 어려워요.
임시 컨테이너를 사용할 때는 프로세스 네임스페이스 공유를 활성화하면 다른 컨테이너의 프로세스를 볼 수 있어 유용해요.