본문 바로가기
kubernetes

[kubernetes] 쿠버네티스(kubernetes) 아키텍쳐 및 동작원리

by devjh 2021. 6. 9.
반응형

1. 쿠버네티스란

단일 서버에서 컨테이너를 사용한다면 쿠버네티스를 사용하지 않아도되겠지만

서버가 10대로 늘어나게 된다면 어떤 서버에 어떤 컨테이너를 생성해야할지 서버마다 들어가서 일일이 자원을 확인하고, 실행하고나서는 컨테이너의 상태를 체크하고, 필요에따라 재가동하고, 삭제하고 등등 모든 작업을 10대에 서버에 접근해서 한땀한땀 해야하는 불편한 상황이 생기게 됩니다.

 

이러한 불편함을 해결하기 위해 컨테이너 오케스트레이션이 등장합니다.

모든 서버에 접근하여 한땀한땀 작업하는것을 하나의 클러스터로 구성하여 마치 하나의 컴퓨터에서 작업하는것처럼 개발 배포 관리를 단순화 시켰습니다.

쿠버네티스는 그중 가장 대표적인 컨테이너 오케스트레이션 오픈소스입니다.

 

 

2. 쿠버네티스 아키텍쳐

쿠버네티스는 클러스터는 크게 Control Plane과 workker node로 나눠집니다.

 

(1) 컨트롤 플레인(마스터 노드)

마스터 노드는 클러스터를 통제하고 관리하는 쿠버네티스의 중심부로 아래와 같은 구성요소가 있습니다.

 

  • API server
    • client와 통신하는 쿠버네티스 API 서버로 쿠버네티스 구성요소들간의 통신은 대부분 API서버를 거칩니다.
  • Scheduler
    • api서버가 노드들에게 일을 할당할때 직접시키는게 아니라 스케쥴러에게 시킵니다.
    • 스케줄러는 애플리케이션을 노드에 할당하는 기능을 합니다.
  • etcd
    • 분산 저장소입니다 안드로이드에서 자주 사용되는 sqlite를 사용하기도 합니다.
  • Controller Manager
    • 쿠버네티스는 선언형 api를 사용합니다.
    • Controller Manager의 요소들은 선언된 API에 맞게 쿠버네티스 resource들을 생성, 복제, 관리 합니다.(쿠버네티스 비즈니스 로직은 모두 여기에 숨어있습니다.)

 

(2) 워커노드

  • kubelet
    • 스케줄러에서 워커노드들에게 애플리케이션을 할당할때 kubelet에 요청을 합니다. kubelet은 pod에서 컨테이너가 동작하도록 하고, 팟을 관리합니다.
  • kube-proxy
    • 네트워크 관련 규칙을 유지해주는 곳입니다.

 

3. 쿠버네티스 동작원리

 

쿠버네티스는 선언형 api를 사용하는 특징이 있습니다.

  • 명령형 api
    • 일반적으로 사용하는 cli명령어라고 생각하면 됩니다.
  • 선언형 api
    • 원하는 결과만을 제시하고 시스템이 스스로 결과를 얻어주는 api입니다.

 

쿠버네티스는 선언형 api를 사용하여 내용이 etcd에 저장되고 etcd를 모니터링하던 controller에 의해 동작하게 됩니다.

 

4. 쿠버네티스 동작순서

(1) 클라이언트는 쿠버네티스 api server에 요청

curl이나 postman 등을 사용하여 http request를 날릴수도 있지만 일반적으로 kubectl을 사용하여 요청을 합니다.

 

(2) etcd에 api의 내용 저장

api server에 선언형 api로 요청이 들어오면 선언형 api의 특징답게 바로 컨테이너를 생성하라는 명령을 동작시키지 않습니다. 분산 저장소인 etcd에 들어온 내용을 저장합니다.

 

(3) etcd를 감시하던 controller 동작

controller는 etcd에 내가 담당하고있는 resource가 들어왔는지를 감시하다가 etcd에 자신의 역할에 맞는 내용이 저장되어있다면 스케줄러에게 동작을 요청합니다. 쿠버네티스의 비즈니스 로직은 controller에 숨어있습니다.

 

(4) 스케줄러는 동작

스케줄러는 워커노드의 kubelet과 통신합니다.

 

(5) kubelet 동작

kubelet은 노드에 pod 등을 생성합니다.

반응형

댓글