이번 포스트에서는 Kubernetes 클러스터를 설정하기 전에 꼭 알아야 할 몇 가지 기본 개념을 설명하겠습니다.
노드(Node)란?
노드는 Kubernetes가 설치된 물리적 또는 가상 머신을 의미합니다. 노드는 Kubernetes가 컨테이너를 실행하는 곳입니다. 과거에는 노드를 '미니언(minions)'이라고 불렀기 때문에, 이러한 용어들이 교차하여 사용되는 것을 들을 수 있습니다.
왜 여러 노드가 필요한가요?
애플리케이션이 실행 중인 노드가 고장나면 당연히 애플리케이션이 중단됩니다. 따라서 여러 노드를 사용하는 것이 중요합니다. 클러스터는 여러 노드가 그룹으로 묶인 것입니다. 이렇게 하면 한 노드가 고장나더라도 다른 노드에서 애플리케이션에 접근할 수 있습니다. 또한 여러 노드를 사용하면 부하를 분산시킬 수 있습니다.
마스터(Master)란?

마스터는 Kubernetes가 설치되고 마스터로 구성된 또 다른 노드입니다. 마스터는 클러스터의 노드를 감시하며, 워커 노드에서 컨테이너의 실제 오케스트레이션을 담당합니다.
Kubernetes의 주요 구성 요소
시스템에 Kubernetes를 설치하면 다음 구성 요소들이 설치됩니다:
- API 서버: Kubernetes의 프론트 엔드 역할을 합니다. 사용자 관리 장치와 명령줄 인터페이스는 모두 API 서버와 통신하여 Kubernetes 클러스터와 상호작용합니다.
- etcd 서비스: 분산형 신뢰성 높은 키-값 저장소로, 클러스터를 관리하는 데 사용되는 모든 데이터를 저장합니다. 여러 노드와 여러 마스터가 있는 클러스터에서 etcd는 클러스터의 모든 노드에 정보를 분산 방식으로 저장합니다.
- 스케줄러: 여러 노드에 작업이나 컨테이너를 분산하는 역할을 합니다. 새로 생성된 컨테이너를 찾아 노드에 할당합니다.
- 컨트롤러: 오케스트레이션의 두뇌입니다. 노드, 컨테이너 또는 엔드포인트가 다운되었을 때 이를 감지하고 대응합니다. 컨트롤러는 이러한 경우 새로운 컨테이너를 띄우는 결정을 내립니다.
- 컨테이너 런타임: 컨테이너를 실행하는 데 사용되는 기본 소프트웨어입니다. 우리의 경우 Docker가 해당하지만, 다른 옵션도 있습니다.
- Kubelet 서비스: 클러스터의 각 노드에서 실행되는 에이전트입니다. 이 에이전트는 노드에서 컨테이너가 예상대로 실행되도록 보장하는 역할을 합니다.
마스터와 작업자 노드의 구성

마스터와 작업자 노드를 구성하는 구성 요소들은 서로 다른 유형의 서버에 분산됩니다. 한 서버가 마스터가 되고 다른 서버가 작업자가 되는 과정은 다음과 같습니다:
- 작업자 노드(또는 미니언): 컨테이너가 호스팅되는 곳입니다. 예를 들어, Docker 컨테이너가 여기서 실행됩니다. 시스템에서 Docker 컨테이너를 실행하려면 컨테이너 런타임이 설치되어야 합니다.
- 마스터 서버: kube-apiserver가 있으며, 이것이 해당 서버를 마스터로 만듭니다. 작업자 노드에는 kubelet 에이전트가 있어서 마스터와 상호작용하여 작업자 노드의 상태 정보를 제공하고 마스터가 요청한 작업을 수행합니다. 수집된 모든 정보는 마스터의 키-값 저장소에 저장됩니다. 키-값 저장소는 인기 있는 etcd 프레임워크를 기반으로 합니다. 마스터는 또한 컨트롤 매니저와 스케줄러를 가지고 있습니다.
kubectl 명령줄 도구
마지막으로, Kubernetes 클러스터를 관리하는 데 사용되는 명령줄 유틸리티인 kubectl(큐브 컨트롤)에 대해 알아보겠습니다. kubectl 도구는 다음과 같은 작업에 사용됩니다:
- 애플리케이션 배포:
kubectl run
명령어를 사용하여 클러스터에 애플리케이션을 배포합니다.
- 클러스터 정보 확인:
kubectl cluster-info
명령어를 사용하여 클러스터에 대한 정보를 봅니다.
- 노드 상태 확인:
kubectl get nodes
명령어를 사용하여 클러스터에 속한 모든 노드를 나열합니다.