Server/Kubernetes

쿠버네티스(Kubernetes) Pod란?

범데이 2022. 12. 11. 21:38
728x90

1. 포드(Pod)란?

쿠버네티스 포드는 Linux 컨테이너를 하나 이상 모아 놓은 것으로, 쿠버네티스 애플리케이션의 최소 단위이다.

강하게 결합된 여러 개의 컨테이너로 구성된 포드도 있고(고급 활용 사례), 단일 컨테이너로만 이루어진 포드도 있다.(더 일반적인 활용 사례). 컨테이너를 쿠버네티스 포드로 그룹화하는 이유는 아래의 설명과 같이 리소스를 더 지능적으로 공유하기 위해서이다.

 

쿠버네티스 시스템에서는 같은 포드에 속한 컨테이너끼리 동일한 컴퓨팅 리소스를 공유한다. 이러한 컴퓨팅 리소스를 쿠버네티스에 풀링하여 클러스터를 만들고, 이를 바탕으로 더 강력하고 지능적으로 분산된 애플리케이션 실행 시스템을 제공할 수 있다. 쿠버네티스 포드의 장점을 이해하는 데 가장 중요한 요소가 아래에 정리되어 있다.

 

 

하드웨어 유닛

노드: 쿠버네티스에서 최소 단위의 컴퓨팅 하드웨어이며, 하나의 개별 머신으로 생각하면 된다.

클러스터: 지능적인 리소스 공유와 균형 배분을 위해 여러 노드를 묶은 그룹이다.

 

 

소프트웨어 유닛

Linux 컨테이너: 하나 이상의 프로세스 모음이며, 실행에 필요한 파일도 모두 들어 있어 머신간 이식이 가능하다.

쿠버네티스 포드: 하나 이상의 Linux 컨테이너 모음이며, 클러스터 관리를 통한 리소스 공유의 장점을 극대화하기 위해 패키지로 묶여 있다.

 

 

기본적으로 쿠버네티스에서는 개별 하드웨어를 노드라고 부른다. 이 노드가 여러 개 모여 클러스터를 이루며, 이로써 필요에 따라 컴퓨팅 성능을 분산시킬 수 있다. 이 클러스터에서 실행되는 것이 포드이다. 강력하게 결합된 포드 속 컨테이너는 같은 클러스터에서 함께 실행된다.

 

 

 

2.파드의 특징

(1) 기본적으로 하나의 파드에는 하나 이상의 컨테이너가 포함된다. 

기본적으로 하나의 파드에는 하나 이상의 컨테이너가 포함되나, 필요에 따라 하나의 파드에 여러 컨테이너를 포함시킬 수 있다.

 

(2) 파드 안의 컨테이너는 IP와 Port를 공유한다.

파드는 노드 IP와 별개로 고유 IP를 할당 받으며, 파드 안의 컨테이너들은 그 IP를 공유한다.

같은 파드 안의 애플리케이션들은 localhost로 통신하며 같은 네트워크에 존재한다고 볼 수 있다.

예를 들어, A컨테이너가 8080, B컨테이너가 7001로 배포되었다면, B가 A를 호출할 때 localhost:8080 으로 호출하면 되고, 반대는 localhost:7001로 호출하면 된다.

따라서, 파드 안 컨테이너에서 실행 중인 프로세스가 같은 포트 번호를 사용하지 않도록 주의해야 한다.

 

(3) Pod 내에 배포된 컨테이너 간에는 디스크 볼륨을 공유할 수 있다.

일반적인 컨테이너 환경은 파일 시스템이 분리되기 때문에, 애플리케이션이 배포된 컨테이너의 파일 시스템 공유가 불가능하지만, 쿠버네티스의 경우 하나의 파드 내에서는 컨테이너들끼리 볼륨을 공유할 수 있기 때문에, 다른 컨테이너의 파일을 읽을 수 있다.

 

(4) 파드는 클러스터에서 배포의 최소 단위이다.

파드는 클러스터에서 배포의 최소 단위이며, 특정 네임스페이스(Namespace) 안에서 실행된다.

 

 

 

3. 쿠버네티스에서 포드를 사용하는 이유

포트와 클러스터의 관계 때문에 쿠버네티스는 직접 컨테이너를 실행하지 않는다. 그 대신 포드를 실행하면서 포드 속 각 컨테이너가 동일한 리소스 및 로컬 네트워크를 공유하게 한다. 이런 식으로 컨테이너를 그룹화하면 실제로는 어느 정도 분리된 상태더라도 마치 동일한 물리 하드웨어를 공유하는 것처럼 컨테이너끼리 서로 통실할 수 있게 된다.

 

이렇게 컨테이너를 포드로 구성하는 것이 바로 쿠버네티스의 유명한 기능, 바로 복제의 토대가 된다. 컨테이너를 모아 포드를 만들면 쿠버네티스는 복제 컨트롤러를 사용하여 필요에 따라 애플리케이션을 수평으로 스케일* 할 수 있다. 다시 말해, 어떤 포드 하나가 과부하 상태가 되면 쿠버네티스는 자동으로 이를 복제한 다음 클러스터에 배포할 수 있다. 쿠버네티스 포드는 과부하 상태에서의 정상 작동을 지원할 뿐만 아니라 지속적으로 복제되면서 시스템의 내장애성을 내공한다.

 

*스케일링: 일반적으로 한개의 파드는 애플리케이션의 단일 인스턴스를 실행한다.
더 많은 인스턴스를 실행하여 더 많은 리소스를 제공하기 위해 애플리케이션을 수평적으로 확장(Scale Out)하려면, 각 인스턴스에 하나씩, 여러개 파드를 사용해야 한다. 즉, Scale Out을 할때 단일 파드 안에서 여러 개의 애플리케이션을 실행하는 것이 아니라, 구별된 파드 자체를 쿠버네티스 클러스터 또는 노드에서 추가시키는 방식이다.
만약 사용자가 수용량(Pod의 추가) 이상으로 증가한다면 노드를 추가하므로서 물리적인 수용량을 증가시킨다.

 

 

 


#References

https://akasai.space/kubernetes/about_pod/

https://www.redhat.com/ko/topics/containers/what-is-kubernetes-pod

반응형