개요
쿠버네티스 포드는 Linux® 컨테이너를 하나 이상 모아 놓은 것으로, 쿠버네티스 애플리케이션의 최소 단위입니다. 강하게 결합된 여러 개의 컨테이너로 구성된 포드도 있고(고급 활용 사례), 단일 컨테이너로만 이루어진 포드도 있습니다(더 일반적인 활용 사례). 컨테이너를 쿠버네티스 포드로 그룹화하는 이유는 아래의 설명과 같이 리소스를 더 지능적으로 공유하기 위해서입니다.
쿠버네티스 시스템에서는 같은 포드에 속한 컨테이너끼리 동일한 컴퓨팅 리소스를 공유합니다. 이러한 컴퓨팅 리소스를 쿠버네티스에 풀링하여 클러스터를 만들고, 이를 바탕으로 더 강력하고 지능적으로 분산된 애플리케이션 실행 시스템을 제공할 수 있습니다. 컨테이너, 포드, 노드, 클러스터 등 쿠버네티스의 구성 요소를 처음에는 이해하기가 쉽지 않을 수도 있습니다. 쿠버네티스 포드의 장점을 이해하는 데 가장 중요한 요소가 아래에 정리되어 있습니다.
하드웨어 유닛
노드: 쿠버네티스에서 최소 단위의 컴퓨팅 하드웨어이며, 하나의 개별 머신으로 생각하면 됩니다.
클러스터: 지능적인 리소스 공유와 균형 배분을 위해 여러 노드를 묶은 그룹입니다.
소프트웨어 유닛
Linux 컨테이너: 하나 이상의 프로세스 모음이며, 실행에 필요한 파일도 모두 들어 있어 머신 간 이식이 가능합니다.
쿠버네티스 포드: 하나 이상의 Linux 컨테이너 모음이며, 클러스터 관리를 통한 리소스 공유의 장점을 극대화하기 위해 패키지로 묶여 있습니다.
기본적으로 쿠버네티스에서는 개별 하드웨어를 노드라고 부릅니다. 이 노드가 여러 개 모여 클러스터를 이루며, 이로써 필요에 따라 컴퓨팅 성능을 분산시킬 수 있습니다. 이 클러스터에서 실행되는 것이 포드입니다. 강력하게 결합된 포드 속 컨테이너는 같은 클러스터에서 함께 실행됩니다.
쿠버네티스에서 포드를 사용하는 이유
포드와 클러스터의 관계 때문에 쿠버네티스는 직접 컨테이너를 실행하지 않습니다. 그 대신 포드를 실행하면서 포드 속의 각 컨테이너가 동일한 리소스 및 로컬 네트워크를 공유하게 합니다. 이런 식으로 컨테이너를 그룹화하면 실제로는 어느 정도 분리된 상태더라도 마치 동일한 물리 하드웨어를 공유하는 것처럼 컨테이너끼리 서로 통신할 수 있게 됩니다.
이렇게 컨테이너를 포드로 구성하는 것이 바로 쿠버네티스의 유명한 기능, 바로 복제의 토대가 됩니다. 컨테이너를 모아 포드를 만들면 쿠버네티스는 복제 컨트롤러를 사용하여 필요에 따라 애플리케이션을 수평으로 스케일할 수 있습니다. 다시 말해, 어떤 포드 하나가 과부하 상태가 되면 쿠버네티스는 자동으로 이를 복제한 다음 클러스터에 배포할 수 있습니다. 쿠버네티스 포드는 과부하 상태에서의 정상 작동을 지원할 뿐만 아니라 지속적으로 복제되면서 시스템의 내장애성을 제공합니다.
쿠버네티스 패턴이란?
포드와 같은 재사용 가능한 요소의 이점을 극대화하는 것이 쿠버네티스 시스템의 핵심 장점입니다. 시행착오를 거쳐 프로덕션 환경에서 최상의 쿠버네티스 활용 사례를 찾아내기까지 몇 년이 걸릴 수도 있습니다. 순식간에 배포되는 클라우드 네이티브 애플리케이션의 시대에 이를 감당할 수 있는 기업은 거의 없습니다.
그러나 쿠버네티스는 오픈 표준을 기반으로 구현되었기 때문에 얼리 어답터들의 시행착오에서 성공(및 실패)의 패턴이 나타났습니다. 많은 기업에서는 이러한 패턴을 바탕으로 만든 복제 가능한 설계를 사용해서 초기 도입에 박차를 가하고 있습니다.
저자 Bilgin Ibryam과 Roland Huß가 O’Reilly를 통해 제공하는 쿠버네티스 패턴: 클라우드 네이티브 애플리케이션 설계에 재사용 가능한 요소(Kubernetes patterns: Reusable elements for designing cloud-native applications)에서는 쿠버네티스에서 클라우드 네이티브 애플리케이션을 설계하고 구현할 때 많이 쓰는 재사용 가능 요소와 패턴, 원칙, 프랙티스를 자세히 소개합니다.