마스터노드와 워커노드
쿠버는 전체적인 제어를 담당하는 마스터 노드와 실제 동작을 담당하는 워커 노드라는 두가지 유형의 노드로 구성된다.
마스터 노드
: 지휘자라고 생각하자. 컨테이너를 악기라고 생각해보자. 지휘자는 악기를 가지지 않는다. 따라서 마스터 노드는 관리만 할 뿐 따로 컨테이너를 실행하지 않는다.워커노드
: 실제 서버에 해당하는 부분이고, 컨테이너가 실제 동작하는 서버다. (컨테이너 엔진이 설치돼야 한다.) 마스터 노드와 워커 노드로 구성된 쿠버네티스 시스템을 클러스터라고 한다.
쿠버네티스를 설치할 때 추가로 설치해야하는 프로그램이 있다 바로 etcd
이다. etcd
는 key/value 데이터베이스로 컨테이너 등의 상태를 관리하기위해 필요하다.
마스터노드와 워커노드의 구성
컨트롤 플레인(제어판)을 통해 워커 노드를 관리한다. 컨트롤 플레인은 다섯 가지의 컴포넌트로 구성된다.
kube-apiserver
: 외부와 통신하는 프로세스 , kubectl(Command line tool (kubectl))로 부터 명령을 전달 받아서 실행한다.kube-controller-manager
: 컨트롤러를 통합 관리 실행함kube-scheduler
: 파드를 워커 노드에 할당한다.cloud-controller-manager
: 클라우드 서비스와 연동해 서비스를 생성한다.etc
: 클러스터 관련 정보 전반을 관리하는 데이터베이스
Kubernetes(쿠버네티스)
에서파드
는 가장 작은 배포 단위로, 하나 이상의 컨테이너를 그룹화한 것을 가리킨다.파드는 일반적으로 동일한 호스트 시스템에서 실행되며, 서로 네트워크와 스토리지를 공유한다. 이러한 공유 리소스를 통해 파드 내의 컨테이너는 서로 통신하거나 데이터를 공유할 수 있다. 또한, 파드는 스케일링과 로드 밸런싱을 쉽게 처리할 수 있는 단위로 사용된다.
파드는 쿠버네티스에서 생성, 배포, 업데이트, 백업 및 모니터링이 가능한 기본 배포 단위다. 쿠버네티스는 파드를 관리하고 스케줄링하여 클러스터 내의 여러 노드에 분산시킨다. 각 파드는 YAML 또는 JSON 형식의 매니페스트 파일을 사용하여 정의되며, 이 파일에 파드의 스펙과 구성이 포함된다.
파드는 일반적으로 애플리케이션 컨테이너, 데이터베이스 컨테이너, 사이드카 컨테이너 등 다양한 역할의 컨테이너를 함께 실행하는 데 사용된다.
워커노드는 다음으로 구성된다.
kube-let
: let은 “agent”또는 관리자를 의미한다. 워커노드의 관리자를 뜻한다. 해당 노드에서 파드를 실행하고 관리하며 마스터 노드와 통신하여 클러스터를 관리한다.kupe-proxy
: 네트워크 통신의 라우팅 매커니즘
쿠버네티스의 핵심 : 항상 바람직한 상태를 유지한다.
쿠버네티스에서 컨테이너를 생성하고 삭제할 수 있지만 일일이 명령어를 입력하는 방식을 사용하지는 않는다. 컨테이느에 대한 바람직한 상태를 YAML
파일에 정의하고 자동으로 컨테이너를 생성 혹은 삭제하면서 바람직한 상태를 유지하는 것이 쿠버네티스의 핵심 기능이다.
도커 컴포즈와 비슷하게 들릴 수 있지만 차이점이 있다. 도커 컴포즈는 옵션을 지정해서 컨테이너 수를 바꿀 수는 있지만 모니터링 기능이 없어서 컨테이너를 만들 때 외에는 관리하지 않는다. 이에 비해 쿠버네티스
에서는 이 상태를 유지하는 기능이 있다. 예를 들어 5개의 컨테이너를 관리하고 있는 쿠버네티스가 있다고 가정하자. 설정파일에서 컨테이너를 4개 관리하도록 변경하면 자동으로 1개의 컨테이너를 삭제한다.
쿠버네티스의 목표는 바람직한 상태를 유지하는 것이다. 이를 꼭 인지하자.