본문 바로가기
카테고리 없음

[Kubernetes] Docker? Kubernetes?

by 까다로운오리 2024. 2. 12.

 

 

Docker? Kubernetes? 를 들어가기 전에 이 두 개념에서 공통적으로 언급되는 개념인 Container가 있습니다.

우리는 Docker와 Kubernetes의 개념을 공부하기 전, Container의 개념 먼저 살펴보고자 합니다.

 

컴공 / 전자과 / 임베디드 같은 학과에서 졸업하신 분들이라면, 학생 때 다들 Linux를 써보신 적이 있으실 겁니다.

저도 운영체제, 네트워크는 안배웠어도 Linux환경에서 C언어를 배웠으니까요.

 

그때 우리는 가장 처음 어떠한 작업을 했는지 기억나십니까?

 

저같은 경우는 바로 VM (Virtual Machine)을 설치하고, 그 위에 Linux환경을 만들었습니다.

 

VM이 생소하신 분들을 위해 간략히 설명드리자면, VM은 sw로 구축된 컴퓨터라고 생각하시면 됩니다. 실제 컴퓨터 환경을 소프트웨어로 구현하여 컴퓨터 안에 또 다른 컴퓨터를 만드는 것입니다. sw로 구축된 컴퓨터기때문에, 자체 CPU, 메모리, 네트워크 인터페이스 및 스토리지를 갖춥니다. 또한 한 개의 물리적 서버를 두개 이상의 가상 서버로 만들어 서로 다른 운영체제를 구축할 수 있습니다. 그렇기 때문에 저는 대학생때 Window 운영체제가 탑재되어있는 컴퓨터에서 VM으로 Linux환경을 구축할 수 있었던 것이겠죠

 

왜 컨테이너를 설명하는데 VM을 먼저 설명하느냐? 바로 VM과 컨테이너는 비슷한 기능을 하지만 다르게 동작하기 때문입니다.

 

VM vs Container

 

먼저 VM 환경 구축 부터 설명드리겠습니다. 한 서버에서는 기본적으로 어떤 운영체제든간 Host OS가 올라갑니다. Host OS는 흔히 우리가 아는 Window, Max, Linux같은 운영체제를 뜻합니다. VM의 경우는 가상화를 시키기 위해 Hypervisor가 있고 그 위에 Guest OS를 두어 여러가지 어플리케이션을 설치한 후 서비스를 제공합니다. 

Hypervisor는 단일 물리적 머신에서 여러 가상 머신을 실행하는 데 사용할 수 있는 소프트웨어이며 게스트 운영체제와 그 운영체제에서 구동되는 프로그램을 실제 물리적 장치에서 분리하는 프로세스입니다.

 

이제 Container 구축에 대해서 설명 드리면, VM 환경 구축과 마찬가지로 Host OS를 올려두고 그 위에 Cotainer를 가상화 시켜주는 여러 SW를 사용하는데 현재 Docker가 가장 많이 사용되고 있습니다. 드디어 Docker가 언급되었습니다. 그럼 다시 Docker를 정의해볼까요?

 

Docker는 개발자가 컨테이너를 빌드, 배포 및 실행하도록 지원하는 소프트웨어 플랫폼입니다.

(Behind : dotCloud라는 회사가 Linux Container를 만들고 Docker라고 이름을 변경하면서, 지금 우리가 아는 Docker가 되었습니다.)

 

우리가 Docker를 쓴다는 가정하에, 다시 돌아가 Container를 가상화 시켜주는 Docker로 Container를 제작해 봅시다. 그럼 이 Container는 어떤 기능을 하는것일까요? 

Container

구글에 컨테이너를 치면 나오는 사진입니다. 우리가 아는 위 사진의 컨테이너는 어떤 기능을 하죠?

 

1. 음식, 가구, 옷, 전자제품 등을 넣을 수 있습니다. 

2. 외부의 환경과 격리되어 있습니다.

3. 운송이 가능하여 어디에서든 적재할 수 있습니다.

 

SW에서의 Container 개념도 마찬가지입니다.

 

1. Application, Library, 구성파일이 포함되어 있습니다.

2. 다른 Application으로부터 논리적으로 격리되어있습니다.

3. 이동이 가능하며 어디에서나 실행할 수 있습니다.

 

다시 VM과 Container의 비교 그림을 살펴보겠습니다.

VM vs Container

VM에는 있지만, Container에는 없는 것이 있습니다. 바로 '이것'이 없어서 Container가 더욱 인기를 얻게 되었습니다.

바로 Guset OS인데요. 이 Guest OS는 GB단위이지만, Container는 이 Guest OS 즉, 운영체제가 포함되어있지 않아 MB단위 입니다. 때문에 운영체제 부팅이 필요 없이 빠르게 서비스를 시작할 수 있습니다.

 

이렇게 Docker는 하나의 서비스를 Container로 가상화 시켜 배포하는 역할을 합니다. 

 

그럼 쿠버네티스는 무엇이고 왜 컨테이너와 도커 그리고 쿠버네티스는 항상 같이 언급되는 것 일까요?

 

예시를 들어보겠습니다.

(예시는 인프런 임프로님의 '대세는 쿠버네티스' 강좌를 참고했습니다.)

 

웹 서비스를 하는 회사가 있다고 생각해 봅시다. 이 웹 서비스 회사가 3개의 서비스를 오픈했다고 했을 때, 아침에는 A 서비스의 접속량이 높고, 점심에는 B, 저녁에는 C 서비스의 이용률이 높습니다. A, B, C 서비스의 최대 트래픽을 감당하기 위해선 각각 3대의 서버가 필요하다고 가정해봅시다. 또 장애가 생길 경우를 고려하여 추가적으로 한대의 서버씩 갖고있다고 가정합시다. 그럼 이 서비스 회사는 총 12개의 서버가 필요하겠죠?

 

하지만, 이 회사의 실제 필요한 자원을 4대분의 서버라고 합시다. 또 장애를 고려하여 여분의 한대의 서버까지 더해 실질적으론 총 5개의 서버만 필요하다고 가정합시다. 실제로 12대의 서버가 아닌 5대의 서버만 사용하게끔 만드면 얼마나 좋을까요?

 

Container는 위의 예시처럼 서버를 효율적으로 설계하는 것이 가능합니다.

또한 실제로 효율적인 서버 자원할당을 해주는 기능이 바로 컨테이너 오케스트레이션 (Container Orchestration) 이고,

컨테이너 오케스트레이션의 종류중 하나가 구글에서 개발한 Kubernetes 입니다.

 

 

그럼 Kubernetes를 좀 더 딥하게 들어가보도록 하겠습니다.

 

Kubernetes엔 크게 4가지 기능이 있습니다.

1. Auto Healing

2. Rolling Update & Rollback

3. Load Balancing

4. Auto Scaling

 

 

 

(이 페이지에서 이어서 계속...)