이전까지는 쿠버네티스 공부를 시작하기 전에
쿠버네티스가 어떻게 동작하고, 어떻게 실행시키는지에 대한 개요를 알아보았습니다.
이번 글부터는 쿠버네티스의 구조를 시작으로 컴포넌트들에 대해 자세히 알아보겠습니다.
쿠버네티스의 클러스터는 크게 두 가지로 분류 됩니다.
클러스터 자체를 관리하는 마스터 노드, 실제 컨테이너(파드)들을 실행시키는 워커 노드
마스터 노드에는
kube-apiserver
etcd
kube-schedular
kube-controller-manager
kubelet
kube-proxy
docker 등의 컴포넌트가 존재합니다.
클러스터를 구성할 때 보통 3대의 마스터 노드를 사용합니다.
1대의 마스터 노드가 주된 마스터 노드의 역할을 하고, 나머지 두 대의 마스터 노드가 대기하는 형태로 있으며,
리더 마스터에 오류가 생겼을 때, 나머지 마스터 노드 중 한대가 리더 역할을 이어받게 됩니다.
서버의 안정성을 고려해 5대의 마스터 노드로 클러스터를 구성하는 방법도 존재합니다.
워커 노드에는
kubelet
kube-proxy
docker 등의 컴포넌트가 존재합니다.
쿠버네티스 동작 원리를 자세히 보면서 각각의 컴포넌트가 어떤 역할을 하게 되는지 알아보겠습니다.
쿠버네티스의 모든 통신은 kube-apiserver를 통해 정보 혹은 명령이 전달됩니다.
마스터 노드에 여러 컴포넌트 들이 있는데, etcd와 kubelet을 제외한 컴포넌트들은 docker에 의해 관리됩니다.
이는 해당 컴포넌트들이 컨테이너로 실행됨을 의미합니다.
초기에는 컴포넌트가 서버 프로세스로 동작되기도 했습니다.
etcd는 별도의 프로세스로 설정되어있으며, key-value값으로 노드의 상태 등이 저장되어 있습니다.
워커노드는 kubelet으로 도커를 관리합니다. kubelet이 kube-apiserver와 통신하며,
파드의 생성,관리,삭제를 담당합니다.
워커 노드에 속한 kube-proxy는 마스터 노드의 kube-proxy와 다르게 컨테이너가 아니라 서버 프로세스를 실행 가능합니다.
컴포넌트도 용도에 맞게 세 가지로 분류됩니다.
마스터용 컴포넌트, 노드용 컴포넌트, 애드온용 컴폰넌트
마스터용 컴포넌트 : 마스터용 컴포넌트들은 실제 클러스터 전체를 관리하는 역할을 맡습니다.
노드용 컴포넌트 : 쿠버네티스 실행 환경을 관리합니다.
-kubelet:
파드 컨테이너의 실행을 직접 관리합니다.
-kube-proxy:
클러스터 내부에 가상 네트워크를 구성하고 관리합니다.
-container runtime:
실제 컨테이너를 실행하는 컴포넌트로, 보통 Docker를 사용합니다.
애드온:
클러스터 안에서 필요한 기능을 실행하는 파드입니다.
애드온에는 여러 종류가 있습니다.
Kubelet내부에 있는 cAdvisor라는 컨테이너 모니터링 도구가 좋습니다.