정환타 개발노트

Kubernetes의 아키텍처에 대하여 본문

DevOps

Kubernetes의 아키텍처에 대하여

JungHwanTa 2020. 4. 8. 18:18

Kubernetes 아키텍처

kubernetes의 아키텍처에 대해 정리를 해보았다.

 

출처 https://kubernetes.io/docs/concepts/architecture/

쿠버네티스는 마스터와 노드 두 개로 구성된다.

1. 마스터

마스터는 쿠버네티스 클러스터의 전체를 관리하며 다음과 같이 구성된다. 

1. API 서버

쿠버네티스의 통신, 제어는 Rest API를 통해 진행되는데 이를 관장하는 서버이다. 이 API 를 제공하고 그에 대한 처리를 수행한다.

2. Etcd

클러스터의 DB 역할을 하는 서버이다. etcd는 key/value 형태로 구성되며 클러스터의 상태와 설정을 저장한다.

3. 스케쥴러

스케쥴러는 클러스터의 각 리소스를 노드에 할당하는 역할을 한다.

4. 컨트롤러 매니저

컨트롤러 매니저는 Replica controller, Service controller, Volume Controller, Node controller와 같은 컨트롤러를 생성하고 관리한다.

5. DNS

DNS는 쿠버네티스의 엔드포인트를 DNS로 맵핑하며 관리하는 역할을 한다. 새로운 리소스에 대하여 IP와 이름을 등록하고 그 이름(DNS)를 통해 리소스에 접근할 수 있다.

 

2. 노드

노드는 쿠버네티스에서 워커 머신의 단위이다. 이 노드는 클러스터에 따라 VM 또는 물리 머신이 될 수 있다.

이 노드들은 마스터 컴포넌트에 의해 관리되며 노드 상의 서비스인 컨테이너 런타임, kubelet과 kube-proxy 등을 포함한다.

 

일반적으로 노드는 4개의 상태 정보를 가진다. 

 - 주소 : 호스트명, 외부IP, 내부IP 포함

 - 컨디션 : 노드의 현재 상태(Ready, MemoryPressure, PIDPressure, DiskPressure, NetworkUnavailable)를 JSON 오브젝트로 표현

 - 용량과 할당가능 : 노드 상에 사용 가능한 리소스(CPU, 메모리, 최대 파드 수)를 나타낸다. 

 - 정보 : 커널 버전, 쿠버네티스버전, Docker 버전, OS 이름을 포함

 

또한 노드는 다음과 같이 구성된다. 

 

1. Kubelet

노드에 배포되는 에이전트로 마스터의 API와 통신을 하고, 노드가 수행할 명령을 받아 수행하며 위의 상태정보를 마스터로 보낸다.

2. Kube-proxy

노드의 네트워크 트래픽을 라우팅 해주며, 노드간의 로드밸런싱을 수행한다.

3. 컨테이너 런타임

배포된 컨테이너를 실행하는 역할을 한다. 

4. cAdvisor

각 노드에서 기동되는 모니터링 에이전트이다. 노드에 가동되는 컨테이너들의 상태정보를 서버 API로 전달한다.

 

추가적인 쿠버네티스의 리소스

 

Namespace

클러스터 안에 가상 클러스터를 생성할 수 있는데 이 때의 가상클러스터를 namespace라고 한다.

 

Pod

컨테이너가 모인 집합체를 말하며 적어도 한개 이상의 컨테이너로 구성된다. 

Comments