Search

Pause Container

Kubernetes에서 Pod를 생성할 때 가장 먼저 생성되는 컨테이너입니다.
이 컨테이너는 실제로는 거의 아무 작업도 하지 않으며, 그저 "pause" 상태로 대기합니다.
pause라는 이름은 이 컨테이너가 아주 가벼운 컨테이너로, 단순히 잠시 멈춰 있는 상태를 의미합니다.
Pause container는 Kubernetes에서 각 Pod 내에서 생성되고 관리되는 특별한 내부 컨테이너입니다. 주요 목적은 같은 Pod 내의 모든 다른 컨테이너들을 위한 네트워크 네임스페이스와 IPC(Inter-Process Communication) 네임스페이스의 플레이스홀더 역할을 하는 것입니다.

동작방식

1.
Pod 생성 시
Kubernetes가 Pod를 생성할 때, 가장 먼저 Pause Container가 생성됩니다.
2.
네트워크 네임스페이스 생성
이 Pause Container는 네트워크 네임스페이스를 설정하고, 다른 모든 애플리케이션 컨테이너가 이 네트워크 네임스페이스를 공유하게 됩니다.
3.
애플리케이션 컨테이너 실행
이후, Pod 내에서 실행되는 다른 모든 애플리케이션 컨테이너들은 이 Pause Container의 네트워크 네임스페이스를 사용하게 되어 동일한 IP와 네트워크 환경을 공유하게 됩니다.
4.
Pause 바이너리 실행
Pause 컨테이너는 "Pause"라는 바이너리를 실행합니다. 이 프로그램은 pause()라는 시스템 호출을 사용합니다
1.
Binary : 실행 가능한 형식의 데이터 파일 ( ex. EXE , ELF )
2.
Signal : 비동기적인 이벤트를 발생시키는 소프트웨어 인터럽트로 특정 프로세스의 동작을 멈추거나, 다른 동작을 하게 하는 신호이다.
5.
대기 상태
pause() 시스템 호출은 프로그램이 특정 신호(Signal)를 받을 때까지 아무 작업도 하지 않고 대기 상태에 있게 만듭니다.

사용하는 이유

1. Network 네임스페이스 공유

Pause 컨테이너는 Pod 내의 모든 컨테이너가 동일한 네트워크 네임스페이스를 공유하도록 합니다. 
Pod 내의 모든 컨테이너가 동일한 IP 주소를 사용하고, 서로 간에 네트워크 통신을 쉽게 할 수 있습니다.

2. IPC 네임스페이스 공유

IPC 네임스페이스를 공유함으로써, Pod 내의 컨테이너들이 세마포어, 메시지 큐, 공유 메모리 등을 통해 서로 통신할 수 있습니다.

3. UTS (Unix Time-sharing System) 네임스페이스 공유

Pause 컨테이너의 UTS 네임스페이스를 Pod 내의 다른 컨테이너들과 공유함으로써 모든 컨테이너가 동일한 호스트 이름을 가지게 됩니다.
Kubernetes Pod는 여러 컨테이너가 하나의 네트워크와 스토리지를 공유하는 개념인데, 이때 각 컨테이너들이 공유할 네임스페이스를 누군가가 "소유"하고 있어야 합니다. Pause container가 바로 이 역할을 담당하여, 다른 컨테이너들이 재시작되어도 네트워크 설정 등이 유지되도록 해줍니다. 즉, Pause Container는 Kubernetes의 Pod 아키텍처를 구현하기 위한 핵심 인프라 컨테이너입니다.