본문 바로가기
Computer Science/KUBERNETES

Kubernetes Architecture - Certified Kubernetes Administrator(CKA)

by sy.cho__ 2020. 10. 19.

본 게시글은 CKA 취득 위해 공부한 내용 정리하기 위해 작성한 글이며 첨부한 자료 및 내용은 Udemy에서 제공하는 CKA강의를 활용하였습니다.  (www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/)

저작권 등에 문제가 생길 시 게시글을 내리도록 하겠습니다. 


Kubernetes의 구조가 어떻게 되어 있는지 먼저 알아봅시다. 

우선 Kubernetes를 왜 사용하는 걸까요? 

Kubernetes 목적은 Application을 Container에 올려 Host하는 것입니다. 이를 통해 Application의 많은 Instance를 쉽게 배포할 수 있고 서로 다른 서비스 간의 통신을 쉽게할 수 있습니다.

왜 쉽게 배포할 수 있고 서비스 간의 통신이 원활한지, 자세히 살펴볼게요. 


Kubernetes엔 크게 2개의 Node가 있습니다.  Master 노드와 Worker 노드입니다. 

Worker Node는 Container를 싣는(Load)하는 역할을 합니다. Container를 Load한다는 것은 Application을 Host한다는 것을 의미합니다. 

그럼 어떤 Application을 Load할지 누가 정할까요? 바로 Master Node입니다. 어떤 Container를 어떤 Worker Node에 올릴지, 계획이 어떻게 되는지 , 계획 등에 대한 정보를 저장하는 등 모든 Worker Node에 대한 관리와 모니터링하는 역할을 합니다. 

아래 그림을 살펴볼게요. 

왼쪽에 있는 큰 Ship이 Master Node, 오른쪽에 있는 작은 Ship이 Worker Node입니다. 보시는 것과 같이 Master Node는 Kubernetes 전체와 각 Worker Node를 관리하기 위한 여러 Components(Kube-apiserver, Controller-Manager 등)이 있으며 Worker Node에는 Container가 있습니다. 이제 각 Node 안에 있는 세부사항을 알아볼게요. 


Master Node

수 많은 Container를 Worker 노드에 Load하고 Unload 하기 위해, 어떤 Container를 어떤 Worker에 올릴지 내릴지, 몇시에 동작할지 등의  대한 Information을 저장해야합니다. 이 모든 정보는 KEY - VALUE 형식은  ETCD Cluster에 저장됩니다. 

ETCD는 Key-Value 형태의 데이터를 저장하는 데이터베이스입니다. 어떤 데이터를 저장하고 어떻게 활용하는지는 다음에 자세히 다뤄볼게요. 

그럼 ETCD가 정보를 가지고 있다면, 이를 이용해 Worker에 Container를 적재하는 역할을 누가 할까요? 바로 kube-scheduler니다. 

Scheduler는 Container를 적재한 알맞은 Node를 식별(Worker 노드의 필요 자원요건, 각종 Policy, Constraints 등) 합니다. 

그리고 Master 노드는 각 역할을 적절히 수행하기 위한 2개의 Controller Manager가 있습니다. 

  • Node - Controller : Node를 관리. 신규 노드를 생성하거나 노드에 이슈가 생겨 사용할 수 없을 경우 등을 관리
  • Replication - Controller : Container의 갯수를 정해놓은 대로 유지하기 위한 역할 수행

그렇다면 지금까지 설명한 여러 Component들은 서로 어떻게 Communication할까요? 바로 kube-apiserver가 이 역할을 수행합니다. 

kube-apiserver는 kubernetes components를 운영하는 핵심기능이며, 모든 operation을 조율합니다 

그리고 위 그림 오른쪽 아래에 Container Runtime Engine(CRE)이 보이실 겁니다. CRE는 Container를 실행할 수 있도록 해주는 SW로 대표적으로 Docker가 있습니다. 앞으로 수 많은 Worker 노드엔 Container가 적재되어 Host 될것이고, 또 Master 노드는 Container를 관리하여 Worker에 올려야 하기 때문에 모든 환경에서 Container를 Run할 수 있어야 하고 이를 주로 Docker가 해결합니다. 그래서 모든 Worker , Master 노드엔 Docker가 설치되어야 합니다. 

Master 노드에 있는 Component를 정리해보면 다음과 같습니다. 

ETCD Cluster

Key-Value 형태의 데이터를 저장하는 데이터베이스
Worker 노드 관리에 필요한 모든 정보를 저장
kube-scheduler Container를 적절한 Worker 노드에 적재할 수 있도록 식별
Controller Manager Node - Controller 신규 노드 생성 및 Unavailable한 이슈 노드 등 관리 역할
Replication - Controller 설정해놓은 Container의 Number를 유지하기 위한 관리 역할
kube-apiserver
Components 간의 Communication 관리 및 Operation 조율

Worker Node

Worker node엔 kubelet이라 하는 사령관이 있습니다. 이 사령관은 Master로 부터 정보를 받아 Container를 Load하고 실행하며 필요한 Report와 상태정보 등을 Master에 전달해주는 등의 역할을 합니다. Kubelet은 Master 노드 내 kube-api의 명령을 기다리고 있다가 Node를 배포/제거하며 kube-api는 주기적으로 kubelet 으로 부터 status를 받아 전체 worker를 모니터링 합니다. 

서로 다른 Worker 노드끼리는 어떻게 통신할까요? Web 서버가 올라가 있는 노드와  데이터베이스가 올라가 있는 노드가 있다면 서로 통신을 해야할텐데 말이죠. 이는 바로 Kube-proxy가 담당합니다. Kube-proxy는 Worker 노드 사이의 통신에 필요한 rule을 관리하고 수행합니다. 

kubelet Master - Wokrer 간의 통신 및 Worker 내 Container 관리 
kube-proxy Worker 노드 간의 통신 역할

지금까지 설명한 내용을 정리하면 다음과 같습니다. 

 

지금까지 Kubernetes의 구조에 관한 대략적인 내용이었습니다. 다음 포스트 부턴 위에 설명한 각 Component에 대해 구체적인 내용을 살펴보겠습니다. 

반응형