안녕하세요, 오픈소스컨설팅 Playce Cloud Team 엔지니어 정진이입니다.

IT 분야에 종사하거나 관심 있는 분들은 아마도 Container와 Kubernetes에 대한 용어를 들어본 적이 있을 겁니다. 이 기술은 최근 몇 년 동안 IT 업계에서 큰 관심을 받고 있으며 기업들도 이를 활용하여 다양한 서비스를 제공하고 있습니다.

여러분은 컨테이너 관리 서비스인 Kubernetes가 어떻게 탄생했는지 알고 계시나요? 여기에서 Kubernetes 개발의 기초가 된 Container 기술의 역사부터 구글이 Kubernetes를 개발하기까지 어떤 컨테이너 관리 시스템이 있었는지 알아보겠습니다.

1. Container

1.1 Container 기술의 역사

컨테이너 개념은 1979년에 처음 등장했습니다. Unix V7을 개발하던 과정에서 ‘chroot’ 시스템 호출이 도입되었는데, 이것은 프로세스와 그 자식 프로세스의 루트 디렉터리를 파일 시스템 내에서 새로운 위치로 변경하는 것을 의미합니다. 이것이 프로세스 격리(Isolation)의 시작이었습니다.

이후 2000년에 FreeBSD Jails가 개발되었는데, 이는 FreeBSD 시스템을 여러 독립적인 작은 “감옥(Jails)”으로 분할하고 각각에게 IP 주소를 할당하는 능력을 제공했습니다.

2001년에는 Jail 메커니즘인 Linux VServer가 개발되었는데, 이것은 FreeBSD Jails와 유사한 원리로 컴퓨터 시스템의 리소스를 분할하는 것을 가능하게 했습니다. 이 기술은 Linux 커널을 패치하여 구현되었습니다.

2006년에 구글에서 개발한 Process Containers는 프로세스 집합의 리소스 사용량(CPU, 메모리, 디스크 I/O, 네트워크)을 제한하고 격리하기 위해 설계되었습니다. 이것은 1년 후에 ‘Control Groups(cgroups)’로 이름이 바뀌었으며, Linux 커널 2.6.24에 통합되었습니다.

2008년에는 LXC(LinuX Containers)가 개발되었는데, 이는 cgroups와 Linux namespaces를 사용하여 구현한 최초의 Linux 컨테이너 엔진으로, Linux 커널을 패치하지 않고도 동작할 수 있습니다.

2013년에는 LMCTFY(Let Me Contain That For You)가 시작되었는데, 이것은 Linux 애플리케이션 컨테이너를 제공하는 구글 컨테이너 스택의 오픈 소스 버전으로, 애플리케이션은 “컨테이너 인식”을 통해 하위 컨테이너를 만들고 관리할 수 있습니다. 그러나 2015년부터 구글은 LMCTFY의 핵심 개념을 Open Container Foundation의 일부인 libcontainer로 이전시키기 시작했으며, 이후 LMCTFY의 배포는 중단되었습니다.

마침내 2013년에 Docker가 등장하면서 컨테이너 기술은 급속도로 인기를 얻게 되었습니다. 초기에는 Docker가 LXC를 기반으로 했지만 나중에는 자체 라이브러리인 libcontainer로 교체했습니다.

LXC는 전체 가상화를 기반으로 하며, 주로 서버 환경에서 사용되고 명령줄 도구를 통해 컨테이너를 관리합니다. 반면, libcontainer는 OS 수준의 컨테이너화를 가능하게 하는 라이브러리로, 주로 간단한 컨테이너 관리를 위해 Docker와 같은 컨테이너 관리 도구에 내장되어 활용됩니다

1.2 Container 기술이란?

기존 배포와 컨테이너 배포 (출처: kubernetes.io)

일반적으로 베어메탈(레거시) 환경에서 애플리케이션을 실행할 때는 각 애플리케이션을 호스트 운영 체제에 직접 설치하고 구성합니다. 이로 인해 애플리케이션 간의 종속성 충돌 문제가 발생할 수 있으며, 호스트 시스템 리소스를 공유하면서 애플리케이션 간의 격리가 부족할 수 있습니다. 또한 애플리케이션 버전 관리가 어려울 수 있습니다.

한편, 컨테이너 기술은 각 애플리케이션과 그 종속성을 격리된 환경인 컨테이너에 패키징하는 방식을 제공합니다. 각 애플리케이션은 자체 독립된 컨테이너 내에서 실행되며, 컨테이너는 호스트 시스템 및 다른 컨테이너와 격리되어 종속성 충돌 문제를 방지합니다.

또한 컨테이너는 가상화 기술을 사용하여 호스트 시스템 리소스를 효율적으로 공유하면서도 애플리케이션 간 격리를 강화합니다. 컨테이너 이미지를 사용하여 애플리케이션을 패키징하고 배포하므로 서로 다른 애플리케이션 버전을 쉽게 관리할 수 있습니다.

