더 높은 가독성과 고품질의 글을 작성하기 위해 티스토리로 이전하였습니다.
https://anggeum.tistory.com/entry/Kubernetes-Pod
파드는 하나 이상의 컨테이너로 구성된 그룹이며 쿠버네티스의 기본 빌딩 블록이다.
컨테이너는 단일 프로세스를 실행하는 것을 목적으로 설계하였다. (프로세스가 Children Process를 생성하는 것을 제외)
여러 프로세스 실행하는 Single Container의 단점
이에 각 프로세스를 자체 개별 컨테이너로 실행해야 하는 것을 권장한다.
Q. 그렇다면 컨테이너를 직접 이용하지 않고 왜 Pod라는 개념이 존재하는가?
Pod 내부에 존재하는 컨테이너가 Running 할 수 있는 동일한 환경을 제공하면서 독립성을 보존할 수 있는 Container보다 더 상위 레벨의 요구되었다.
Container Group(=Pod)를 사용하여 밀접하게 연관된 프로세스를 함께 실행하고 단일 컨테이너 안에서 모두 함께 실행되는 것처럼 동일한 환경을 제공할 수 있으면서도 이들을 격리된 상태로 유지할 수 있다.
Pod를 이용함으로서 아래와 같은 기대효과를 얻는다.
① 컨테이너가 제공하는 모든 기능을 활용하는 동시 프로세스가 함께 실행
② 이들을 격리된 상태로 유지
Pod를 통해 컨테이너가 제공하는 모든 기능을 활용하는 동시에 프로세스가 함께 실행되는 것 처럼 보이게 할 수 있다.
Pod 안에 있는 컨테이너가 특정한 리소스를 공유하기 위해 각 컨테이너가 완벽하게 격리되지 않도록 한다. 쿠버네티스는 파드 안에 있는 모든 컨테이너가 자체 네임스페이스가 아닌 동일한 리눅스 네임스페이스를 공유하도록 도커를 설정한다.
UTS namespace
system의 hostname을 namespace 별로 격리시켜 준다. Linux System Call 중 하나인 uname에서 struct에 정의된 식별자 중 nodename을 isolate하는 것이다.
IPC (Inter-process communication: 프로세스간 통신 격리)
프로세스간 서로 데이터를 주고 받는 경로를 의미한다. Linux에서 사용되는 대표적인 IPC 방식은 Signal, Socket, pipe 등이 있다. 이러한 IPC resource를 격리 시켜 제공한다.
파드안의 컨테이너가 동일한 네트워크 네임스페이스에서 실행되기에 동일한 IP 주소와 포트 공간을 공유한다.
파드는 논리적인 호스트로서 컨테이너가 아닌 환경에서의 물리적 호스트 혹은 VM과 유사하게 동작한다.
책 쿠버네티스 인 액션 (Kubernetes In Action)