본문으로 바로가기

쿠버네티스 아키텍처

category Kubernetes 2021. 6. 8. 10:53
반응형

 

쿠버네티스 클러스터는 크게 Contol plane 부분을 담당하는 마스터 노드와 Pod가 실행되는 워커 노드들로 구성된다.

 

마스터노드 에서는 쿠버네티스의 설정 환경을 저장 및 전체 클러스터를 관리하는 역할을 한다.

워커노드는 Pod나 컨테이너 같은 쿠버네티스 위에서 동작하는 워크로드를 호스팅 하는 역할을 한다.

 

Control plane comonent

  • kube-api-server : 쿠버네티스는 모든 명령과 통신을 api를 통해서 하는데 그 중심이 되는 서버가 api서버 이다. 모든 기능을 REST API로 제공하고 그에 대한 명령을 처리한다.
  • etcd : 쿠버네티스 클러스터의 서버 설정 값 이라던가 클러스터의 상태들을 저장하는 서버이다. 키/값 형태로 저장하고 오픈소스 형태로 쿠버네티스의 클러스터의 상태나 설정 정보를 저장한다.
  • kube-scheduler : Pod, 서비스등 각각의 리소스들을 적절한 노드에 할당하는 역할을 한다.
  • kube-contoller-manager : Deployment와 같은 리소스 컨트롤러를 관리한다. API 서버를 통해 클러스터의 공유된 상태를 감지하고, 현재상태를 원하는 상태로 이행하는 Control loop를 관리
  • cloud-controller-manager : 클라우드 업체와 연동해 로드 밸런서나 디스크 볼륨같은 자원을 관리
  • Dns : 그림에는 없지만 쿠버네티스는 자체적으로 내부 Dns 서버를 갖고있다. 쿠버네티스 리소스의 엔드포인트를 Dns로 매핑하고 관리한다. 서비스나 pod를 생성할 때 마다 동적으로 ip를 할당 받는데, 그때 마다 ip주소가 변경되는 것을 자체 내부 dns 서버를 두는것으로 해결하였다. 새로운 resource가 생기면, 그 resource에 대한 ip와 dns이름을 등록하여, dns이름을 기반으로 resource에 접근할 수 있도록 한다.

 

Node component 

마스터에 명령을 받고 Pod을 유지시키고 쿠버네티스 런타임 환경을 제공하는 역할을 수행한다.

  • Kubelet : 각 노드에서 실행되는 에이전트이며, 마스터의 api서버와 통신을 하면서, 노드가 수행해야 할 명령을 받아 수행하고, 반대로 노드의 상태도 마스터로 전달하는 역할도 한다.
  • Kube-proxy : 노드로 들어오는 네트워크 트래픽을 적절한 컨테이너로 라우팅하고, 로드밸런싱 과 같은 노드로 들어오고 나가는 네트워크 트래픽을 프록시하고, 노드와 마스터간의 네트워크 통신을 관리한다.
  • Container runtime : Pod를 통해서 배포된 컨테이너를 실행하는 Container runtime 이다. 보통 도커 생각하면 된다.(rkt, Hyper container 등등 다양한 런타임이 있지만 대부분 도커를 사용한다.)
  • cAdvisor : 각 노드에서 사용되는 모니터링 에이전트 이며, 노드 내에서 가동되는 컨테이너 들의 상태와 성능들을 수집해 마스터 노드(Control plane)으로 전달하는 역할을 한다.

 

쿠버네티스 실행 flow

 

Control plane(master) 에게 컨테이너를 실행해달라는 요청 (yaml 형식 혹은 cli 형태로 명령어로 요청)

Control plane에는 api 서버가 있기 때문에 요청을 받고 역할을 수행. scheduler 에게 노드의 상태를 점검하고 가장 적합한 노드의 kublet 에게 요청을 함. (nginx 하나를 실행해줘라) 그럼 그 노드의 kubelet은 명령을 받고 도커 명령어를 실행해서 컨테이너를 실행한다. 이렇게 실행한 컨테이너를 pod 라는 단위로 관리한다.

반응형