글 쓰기에 앞서
최근 쿠버네티스와 직접적인 업무를 진행하면서 정리를 해야 한다고 매번 느꼈지만 미루고 미루다가 마음먹고 공부하는 내용들을 정리해서 기록하려고 한다.
처음 쿠버네티스를 접했을때 느꼈던 거대한 진입장벽이 5년, 10년 후의 나 또는 다른 사람들에게 조금이나마 낮아질 수 있기를 소망해 본다.
쿠버네티스를 이해하기 전 Container에 대한 기본 지식이 없다면 아래 글을 먼저 보고 오는 것을 추천한다.
https://hackerpark.tistory.com/entry/Docker-Virtual-MachineVM-DockerContainer-%EC%A0%95%EB%A6%AC
Container 기술의 발전
도커의 등장 이후 Container 기술이 급성장하면서 수많은 Application들이 Container를 통해 배포되어 실행되기 시작했다. 독립적인 환경을 제공해 주는 Container 기술 덕분에 MSA(MicroService) 설계 구조를 가지는 Application도 점차 늘어났다.
최근 Application 설계 구조
모놀리스 (monolith)
- 시스템 구조 중 하나로, 단일 System(Application)에서 여러 비즈니스 요소를 처리하는 시스템 구조를 의미한다.
마이크로서비스 (MicroService)
- 시스템 구조 중 하나로, 단일 Application에서 수행하던 여러 서비스들을 각자 독립적으로 실행되는 더 작은 요소의 Application으로 분리하여 수행하는 시스템 구조를 의미한다.
과거 레거시 Application은 하나의 거대한 모놀리스 구조가 지배적이었다.
하지만 전체가 하나의 운영체제 프로세스로 실행되고 상호의존성이 강하기 때문에 하나의 개체로 개발, 배포, 관리가 이루어지고 그로 인한 시스템의 복잡성이 과도하게 증가하는 문제가 발생하였다.
또한 하나의 운영체제 프로세스로 실행하기 때문에 많은 시스템 리소스를 (CPU, Memory, Disk ...) 요구하였고, Application이 점점 커질수록 서버의 리소스를 더 요구하면서 비용적인 측면으로 상당한 압박이 있었고, 이러저러한 이유로 확장의 한계가 명확했다.
이러한 한계를 느끼며 등장한 마이크로서비스는 독립적으로 실행되는 구조로 세분화되어 있다.
마이크로서비스의 확장은 서비스별로 이루어지기 때문에 각각의 서비스에 대해서 개발, 배포, 업데이트 등을 수행할 수 있으며 서로 서비스 간에 대한 상호의존성이 모놀리스 구조에 비해서 낮은 편이다.
하지만 서비스가 다양해지고 마이크로서비스 구조를 이루는 요소들이 늘어날수록 구성 요소 간의 관계가 과도하게 복잡해지고, 장애 상황시 분석이 어려워지는 단점도 있다.
Kubernetes의 등장
Container가 점차 늘어나면서 마이크로서비스의 단점이 부각됨에 따라 이를 해소하기 위한 방법이 필요하게 되었고 이는 규모가 크면 클수록 더더욱 심화되기 시작하였다.
이를 빠르게 눈치채고 솔루션을 찾아낸 곳이 바로 구글(Google)이다.
구글은 이미 오래전부터 수만 대의 머신과 클러스터들, 어마어마한 양의 container를 관리하는데(억 단위가 넘는다고 한다) 보그(Borg)라는 시스템을 개발하여 활용하고 있었다고 한다. (아래는 Borg의 논문)
https://research.google/pubs/large-scale-cluster-management-at-google-with-borg/
구글은 보그(Borg)를 운영하면서 얻은 경험과 지식을 통해 2014년에 Kubernetes라는 Container Orchestrator를 개발하기 시작하였고 마침내 Kubernetes 시대를 열기 시작하였다.
그래서 Kubernetes가 뭔데?
간단하게 말하자면 Kubernetes는 Container를 쉽게 배포하고 관리할 수 있게 도와주는 오픈소스 소프트웨어이다.
Kuberentes를 사용하면 각자 운용하던 서버(노드)들을 하나의 논리적인 시스템으로 관리가 가능해지며, Container의 배포 및 실행, 관리를 하나의 서버(노드)에서 작업하듯이 간단하게 할 수 있다.
이를 통해 여러 서버를 논리적인 하나의 시스템으로 묶어서 Container를 하나의 시스템에서처럼 운영이 가능해지며, Container의 지속적인 배포 및 실행을 자체적으로 관리해 주기 때문에 사용자 입장에서는 관리가 편리해진다. (System Resource, Network, Container 등을 관리할 수 있다.)
Kubernetes는 현재까지도 (2023-12-17) 지속적으로 발전하고 있으며, 이 글로 담기 힘든 매우 방대한 기능과 기술이 집약되어 있기 때문에 한 번에 모든 걸 다 배운다기보다는 하나씩 필요한 기능을 공부해 나아가보려고 한다.
'Kubernetes > 이론' 카테고리의 다른 글
[Kubernetes] 쿠버네티스 클러스터가 무엇일까? (k8s 정리 - 2편) (2) | 2023.12.31 |
---|