클러스터

클러스터(Cluster)는 컨테이너가 실행되는 인프라입니다. 컨테이너는 애플리케이션의 배포 단위이자 실행 프로세스입니다. 클러스터는 컨테이너 실행에 필요한 컴퓨팅 자원(CPU, Memory, 스토리지, 네트워크)을 제공합니다.

클러스터는 노드(물리 머신 또는 가상 머신)로 구성됩니다. 하나 이상의 노드가 네트워크로 연결되어 있습니다. 클러스터는 분산 처리를 위해 고안된 아키텍처입니다. 컨테이너를 클러스터에 배포하면 적절한 노드에서 실행됩니다. 이러한 과정을 스케줄링(Scheduling)이라 하는데, 쿠버네티스가 담당합니다. 쿠버네티스는 클러스터에서 컨테이너 스케줄링과 관리를 담당합니다.

클러스터는 노드의 추가를 통해 자원을 확장합니다. 더 많은 자원이 필요하면 그만큼 노드를 추가하고, 쿠버네티스는 확장된 노드에 컨테이너를 배치하고 조정합니다.

컨테이너 간 네트워크와 데이터 저장을 위한 스토리지도 클러스터의 구성 요소입니다.

쿠버네티스(Kubernetes)

쿠버네티스는 클러스터에 컨테이너를 실행하고, 수명 주기를 관리하는 컨테이너 오케스트레이션(Container Orchestration) 엔진입니다. 구글(Google)에서 오픈소스로 공개하고, 지금은 클라우드 네이티브 컴퓨팅 재단(Cloud Native Computing Foundation, CNCF)의 멤버 프로젝트로 관리됩니다.

쿠버네티스는 클러스터에 설치됩니다. 클러스터 인프라(노드, 네트워크, 스토리지)를 기반으로 컨테이너에 필요한 자원을 관리하고 제공하는 역할도 담당합니다.

노드(Node)

노드는 클러스터를 구성하는 하나 이상의 컴퓨터(Compute) 머신입니다. 물리 머신, 가상 머신 모두 구성 가능합니다. 노드는 CPU, Memory, Disk를 가지며, 서로 네트워크로 연결되어 있습니다. 노드는 쿠버네티스에서 스케줄링을 위해 관리됩니다.

노드는 마스터(Master) 노드와 워커(Worker) 노드로 구분됩니다. 마스터 노드는 쿠버네티스의 제어부에 해당하는 컴포넌트가 설치됩니다. 마스터 노드는 워커노드와 통신하여 클러스터를 관리합니다.

워커 노드는 애플리케이션 컨테이너가 배포되는 노드를 말합니다. 애플리케이션의 수와 용량에 따라 워커 노드 수가 증가합니다. 워커 노드에 컨테이너를 배포하는 역할을 마스터 노드의 스케줄러(Scheduler)가 담당합니다.

컨테이너 네트워크(Container Network)

하나 이상의 노드에서 실행되는 컨테이너는 서로 간 통신이 필요한데, 컨테이너 네트워크가 이를 담당합니다.

컨테이너 네트워크는 쿠버네티스 구성 요소로 설치됩니다. 쿠버네티스는 자체 컨테이너 네트워크를 제공하지 않습니다. 대신 외부 공급자가 플러그인 형태로 제공할 수 있도록 표준 인터페이스를 제공하는 데 이를 CNI(Container Network Interface)라 합니다. 대표적인 오픈소스 CNI 플러그인에는 Flannel, WeaveNet, Calico 등이 있습니다.

칵테일 클라우드는 클러스터의 CNI 플러그인을 선택하여 구성할 수 있는 옵션을 제공합니다.

인그레스 컨트롤러(Ingress Controller)

클러스터 외부에서 컨테이너로 접속은 인그레스 컨트롤러가 담당합니다. 인그레스 컨트롤러는 외부 트래픽을 호스트 명과 경로로 구분하여 컨테이너로 라우팅(Routing) 합니다. 이 라우팅 규칙은 애플리케이션 별로 설정하여 인그레스 컨트롤러에 적용됩니다.

인그레스 컨트롤러는 쿠버네티스 구성요소입니다. 주로 사용 되는 인그레스 컨트롤러로는 오픈소스인 NGINX 컨트롤러로 쿠버네티스에서 기본으로 제공 합니다. 그 외 제 3의 공급자가 제공하는 인그레스 컨트롤러를 사용할 수 있습니다.

칵테일 클라우드는 인그레스 컨트롤러를 선택하여 구성할 수 있는 옵션을 제공합니다. 애플리케이션 별로 전용 인그레스 컨트롤러를 두어 대용량 트래픽에 대응하도록 구성할 수 있고, 제 3의 공급자 인그레스 컨트롤러 중 적합한 것을 선택하여 구성할 수도 있습니다.

스토리지(Storage)

클러스터 스토리지는 컨테이너 데이터 저장을 위해 사용되는 영구 볼륨(Persistence Volume)를 제공합니다.

컨테이너는 클러스터 노드에 배포되고, 노드 장애나 자원 부족 시 다른 노드로 재배치됩니다. 따라서 노드에 컨테이너 데이터를 저장하면 재배치 시 문제가 됩니다. 이 경우 데이터를 안전하게 저장하고 관리할 수 있는 별도의 볼륨이 필요합니다. 이를 영구 볼륨이라 합니다.

쿠버네티스는 스토리지 클래스(Storage Class)를 통해 영구 볼륨을 생성하고 컨테이너에 제공합니다. 클러스터 구성 시 스토리지에 맞는 스토리지 클래스를 설치하여야 합니다.

칵테일 클라우드는 스토리지 클래스를 애드온으로 제공합니다. 사용자가 적합한 스토리지 클래스를 선택하면 자동 설치와 업그레이드를 할 수 있습니다.

애드온(Addon)

네트워크, 스토리지 외에 쿠버네티스를 확장하는 컴포넌트가 있습니다. 칵테일 클라우드에서는 이 확장 컴포넌트를 애드온(Addon)이라 합니다.

애드온은 컨테이너 관리 기능 외에 쿠버네티스 클러스터에 확장 기능을 제공합니다. 대표적으로 모니터링과 서비스 매시(Service Mesh)를 예로 들 수 있습니다.

모니터링은 쿠버네티스에서 매트릭스(Metrics) API로 클러스터와 컨테이너의 상태, 자원, 네트워크 사용량 등을 제공합니다. 이 API를 통해 뷰(View)를 구성하여 모니터링을 할 수 있지만, 별도 개발과 제3자가 제공하는 솔루션을 사용하여야 합니다. 쿠버네티스 에코시스템 프로젝트의 하나인 프로메테우스(Prometheus)가 그 예입니다.

서비스 매시도 마찬가지입니다. 구글이 주도하는 오픈소스인 ISTIO가 많이 사용됩니다. 서비스 매시는 마이크로서비스(Microservice)구축 시 네트워크를 담당합니다. 마이크로 서비스 간 라우팅, 트래픽 제어, 보안 등 네트워크 부분을 별도로 관리하여, 마이크로 서비스 개발 운영에 시간과 노력을 절감할 수 있습니다.

칵테일 클라우드는 모니터링, 서비스 매시 외에 NVDIA GPU 플러그인, 다중 컨테이너 네트워크 구성 등 쿠버네티스 확장 컴포넌트를 제공합니다. 설치부터 업그레이드까지 자동으로 관리되며, 필요한 애드온을 선택하여 사용할 수 있습니다.

Last updated