쿠버네티스는 다량의 컨테이너를 하나의 물리적인 서버에 배치하여 이를 사용하듯 관리해주는 역할을 한다.
쿠버네티스의 영역은 크게 노드를 하나로 묶는 클러스터를 관리하는 Control Plane 영역과 흩어져 있는 각 노드를 관리하는 노드 영역으로 나눌 수 있다.
K8s라고도 한다.
K8s 클러스터가 갖춰야 할 특성은 다음과 같다.
작동 중인 K8s 배포를 클러스터라고 한다. K8s 클러스터는 Control Plane과 Node 2개 부분으로 시각화할 수 있다.
각 노드 자체는 Linux환경이며 물리 또는 가상 머신일 수 있다.
Control Plane는 클러스터에 관한 결정을 내리고 클러스터 이벤트를 감지하며 반응한다. Control Plane은 클러스터 내 어떠한 머신에서라도 동작할 수 있다.
kube-apiserver: K8s의 모든 컴포넌트의 통신을 담당한다.
etcd: 모든 클러스터 데이터를 담는 K8s 뒷단의 저장소로 사용되는 키-밸류 저장소이다.
kube-scheduler: 노드가 배정되지 않은 새로 생성된 파드를 감지하고, 실행할 노드를 선택하는 컴포넌트이다.
kube-controller-manager: 컨트롤러를 구동하는 컴포넌트이다. 종류로는 노드 컨트롤러, 레플리케이션 컨트롤러, 엔드포인트 컨트롤러, 서비드 어카운트, 토큰 컨트롤러 등이 있다.
K8s클러스터는 컨테이너화된 애플리케이션을 실행하는 Node라는 워커 머신의 집합이다.
워커 노드는 애플리케이션의 구성요소인 Pod를 호스트한다.
minikube start --nodes=3
위 명령어를 통해 여러개의 노드를 구성할 수 있다.
여러 개의 노드를 만들면, 첫 번째는 master, 나머지 두 개의 노드는 worker 노드로 구성된다.
여러 개의 노드를 구성할 경우, 워커 노드에는 실제로 실행되는 애플리케이션을 배치하며, 마스터 노드는 클러스터 관리 그 자체에 집중하게 한다.
kubelet: 클러스터의 각 노드에서 실행되는 에이전트이다. kubelet은 파드에서 컨테이너가 확실하게 동작하도록 관리한다.
kube-proxy: 클러스터의 각 노드에서 실행되는 네트워크 프록시로, K8s 서비스 개념의 구현부이다. 또한 노드의 네트워크 규칙을 유지, 관리한다. 이 네트워크 규칙이 내부 네트워크 세션이나 클러스터 바깥에서 Pod로 네트워크 통신을 할 수 있도록 해준다.