그동안 참 많이도 들었던 쿠버네티스, 이제서야 공부를 시작하게 되었다. 쿠버네티스는 단어나 개념 정리할 것들이 많은 편이다. 가장 큰 개념부터 하나하나씩 알아가보도록 한다.
쿠버네티스란?
쿠버네티스는 컨테이너 오케스트레이션 도구로 여러대의 서버에 컨테이너화된 Application을 배포 / 관리 / 확장할 수 있는 기능을 제공한다.
쿠버네티스는 구글이 개발한 borg라는 도구에서 발전된 형태로, 2015년 출시 이후 CNCF 재단에 오픈소스로써 제공했다고 한다.
쿠버네티스와 도커?
컨테이너를 관리하는 도구라는 점에서 쿠버네티스와 도커는 유사하다고 볼 수 있다. 다만 서로 주요 목적과 역할이 다를 뿐이라는 점을 확인해야한다.
도커는 단일 호스트 환경에서 컨테이너를 빠르고 간편하게 실행하는데에 주된 목적이 있다면, 쿠버네티스는 대규모 환경에서의 컨테이너 오케스트레이션과 서비스 관리에 목적이 있다고 볼 수 있다.
쿠버네티스의 아키텍쳐는 아래 이미지와 같다.
먼저, 기본 컴포넌트인 클러스터와 파드부터 정리해보고자 한다.
클러스터
공식 Kubernetes 페이지에서는 아래와 같이 정의한다.
쿠버네티스 클러스터는 컨테이너화된 애플리케이션을 실행하는 노드라고 하는 워커 머신의 집합. 모든 클러스터는 최소 한 개의 워커 노드를 가진다.
좀 더 알기 쉬운 레벨로 이야기하면, 클러스터는 노드들의 연결되어 있는 집합체로, 여기서 노드는 컨테이너화된 Application을 실행하는 머신으로 정의된다.
노드
이러한 노드는 클러스터 내에서 마스터 노드와 워커 노드로 나뉜다.
마스터 노드는 컨트롤 플레인이라고도 불리며, 클러스터의 상태를 관리하고, 쿠버네티스 명령어를 처리하는 역할을 담당한다. 보통 1~3개 정도로 홀수개의 갯수를 유지한다고 하며 API 서버, 스케쥴러, 컨트롤 매니저와 같은 컴포넌트로 구성되어있다.
마스터 노드의 컴포넌트는 아래 표와 같다.
컴포넌트 | 설명 |
kube-apiserver | - 외부와 통신하는 프로세스 - kubectl로 부터 명령을 전달받아 수행 |
kube-controller-manager | 컨트롤러를 통합 관리 및 실행 |
kube-scheduler | 파드를 워커 노드에 할당 |
etcd | 클러스터 관련 정보 전반을 관리하는 키-값 기반 데이터베이스 |
그리고 워커 노드는 컨테이너화 된 Application이 실제로 실행되는 노드로, kubelet이 워커 노드에서 컨테이너의 생명주기를 관리하고, 컨테이너 런타임이 컨테이너를 생성하고 실행한다.
워커 노드의 컴포넌트는 아래 표와 같다.
컴포넌트 | 설명 |
kubelet | - 각 워커 노드에서 실행되는 기본 Agent - 마스터 노드에 있는 kube-scheduler와 연동하여 워커 노드에 파드를 배치 / 실행 - 실행 중인 파드의 상태를 정기적으로 모니터링 & kube-scheduler에 통지 |
kube-proxy | - 각 노드에서 실행되는 네트워크 프록시 - 내부 네트워크와 클러스터 외부 간의 통신을 담당 |
CRI(Container Runtime Interface) | - kubelet을 통해 컨테이너 런타임과 통신하기 위한 인터페이스 - docker, containerd, cri-o를 지원한다. |
각 컴포넌트들은 이후 각각 개별로 더 알아볼 예정이다.
파드
쿠버네티스에서 가장 작은 배포 단위의 개념으로, 하나 이상의 컨테이너와 볼륨을 함께 묶은 개념이다.
이 이미지가 파드를 설명하기에 적절하여 가져왔다. 하나의 노드 내에서 다수의 파드가 생성되어있는 것을 볼 수 있다.
이미지에서 볼 수 있듯이 하나의 파드 내의 컨테이너들은 IP와 포트를 공유한다. 그리고 하나의 파드 내의 컨테이너들은 디스크 볼륨을 공유할 수 있다.
여기서 쿠버네티스의 파드는 도커에서의 컨테이너와는 조금 다른 것을 알 수 있다. 도커에서의 컨테이너들은 독립적으로 실행되어, 서로 간의 네트워크와 스토리지를 직접적으로 공유할 수 없었다. 하지만 쿠버네티스의 파드에서는 파드 내의 컨테이너들이 동일한 호스트에서 실행되어 네트워크와 스토리지의 공유가 가능한 것이다.
이렇게 클러스터와 노드, 파드까지 알아보았다.
다음으로는 쿠버네티스의 워크로드 리소스를 알아보도록 한다.