그외

Kubernetes Architecture

데굴데굴. 2021. 9. 24. 23:52

(출처: https://kubernetes.io) 

 

 

1. Kubernetes를 알기 전, Container란?

소프트웨어 배포 용이성을 높이기 위해, 소프트웨어 자체와 그의 의존성(Dependency)을 포함한 이미지이다. 여기서 의존성이란 라이브러리, 인터프리터, 서브 패키지, 컴파일러, extension 등을 의미한다. 그 내용들은 컨테이너 런타임이 실행할 수 있는 이미지 파일에 저장된다.

 

2. 그래서, Kubernetes란?

개발자가 원하는 상태로 소프트웨어를 운영 할 수 있도록 도와주는 오픈소스 플랫폼 이라고 소개할 수 있을 것 같다. 하지만 이 한 문장에 모든 것이 담겨있지 않은 것은 확실하다. 배포 작업의 간편성을 제공하고, 크래시 발생 시 자동 재시동 등의 자동 복구기능을 제공하며, 같은 내용의 컨테이너를 레플리카로 만들어 외부 호출 시 로드밸런싱도 지원해준다. 컨테이너가 어느 노드에 들어가면 좋을지를 효율적으로 결정(스케줄링)해주고, 헬스 체크, 자동 스케일아웃 등등 내가 아직 모르는 기능들도 많을 것이다. 

 

현재 다니고 있는 회사는 전통적인 배포 방법을 사용하는 곳이다. 여러 대의 물리 서버장비에 파일을 배포하고 때로는 반영을 위해 재기동을 해야 하며, 예상치 못한 상황으로 인스턴스에 거래가 밀려 전체 서비스에 영향을 주는 경우가 허다하다. 조금이라도 개선하기 위해 프라이빗 클라우드를 일부 도입하고 있지만 아직 무중단...은 말도 안되는 얘기인듯... 이런 상황에서 쿠버네티스를 알게 되고 공부를 하면 할수록 이거 좀 대박인듯! 개사기템. 어떻게 이 모든 걸 다 해주지!!! 언젠가는 우리도 도입하게 될까?

 

3. 구성요소

1) 마스터

컨트롤 플레인이라고도 부른다. 크게 API Server, Controller Manager, Cloud Controller Manager, Scheduler, etcd 로 이루어져 있다.

API Server는 컨트롤 플레인의 프론트엔드 서버로 API 요청을 처리한다. 평소 많이 접하는 웹의 프론트엔드라는 용어와는 조금 다른 느낌으로.. API 요청의 front endpoint 정도로 이해할 수 있을 것 같다.

Controller Manager디플로이먼트와 같은 리소스 컨트롤러를 관리한다.

Cloud Controller Manager는 클라우드 위에 쿠버네티스가 올라가는 경우 쿠버네티스와 클라우드 업체가 연동하여 로드밸런서나 디스크 볼륨과 같은 리소스를 관리한다.

etcd는 쿠버네티스의 설정과 관련된 모든 정보를 저장하는 key-value 저장소(DB)이다. 대문자가 아니라서 약어는 아닌 것 같고.. 어원?이 어디일까 궁금하다. d가 database인가? 구글링을 꽤 해보았지만 왜 이름이 etcd인지는 알아내지 못했다 ㅠ

2) 노드

쿠버네티스에서는 하나의 머신을 노드라고 칭한다. 쿠버네티스는 대부분 클라우드 환경에서 쓰니까 가상머신일 것이다. 노드는 kubelet, kube-proxy, Pod, 컨테이너 런타임으로 이루어져 있다. 그림에는 Pod이 없다.

kubelet은 컨테이너를 관리하고 모니터링하는 agent이다.

kube-proxy는 서로 다른 노드에 있는 Pod 간 통신이나 Pod와 인터넷 사이의 네트워크 트래픽을 라우팅하는 역할을 한다. 이름 그대로 proxy 역할이다.

Pod는 서로 통신하며 데이터를 공유하는 컨테이너의 그룹이다. 보통은 Pod 하나에 컨테이너 하나를 넣는다고 한다.

컨테이너 런타임은 컨테이너를 시작하고 중지하며 컨테이너 간 통신을 처리한다. 일반적으로 도커를 사용하지만 rkt, runC, CRI-O, containerd 도 쓸 수 있다고 한다. 다 뭔지 모르니까 내일은 컨테이너 런타임을 공부해야겠다.

 

 

책 '쿠버네티스를 활용한 클라우드 네이티브 데브옵스'를 참고하여 작성해 보았다.