쿠버네티스 컴포넌트

쿠버네티스 클러스터

쿠버네티스는 마스터 노드워커 노드로 구성된다. (노드는 클러스터에 따라 가상 또는 물리적 머신일수 있다.)

모든 클러스터는 최소 한 개의 워커 노드를 가진다. 

 

마스터 노드는 워커 노드에서 실행되는 컨테이너를 관리하는 역할을 하고

워커 노드는 실제 서버에 해당하는 부분 즉, 컨테이너가 실제 동작하는 부분이다.

 

이렇게 마스터노드와 워커노드로 구성된 쿠버네티스 시스템을 클러스터라고 한다.

쿠버네티스 클러스터 구성요소

쿠버네티스를 이루는 구성요소 쿠버네티스 컴포넌트는 컨트롤 플레인과 노드 컴포넌트로 나누어 볼 수 있다.

출처 : https://kubernetes.io/ko/docs/concepts/overview/components/

컨트롤 플레인 컴포넌트

컨트롤 플레인은 워커 노드와 클러스터 내 파드를 관리한다. 마스터 노드가 컨트롤 플레인을 통해 워커 노드를 관리한다.

공식 문서에서는 컨트롤 플레인 컴포넌트는 클러스터에 대한 전반적인 결정을 수행하고 클러스터 이벤트를 감지하고 반응한다고 한다.

파드
쿠버네티스에서 컨테이너는 파드pod라는 단위로 관리되는데 컨테이너와 볼륨을 함께 묶은 것
여러 노드 중 특정 노드에 배치되어 동작한다..

다음 다섯 가지의 컴포넌트가 컨트롤 플레인을 구성한다.

kube-apiserver

쿠버네티스 컨트롤 플레인의 프론트엔드라고 소개되어 있는 kube-apiserver는 쿠버네티스 클러스터로 들어오는 요청을 가장 앞에서 접수하는 역할이다.

외부와 통신하는 프로세스로 kubectl로 부터 명령을 전달받아 실행한다. kubectl은 쿠버네티스 커맨드 라인 도구이다. 명령을 받은 kube-apiserver는 적절한 컴포넌트로 요청을 전달하는 역할까지 맡는다.

 

etcd

클러스터 관련 정보 전반을 관리하는 데이터베이스이다. 쿠버네티스 클러스터가 동작하기 위해서 필요한 리소스의 구성 정보, 상태 정보, 명세 정보 같은 것들을 키-값 형태로 저장하는 저장소이다.

파드는 이 정보를 근거로 관리되고, 이 정의 파일은 커맨드로 수정이 가능하다.

 

kube-scheduler

노드가 배정되지 않은 새로 생성된 파드를 감지하고, 실행할 노드를 선택하는 컴포넌트.

새로 생성된 파드를 감지하고 어떤 노드를 배치할지 결정하는 작업을 스케줄링이라고 한다.

스케줄링을 위한 노드 및 파드의 각종 요구사항과 제약사항을 종합적으로 판단해야하는데 이런 것 또한 kube-scheduler의 역할이다.

kube-controller-manager

컨트롤러 프로세스를 통합 관리, 실행하는 컴포넌트. 다운된 노드가 없는지, 파드가 숫자를 유지하고 있는지, 서비스와 파드는 적절하게 연결되어 있는지, 네임스페이스에 대한 기본 계정과 토큰이 생성되어 있는지 확인하고 이를 유지하기 위해 조치하는 역할을 한다.

 

공식 문서에서 컨트롤러는 다음을 포함한다고 한다.

-노드 컨트롤러 : 노드가 다운되었을 때 통지와 대응에 관한 책임을 가진다.

-잡 컨트롤러 : 일회성 작업을 하는 잡 오브젝트를 감시하고 해당 작업을 완료 할때까지 동작하는 파드를 생성

-엔드포인트 컨트롤러 : 서비스와 파드를 연결

-서비스 어카운트 & 토큰 컨트롤러 : 새로운 네임스페이스에 대한 기본 계정과 API 접근 토큰을 생성

cloud-controller-manager

클라우드 서비스와 연동해 서비스를 생성한다.

클러스터를 쿨라우드 공급자의 API에 연결하고, 해당 클라우드 플랫폼과 상호작용하는 컴포넌트와 클러스터와만 상호작용하는 컴포넌트를 구분한다.

 

노드 컴포넌트

kublet

클러스터의 각 노드에서 실행되는 에이전트. 파드에서 컨테이너가 확실하게 동작하도록 관리.

마스터 노드에 잇는 kube-scheduler와 연동하여 워커노드에 파드를 배치시키고 실행한다.

실행 중인 파드의 상태를 정기적으로 모니터링해서 kube-scheduler에 통지하기도 한다.

 

kube-proxy

네트워크 통신의 라우팅 메커니즘으로 각 노드에서 실행되고 쿠버네티스의 서비스 개념의 구현부이다.

여기서 '서비스'는 여러 개의 파드 집합에서 애플리케이션을 네트워크 서비스로 노출하는 추상화 방법을 의미한다고 한다.

쿠버네티스 클러스터 내부에서 네트워크 요청을 전달하는 역할이라고 한다.

 

Container runtime

파드에 포함된 컨테이너 실행을 실질적으로 담당하는 소프트웨어이다.

쿠버네티스가 컨테이너를 제어하기 위해 제공하는 표준 규약인 CRI(컨테이너 런타임 인터페이스)를 준수하여 쿠버네티스와 함께 사용할 수 있는 외부 애플리케이션들을 모두 의미.

이러한 규약을 따르는 대표적인 컨테이너 런타임에는 컨테이너디(containered), 크라이오(CRI-O) 등이 있다.

 

애드온

애드온은 클러스터 내부에 필요한 기능들을 구현 및 확장하는 역할을 담당한다.

네임스페이스는 kube-system에 속하고 애드온에 사용되는 파드는 deployment, replication controller 등에 의해 관리된다.

애드온의 종류는 다음과 같다.

DNS 애드온

다른 애드온은 필수적이지 않지만 DNS는 필수적이다.

쿠버네티스 클러스터 안에서 작동하는 DSN 서버로 쿠버네티스 서비스 오브젝트에 DNS레코드를 제공하는 역할을 수행한다.

쿠버네티스에 의해 구동되는 컨테이너는 DNS검색에서 이 DNS서버를 자동으로 포함한다.

 

웹 UI(대시보드 애드온)

대시보드는 쿠버네티스 클러스터를 위한 범용의 웹기반 UI이다.

애플리케이션 관리와 문제 해결을 위한 명령시 가시화 하여 편의성을 제공한다.

 

컨테이너 리소스 모니터링

중앙 데이터베이스 내 컨테이너들의 cpu, 메모리 같은 리소스 데이터를 저장하고 볼 수 있는 UI를 제공한다.

 

클러스터-레벨 로깅

검색/열람 인터페이스와 함께 중앙 로그 저장소에 컨테이너 로그를 저장한다.

myoskin