Kubernetes

[ DEVOCEAN OpenLab ] 쿠버네티스 등장배경

jogaknabi_1023 2024. 5. 1. 16:22
[ 학습 주제 ]

1. Kubernetes의 등장배경
2. CNCF (Cloud Native Computing Foundation) 이란?
3. Kubernetes 설치
4. Kubernetes Architecture 확인
5. Kubernetes에서 Pod란?
6. Pod는 어떻게 뜨는 것일까?
7. Kubernetes Resource 알아보기
8. Custom Controller
9. CNCF 프로젝트

 

 

1.  Kubernetes 의 등장 배경

2008년 이전

chroot(프로세스의 루트 디렉토리를 변경하는 것. 하지만 프로세스별 액세스 컨트롤 못함.)

FreeBSD Jail(OS 가상화 기술. 가상화 환경에서 파일시스템, 프로세스, 네트워크 분리할 수 있음.)

 

2008년 이후

현재 컨테이너 기술의 바탕이 되는 LXC(Linux Container)을 IBM에서 발표한다. LXC는 프로세스 자원 이용량을 제어하는 기능인 cgroup과 논리적으로 시스템 자원을 분할하는 Namespace를 합친 Linux 컨테이너 엔진이다.

 

2013년

도커라는 회사에서 LXC를 잘 활용할 수 있도록 Docker 라는 기술을 오픈소스로 발표한다.

도커는 Containerfile이란 메니페스트를 만들고, 이미지를 공유할 수 있는 Container Hub를 만들면서, Container 기술은 급속히 발전하게 된다.

 

2015년

구글에서 컨테이너 스케줄러/오케스트레이션 도구인 kubernetes v1.0 을 오픈소스로 발표한다.

 

2016년

구글이 다양한 기술적인 문제들을 오픈소스로 해결하기 위해 kubernetes를 CNCF 재단에 기증한다.

 

여기서 구글이 kubernetes 를 개발하기 위해 어떤 과정을 거쳤는지 알아보겠다. 총 3가지 주요 컨테이너 관리 시스템을 개발하였다.

 

Borg

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

 

Brog은 구글에서 개발한 최초의 통합 컨테이너 관리 시스템으로, 컨테이너를 사용하여 장기 실행 서비스(prod)와 배치 작업(non-prod)을 효과적으로 관리한다.

 

< Brog 의 구성요소 >

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

 

 

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 시스템으로 통합되었습니다.

 

 

Kubernetes

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

 

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

 

 

자료 출처:

https://tech.osci.kr/kubernetes-%ED%83%84%EC%83%9D-%EB%B0%B0%EA%B2%BD-%EB%B9%84%ED%95%98%EC%9D%B8%EB%93%9C-%EC%8A%A4%ED%86%A0%EB%A6%AC/