k8s 수업 중에 Pod라는 개념을 맞딱들였다.
쿠버네티스 포드는 Linux® 컨테이너를 하나 이상 모아 놓은 것으로, 쿠버네티스 애플리케이션의 최소 단위입니다. 강하게 결합된 여러 개의 컨테이너로 구성된 포드도 있고(고급 활용 사례), 단일 컨테이너로만 이루어진 포드도 있습니다(더 일반적인 활용 사례).
출처:https://www.redhat.com/ko/topics/containers/what-is-kubernetes-pod
k8s 또한 컨테이너를 기반으로하는 orchestration으로 알고 있는데, 굳이 pod라는 명칭을 쓰는 이유가 궁금해졌다.
우선, container에 대한 개념을 다시 찾아보았다.
컨테이너는 실행에 필요한 모든 파일을 포함한 전체 실행(runtime) 환경에서 애플리케이션을 패키징하고 격리할 수 있는 기술입니다. 이를 통해 전체 기능을 유지하면서 컨테이너화된 애플리케이션을 환경(개발, 테스트, 프로덕션 환경 등) 간에 쉽게 이동할 수 있습니다.
출처: https://www.redhat.com/ko/topics/containers
또한, Docker에서 관리하는 가장 작은 컴퓨팅 단위가 container이다.
그렇다면, k8s는 왜 container가 아닌 pod를 가장 작은 컴퓨팅 단위로 관리하고 있는 것일까?
| 특징 | Pod | Container |
|---|---|---|
| 정의 | k8s에서 컨테이너를 관리하기 위한 기본 단위 | 독립된 어플리케이션 실행 환경으로, 필요한 라이브러리와 종속성을 포함 |
| 구성 요소 | 하나 이상의 컨테이너를 포함할 수 있음 | 어플리케이션 코드, 라이브러리, 의존성을 포함한 독립적인 실행 단위 |
| 네트워크 | pod 내 모든 컨테이너는 같은 네트워크 네임스페이스(IP 주소)를 공유 | 각 컨테이너는 고유한 네트워크 네임스페이스를 가짐 |
| 스토리지 | 파드 내의 컨테이너들은 동일한 볼륨을 공유할 수 있음 | 기본적으로 독립된 파일 시스템을 사용하지만, 볼륨을 통해 공유 가능 |
| 생명 주기 | k8s에 의해 관리되며, pod 내의 모든 컨테이너는 함께 시작되고 종료됨 | 개별적으로 시작, 중지, 삭제될 수 있음 |
| 사용 사례 | 밀접하게 연관된 여러 컨테이너를 그룹화하여 관리하는 데 사용 | 단일 어플리케이션 또는 서비스의 실행 환경으로 사용 |
| 예시 | 웹 서버와 그 로그를 처리하는 사이드카 컨테이너를 하나의 파드로 구성 | 웹 서버를 단일 컨테이너로 실행 |
컨테이너는 Docker의 기술이고, k8s가 그 Docker 위에서 실행되는 ochestration이라는 착각이 있어서 처음에 왜 별개로 관리하나 했다.. 둘은 종속관계의 툴이 아니라는걸 명심하자