기술적인 측면에서 컨테이너 기술은 Linux 운영 체제의 핵심 기능인 Linux namespaces와 cgroups를 기반으로 합니다. 이러한 기술을 사용하여 애플리케이션을 격리된 환경에 배치하고, 컨테이너 이미지를 사용하여 애플리케이션을 패키징하고 배포합니다. 주요 컨테이너 도구로는 Docker와 같은 것들이 있으며, 이러한 도구는 컨테이너 관리를 용이하게 해줍니다.

2. Container management system

구글은 대규모 데이터 센터에서 작업을 효율적으로 관리하고 확장하기 위해 컨테이너 관리 시스템을 개발했습니다. 구글은 Linux 컨테이너 기술을 활용하여 이러한 시스템을 개발하는 데 15년 이상의 경험을 쌓았습니다. 이 경험을 토대로 세 가지 주요 컨테이너 관리 시스템을 개발했는데, 이 중 첫 번째는 Borg이고, 그 다음이 Omega이며, 마지막으로 Kubernetes가 오픈 소스로 발전했습니다.

2.1 Borg

Borg 아키텍처 (출처: static.googleusercontent.com)

Borg는 구글에서 개발한 최초의 통합 컨테이너 관리 시스템으로, 컨테이너를 사용하여 장기 실행 서비스(prod)와 배치 작업(non-prod)을 효과적으로 관리합니다. 이 시스템은 여러 주요 구성 요소로 구성되어 있습니다.

구성 요소설명
BorgMasterBorg 시스템의 중앙 제어 역할을 담당하며 사용자가 시스템과 상호 작용할 수 있는 API를 제공하고, 작업을 예약하고 스케줄링하며 클러스터 관리를 수행합니다.
SchedulerSlave 노드에서 실행할 작업을 결정하고 할당하는 역할을 합니다. 이 스케줄링 결정은 리소스 가용성과 우선 순위에 따라 이루어집니다.
Borglet각 Slave node에 설치되는 에이전트로 컨테이너를 관리하고 네트워킹 및 라우팅을 담당합니다. 각 Slave 노드의 Borglet은 Scheduler의 할당을 받고 작업을 실행합니다.
작업(Task)Borg 시스템에서 실행되어야 하는 개별 작업 단위로, 각 작업은 리소스 요구 사항과 실행에 필요한 모든 정보를 포함하고 있습니다.
할당(Alloc)작업을 실행하기 위해 Scheduler에 의해 Slave 노드에 자원이 할당됩니다. 할당은 Slave 노드에 할당된 작업의 실행 환경과 관련된 정보를 포함합니다.
작업 그룹(Job)여러 작업을 그룹화한 단위로, 유사한 서비스 또는 작업을 관리하기 위해 사용됩니다.
셀(Cell)Borg 시스템에서 머신 클러스터를 관리하기 위한 단위로, 평균적으로 10,000대의 머신으로 구성됩니다.
Borg 구성 요소와 설명

Borg는 Linux 컨테이너 기술을 기반으로 하며, 클러스터 내에서 서로 다른 유형의 작업을 효율적으로 관리하여 리소스 활용도를 극대화하고 비용을 절감하는 데 사용됩니다.

Borg 시스템은 Master 노드, Slave 노드, CLI(Command Line Interface) 및 웹 기반 UI(User Interface)로 구성되어 있습니다. Master는 클러스터 관리자와 통신하는 API를 제공하며, 각 Slave 노드에는 컨테이너, 네트워킹 및 라우팅 관리를 담당하는 Borglet이라는 에이전트 구성 요소가 설치됩니다. Scheduler는 Slave 노드의 리소스 가용성을 기반으로 컨테이너 스케줄링 결정을 내립니다. 시스템의 상태는 분산형이면서 고가용성을 갖춘 저장소인 Paxos에 저장됩니다.

데이터 센터 내에서 Borg는 셀(cell)의 집합으로 컨테이너를 관리하며, 각 셀은 약 10,000대의 머신으로 구성된 단위이며 단일 클러스터에 속합니다. Borg의 클러스터 관리 기능으로는 네이밍 및 서비스 검색(Borg Name Service, BNS), 애플리케이션 인식 로드 밸런싱, 수평 및 수직 자동 확장, 소프트웨어/구성 업데이트 배포를 위한 롤아웃 도구, 다중 작업 분석 파이프라인을 실행하는 워크플로우 도구, 컨테이너 정보 수집 및 대시보드 표시와 경고 트리거를 위한 모니터링 도구가 포함됩니다.

2.2 Omega

Omega 아키텍처 (출처: static.googleusercontent.com)

