Kubernetes

Kubernetes 초보 강의 : Kubernetes 개요

브루노W 2023. 2. 13. 21:36

Container 가 왜 필요한가?

 

OS 위에 아래와 같이 node.js, mongoDB, Messaging(ex. Redis), Orchestration(ex. Ansible) 등의 구성요소를 사용하여 애플리케이션을 개발한다고 하면 많은 문제점이 발생할 수 있다.

 

첫 번째, 구성요소들과 OS 간의 호환성 문제

 

두 번째, 구성요소들과 Libraries 간의 호환성, OS에 대한 종속성 문제 (구성요소가 최신 버전으로 업그레이드될 경우 반복)

 

마지막, 신규 담당자가 합류할 때 환경 설정의 어려움 등

 

그래서 이런 호환성 문제를 해결할 수 있는 Docker 라는 기술이 나왔다.

Docker 위에 Container가 실행되고 Container 안의 구성요소들은 다른 Container 안의 구성요소들에게 영향을 주지 않고 수정하거나 변경할 수 있다.

 

Container는 동일한 OS kernel을 공유하지만, 자체 process 또는 service, 자체 network interface, 자체 mount를 가진 완전 히 독입되어 있는 환경이다.

 

Docker 의 작동 방식을 이해하기 위해서 OS 관련 몇 가지 기본 개념을 확인해보자.

Ubuntu, Fedora, Suse 또는 Centos 와 같은 OS는 모두 OS kernel 과 Software로 구성이 된다.

 

OS kernel은 모두 Linux로 동일하게 유지되지만 Software(user interface, driver, compiler, file manager, developer tool 등)는 서로 다르게 구성이 된다.

 

Docker Container는 기본 kernel를 공유하기 때문에 Docker가 설치된 Ubuntu OS 환경에서는 Docker는 debian, fedora, suse 또는 centos 같은 Linux 기반의 Container를 실행할 수 있다. (이 경우, Windows 기반의 Container는 실행 불가)

 

Docker는 동일한 HW에서 다른 OS와 kernel을 가상화하고 실행하기 위한 것이 아니라 Docker의 주된 목적은 애플리케이션을 컨테이너화하고 딜리버리하고 실행하는 것이다.

 

Container와 VM의 차이점은 아래와 같다.

 

OS 위에 Docker가 설치되어 있고 Docker는 Library와 Dependency만으로 실행되는 Container를 관리한다.

그래서 가볍고 부팅 속도도 빠르고 MB 사이즈의 용량만 차지한다.

 

반면, VM은 OS 위에 Hybervisor가 설치되어 있고 그 다음에 VM이 있으며 각 VM은 자체 OS가 있다.

그래서 상대적으로 무겁고 OS를 부팅해야 하기 때문에 부팅 속도도 느리고 GB 사이즈의 용량을 차지한다.

 

또한 Docker는 kernel 등과 같은 Container 간에 더 많은 리소스를 공유하므로 덜 고립되어 있지만, VM은 완전히 고립되어 있다고 볼 수 있다.

 

Container와 image의 차이점은 아래와 같다.

 

이미지는 가상화 세계에서 사용했던 VM 템플릿과 마찬가지로 패키지 또는 템플릿이며 하나 이상의 Container를 만드는데 사용된다.

 

Container는 격리된 이미지에서 인스턴스를 실행하고 있으며 자체 환경과 프로세스를 가지고 있다.

 

전통적으로 개발자가 애플리케이션을 개발한 다음 운영 환경에서 배포하고 관리할 수 있도록 운영팀에 전달한다.

이때 호스트를 설정해야 하는 방법, 설치 전제 조건, 종속성을 구성하는 방법들을 가이드해줘야 한다.

 

Docker를 시용하면 인프라 설정과 관련된 작업이 대부분 Docker 파일 형식으로 이미 구성되어 있어 애플리케이션용 아미지를 생성하여 전달하고 배포할 수 있게 된다.

 

 

* 본 게시글은 udemy "Kubernetes for the Absolute Beginners - Hands-on" 강의 수강 후 공부용으로 작성한 글입니다.