임시(Ephemeral) 컨테이너
쿠버네티스 공식문서를 확인하며 임시 컨테이너에에 대해서 기억해야 하는 부분을 기록한다.
- 임시 컨테이너는 트러블슈팅과 같은 사용자가 시작한 작업을 완료하기 위해 기존 파드에서 임시적으로 실행된다.
- 임시 컨테이너는 애플리케이션을 빌드하는 경우보다는 서비스 점검과 같은 경우에 더 적합하다.
- 파드는 쿠버네티스 애플리케이션의 기본 구성 요소이며 일회용이다. 언제든 재활용이 아니라 교체 가능한 것으로 의도되었기 때문에, 사용자는 파드가 한번 생성되면 컨테이너를 추가할 수 없다.
- 컨테이너를 추가하는 대신 일반적으로 디플로이먼트를 사용해서 제어하는 방식으로 파드를 삭제하고 교체한다.
임시 컨테이너란
- 임시 컨테이너는 리소스 또는 실행에 대한 보증이 없다는 점에서 다른 컨테이너와 다르며, 결코 자동으로 재시작되지 않으며 언제든 실행이 종료될 수 있는 애플리케이션을 만드는데는 적합하지 않다.
- 임시 컨테이너는 일반 컨테이너와 동일한
ContainerSpec
을 사용해서 명시하지만, 많은 필드가 임시 컨테이너에는 허용되지 않는다.- 임시 컨테이너는 포트를 가지지 않을 수 있으므로
ports
,livenessProbe
,readinessProbe
와 같은 필드는 허용되지 않는다. - 파드에 할당된 리소스는 변경할 수 없으므로,
resources
설정이 허용되지 않는다.
- 임시 컨테이너는 포트를 가지지 않을 수 있으므로
- 임시 컨테이너는
pod.spec
에 직접 추가하는 대신 API에서 특별한ephemeralcontainers
핸들러를 사용해서 만들어지기 때문에kubectl edit
을 사용해서 임시 컨테이너를 추가할 수 없다. - 일반 컨테이너와 동일하게 사용자는 임시 컨테이너를 파드에 추가한 이후에 변경하거나 제거할 수 없다.
임시 컨테이너의 사용
- 임시 컨테이너는 컨테이너가 충돌되거나 또는 컨테이너 이미지에 디버깅 도구가 포함되지 않은 이유로
kubectl exec
이 불충분할 때 대화형 문제 해결에 유용하다. - 특히, distroless 이미지를 사용하면 공격 표면(attack surface)과 버그 및 취약점의 노출을 줄이는 최소한의 컨테이너 이미지를 배포할 수 있다.
- distroless 이미지는 셸 또는 어떤 디버깅 도구를 포함하지 않기 때문에,
kubectl exec
만으로는 distroless 이미지의 문제 해결이 어렵다.
[정리]
임시 컨테이너는 트러블슈팅과 같은 작업을 완료하기 위해서 기존에 만들어진 파드에 임시적으로 실행된다. 자동으로 재시작 되지 않기 때문에 애플리케이션을 만드는데는 적합하지 않다. 컨테이너 이미지에 디버깅 도구가 포함되지 않은 경우나 서비스 점검과 같은 경우에 사용하는 것이 더 적합하다.
참고 자료
'Infrastructure > Kubernetes' 카테고리의 다른 글
[Pod] 다운워드(Downward) API (0) | 2022.10.18 |
---|---|
[Pod] 사용자 네임스페이스 (0) | 2022.10.18 |
[Pod] 중단(Disruption) (0) | 2022.10.18 |
[Pod] 초기화 컨테이너 (0) | 2022.10.18 |
[Pod] 라이프사이클 (0) | 2022.10.18 |