클러스터
클러스터(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