본문 바로가기

MSA/Kubernetes

Kubernetes 기본개념 - 구조

쿠버네티스의 기본구조

 

오늘은 쿠버네티스 클러스터의 기본 구조에대해서 정리해보려고한다.

 

Master(Control Plane) & Node(Worker Machines)

- 쿠버네티스에는 마스터, 노드가 존재한다. 

- 노드에서는 실제 어플리케이션의 레벨의 서비스들이 동작하고 있는 공간이며 마스터는 이러한 워커 노드들의 상태를 관리하기 위한 공간이라고 생각하면 된다.

- 쿠버네티스는 3개(마스터 1개, 워커 2개) 의 노드로 구성을 권장하는데 고가용성 클러스터를 구성하는 경우 여러개의 마스터 노드를 두기도 한다.

 

 

<Kubernets 아키텍처>,출처:https://kubernetes.io/docs/concepts/overview/components/#kube-apiserver

 

Master (Control Plane)

전체 클러스터를 관리하는 역할을 하며  kube-api-server, kube-controller-manager, kube-scheduler, cloud-controller-manager, etcd 등의 컴포넌트가 실행된다.

 

 

kube-api-server

Kubernetes는 모든 명령과 통신을 API를 이용하며 Kubernetes Cluster의 API를 사용할 수 있도록 하는 서버이다. Cluster로 온 요청을 검증하고 컴포넌트끼리 통신을 주고받을수 있게하는 역할을 한다.

 

kube-controller-manager

Kubernetes Cluster의 모든 Pod들을 관리하는 컨트롤러를 실행하는 역할을 한다.

 

 - Node Controller

    Node가 다운되었을 때

 

 - Replication Controller

    적절한 수의 Pod를 유지해주는 역할을 한다

 

 - End-Point Controller

    Service와 Pod를 연결해주는 역할을 한다.

 

 - Service Account / Token Controller

   새로운 namespace에 대한 기본 계정과 API 접근 Token을 생성한다.

 

kube-scheduler

새로운 Pod들을 만들때 Cluster 내에서 적절한 Node를 선택하고 실행하는 역할을한다.

Pod를 실행할때 cpu, memory 등의 리소스 요구사항, 특정 데이터, 특정 조건들을 만족하는 node에 할당할 수 있다

 

cloud-controller-manager

클라우드 서비스를 제공하는 vendor들의 서비스들을 kubernetes와 연결 및 관리하는 컴포넌트이다.

※ on-premise 환경애서의 k8s는 이 컴포넌트가 필요하지않다

 - Node Controller

   클라우드 서비스를 이용하며 노드가 멈추는 경우 클라우드 사업자에게 노드의 상태를 확인하는 역할을 한다.

 

 - Route Controller

  클라우드 인프라에서 네트워크 라우팅을 관리하는데 사용한다.

 

 - Service Controller

  클라우드 서비스에서 제곸하는 로드밸런서를 생성 및 삭제하는데 사용한다.

 

 - Volume Controller

 클라우드 서비스에서 볼륨을 생성하고 Node에 mount하여 관리하는데 사용한다.

 

etcd

Kuberntes 클러스터이서 사용되는 설정값이나 클러스터의 상태를 저장하는 데이터베이스이다.

Key-Value 형태로 저장되며 여러 마스터를두어 분산 저장하여 안정성을 보장한다.

 

Node

마스터에 의해 명령으 받으며 실제 워크로드를 생성하여 서비스한다. Kubelet, Kube-proxy,cAdvisor 그리고 컨테이너 런타임이 배포된다

 

Kubelet

k8s Cluster의 모든 Node에서 실행되며 Pod의 spec을 전달받아 Container들이 실행되는것을 관리 및 실행여부를 체크하는 역할을한다.

Master의 API서버와 통신하며 Node가 수행해야할 명령을 받거나 노드의 상태를 Master한테 전달해준다.

※ kubernetes를 통해서 만들어지지 않은 container는 관리하지 않는다.

 

Kube-proxy

kubernetes Cluster안에서 가상 네트워크를 동작할 수있게하는 역할을 한다.

Node로 들어오는 네트워크 트래픽을 적합한 container로 라우팅하며 Node의 네트워크 트래픽을 로드밸런싱해준다.

 

Container Runtime

Pod를 통해서 배포된 Container를 실행하는 역할을 한다. 가장 잘 알려진 Docker를 사용하거나 cri-o 등

Container 표준인 OCI를 구현하는 container runtime이라면 kubernetes에서 사용가능하다.

 

 

ADD-ON

Cluster에서 필요한 기능을 위해 실행되는 pod들이다

DaemonSet, Deployment등에 의해 관리되며

kube-system이라는 namespace를 사용한다

 

 

cAdvisor

모든 Node에서 기동되는 모니터링

Container들의 상태와 성능들 Master의 API서버로 전달하는 역할을한다.

 

 

 

 


참조: https://ooeunz.tistory.com/118
참조: https://bcho.tistory.com/1258

'MSA > Kubernetes' 카테고리의 다른 글

Kubernetes 개념 - Object  (0) 2021.10.20
Service Mesh란??  (0) 2021.10.19
Kubernetes 개념 - Controller  (0) 2021.10.19