Kubernetes Pod는 오픈 소스 Kubernetes 컨테이너 일정 및 조정 환경에서 배포 가능한 가장 작은 컴퓨팅 단위입니다.
Pod는 함께 작동하는 하나 이상의 컨테이너 그룹입니다. Pod는 노드에 있습니다. 둘 이상의 Pod가 동일한 노드를 공유할 수 있습니다. 각 Pod 내의 컨테이너는 해당 호스트 노드의 공통 네트워킹 및 스토리지 리소스와 컨테이너 실행 방법을 결정하는 사양을 공유합니다. 포드 완두콩 꼬투리와 같이 자연에서 꼬투리처럼 기능하도록 설계되었기 때문에 예시적인 이름입니다. Pod는 많은 컨테이너를 캡슐화할 수 있지만 일반적으로 각 Pod에는 하나의 컨테이너 또는 소수의 긴밀하게 통합된 컨테이너만 있습니다.
Pod의 콘텐츠는 함께 예약되고 배치되어 애플리케이션별 논리 호스트를 모델링합니다. Kubernetes 사용자는 Pod에서 긴밀하게 통합된 애플리케이션 컨테이너를 함께 호스팅해야 합니다. 컨테이너가 없으면 이러한 애플리케이션이나 서비스는 동일한 가상 또는 물리적 시스템에서 실행되어야 합니다.
Pod의 공유 컨텍스트는 Linux 네임스페이스 또는 cgroup과 같은 격리 측면에 의해 설정됩니다. 개별 Pod의 경우 단일 애플리케이션을 추가로 격리할 수 있습니다.
운영자는 환경 변수를 사용하여 Pod, Node 및/또는 컨테이너에 대한 정보를 노출할 수 있습니다. Pod 환경 변수는 Pod 컨테이너의 애플리케이션에 필요한 리소스를 찾는 위치 또는 구성 요소를 구성하는 방법을 알려줍니다. 이 정보는 런타임에 컨테이너에 주입됩니다. 노드에는 환경 변수도 포함되지만 컨테이너에 노출되지는 않습니다. Kubernetes 환경 변수는 사용자가 정적으로 정의하거나 작성합니다.
Kubernetes 포드 관리
Kubernetes는 Open Container Initiative를 준수하는 런타임을 사용하는 Kubelet Container Runtime Interface를 나타내는 CoreOS rkt 및 CRI-O는 물론 Docker 컨테이너 런타임을 지원합니다.
사용자는 파드를 생성할 수 있지만 더 자주 Kubernetes 컨트롤러는 고가용성 또는 수평적 확장을 위해 파드 및 복제본을 만듭니다. 예를 들어 사용자가 Pod의 새 인스턴스 3개를 요청하면 Kubernetes는 3개의 Pod를 API 수준 리소스로 생성합니다. 스케줄러는 Kubernetes 사용자의 정책에 따라 각 Pod에 적합한 Node를 찾아 거기에 Pod를 배치합니다.
Pod 내의 컨테이너는 공통 IP 주소와 포트 공간을 공유합니다. localhost를 통해 서로를 찾을 수 있습니다. . 동일한 Pod에 할당된 애플리케이션은 Pod에 연결된 공유 볼륨에 액세스합니다.
Pod는 또한 컨테이너가 POSIX 공유 메모리 또는 SystemV 세마포어와 같은 다른 표준 통신을 사용하여 통신할 수 있도록 합니다. 한 Pod의 컨테이너는 다른 Pod의 컨테이너와 다른 IP 주소를 가지며 IPC 프로토콜을 사용할 수 없습니다. 그러나 Kubernetes Pod 간 통신은 서비스를 통해 쉽게 발생합니다. 예를 들어, 애플리케이션의 프론트 엔드가 한 노드의 파드에 있는 경우 백엔드는 다양한 노드에 분산된 10개의 인스턴스에서 다른 노드의 동일한 노드에 상주할 수 있으며 프런트 엔드 파드는 단순히 다음 노드에 연결됩니다. 백엔드 Pod 또는 Pod를 나타내는 서비스입니다.