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