Omega는 구글의 두 번째 컨테이너 관리 시스템으로, Borg 시스템의 소프트웨어 엔지니어링과 아키텍처를 개선하기 위해 설계되었습니다. Omega는 거의 모든 Borg 컨테이너 클러스터 관리 기능의 성능을 높이기 위해 약간 다르게 구현되었습니다. 특히, Cell State의 지속 방법과 코어 스케줄링 아키텍처를 개선했습니다.

Omega는 Omlets, Cell State 및 Cell services를 기반으로 작동합니다. Omlets는 클러스터에서 작업을 수행하는 데 사용되는 컨테이너로, 애플리케이션을 컨테이너화하고 실행하는 작은 실행 단위입니다. 각 Omlet은 개별적으로 구성되어 컨테이너 클러스터 내에서 관리됩니다. 각 Cell은 대규모 머신을 관리하는 단위이며 Cell State를 통해 Omlets의 상태와 구성 정보를 실시간으로 추적하고 Omlets를 효율적으로 관리합니다. 또한 Cell services는 Omlets가 필요로 하는 다양한 서비스를 제공합니다.

Omega의 이러한 개념을 활용하여 더 효율적인 컨테이너 관리와 클러스터 제어를 구현하며, 일부 혁신적인 기능은 이후 Borg 시스템으로 통합되었습니다.

2.3 Kubernetes

Kubernetes라는 이름은 비행사나 조타사를 의미하는 그리스어에서 유래되었습니다. K8sKs 사이에 ‘ubernete’라는 여덟 글자를 ‘8’로 대체하여 만든 약어입니다.

Kubernetes 아키텍처 (출처: kubernetes.io)

Kubernetes는 구글이 개발한 세 번째 컨테이너 관리 시스템으로, 이 시스템은 Borg와 Omega에서 얻은 경험을 기반으로 오픈 소스로 개발되었습니다. Kubernetes는 처음부터 구글의 최신 프로그래밍 언어인 Go를 사용하여 작성되었으며, etcd와 같은 다양한 오픈 소스 기술을 활용하여 구현되었습니다. 또한 Kubernetes는 개발자가 클러스터에서 실행되는 복잡한 분산 시스템을 쉽게 배포하고 관리하기 위해 설계되었습니다. 이 시스템은 컨테이너의 활용도를 개선하면서도 개발자 경험을 중요시하며, 공유 지속적인 저장소를 핵심으로 하고 있습니다.

Kubernetes는 2014년 6월에 개발이 시작되었으며, 2015년 7월에 첫 번째 버전인 1.0을 공식적으로 발표했습니다. 현재 AWS, Azure, GCP와 같은 클라우드 공급자들은 Kubernetes 기반의 관리형 Kubernetes 서비스를 제공하고 있으며, Red Hat, IBM, Oracle과 같은 소프트웨어 벤더들은 독자적인 Kubernetes 배포판을 개발하여 제공하고 있습니다. 이러한 다양한 제공자와 제품들이 Kubernetes 생태계를 계속 확장시키고 있습니다.

Kubernetes 관련 기술을 설명하기에는 너무 많은 웹 자료들이 공개되어 있으니 해당 내용을 활용해보시는 건 어떨까요?

3. Conclusion

컨테이너 기술은 소프트웨어 개발과 배포 패러다임을 완전히 변화 시켰으며, Kubernetes는 대규모 애플리케이션 배포와 관리를 혁신적으로 해결한 결과물입니다. Kubernetes는 애플리케이션 배포와 관리에 있어 필수적인 기술로 자리 잡았으며, 앞으로도 클라우드 네이티브 환경에서의 애플리케이션 개발과 관리를 지원하는 핵심 도구로 계속 발전할 것으로 예상됩니다.

오픈소스컨설팅에서 만든 Kubernetes 기반 PaaS 솔루션인 Playce Kube도 사용해 보시길 바랍니다.

References

[1] A Brief History of Containers From the 1970s Till Now, https://blog.aquasec.com/a-brief-history-of-containers-from-1970s-chroot-to-docker-2016

[2] Large-scale cluster management at Google with Borg, https://storage.googleapis.com/pub-tools-public-publication-data/pdf/43438.pdf

[3] Omega: flexible, scalable schedulers for large compute clusters, http://static.googleusercontent.com/media/research.google.com/en//pubs/archive/41684.pdf

[4] Borg, Omega, and Kubernetes, https://queue.acm.org/detail.cfm?id=2898444

[5] A New Era of Container Cluster Management with Kubernetes, https://medium.com/containermind/a-new-era-of-container-cluster-management-with-kubernetes-cd0b804e1409

오픈소스컨설팅 Playce Cloud Team 정진이 입니다. 배우고 지식을 나누며 함께 성장하고 싶습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *

One reply on “Kubernetes 탄생 배경 – 비하인드 스토리”

  • 전필재
    2023년 09월 20일 at 11:22 pm

    좋은 글 고맙습니다.