본문 바로가기
IT모든것/베이직

클라우드 용어 3탄 쿠버네티스

by godmulzu 2023. 5. 12.

빠른 IT환경의 트렌드인 클라우드의 속도에 놀라면서도 공부해야 할 양이 방대하다는... 슬픈 현실..

특히나 정보가 너무나 방대한 나머지 머릿속에 정리하는 것이 생각보다 쉽지 않아서 끊임없이 보면서 노력 중인 1인이다. 서두가 너무 길어지면 안되는 마음으로.. 클라우드 용어 "쿠버네티스"에 대해서 정리를 해보았다.

 

쿠버네티스란?


반응형

가상화에 있는 OS를 거쳐 컨테이너화된 애플리케이션을 배포, 관리, 확장할 때 수반되는 다양한 수동 프로세스를 자동화하는 오픈소스플랫폼

장점 : 컨테이너를 오케스트레이션 하여 시스템 및 효율성 확대 / 속도 및 관리 개선

*오케스트레이션 : 여러 개의 컴퓨터 시스템, 애플리케이션 및/또는 서비스를 조율하고 관리하는 것

쿠버네티스(Kubernetes)

참고자료 : https://kubernetes.io/ko/docs/concepts/overview/



가상화와 Container의 차이점

 

1. 가상화 기술

- Hypervisor를 통해 HW를Emulation 하는 방법으로 가상 이미지마다 Guest OS를 사용해야 함

- VM은 일반적으로 크기가 기가바이트 단위. 일반적으로 VM은 자체 OS를 포함하고 있어 리소스 집약적인 기능 여러 개를 동시에 수행할 수 있음. VM에서 사용할 수 있는 리소스가 늘어남에 따라 VM은 전체 서버, OS, 데스크탑, 데이터베이스, 네트워크를 추상화, 분할, 복제, 에뮬레이션 할 수 있음.

 

2. Container

- Container kernel를 공유하는 방법으로 Host OS 하나에서 여러 OS를 가상화함.

- 컨테이너는 일반적으로 크기가 메가바이트 단위. 앱보다 크거나 실행하는 데 필수적인 모든 파일이 컨테이너에 패키징 되는 것은 아님. 특정 작업을 수행하는 단일 기능이 컨테이너에 패키징되는 경우가 많음. 컨테이너는 경량화 속성과 공유 운영 체제(OS)로 인해 여러 환경 간에 매우 쉽게 이동 가능


가상화와 Container

 

- 가상화의 고질적인 문제점

1. 거대한 이미지 사이즈 : VM은 템플릿 관리는 하지만, 사이즈가 커서 재사용성을 높이기 어려움

2. 느린 시작 시간 : 부팅 시 Hypervisor - OS -미들웨어 - Application까지 실행되어야 함

3. VM 간의 환경 불일치 : VM 생성 후 개별로 변경 사항을 관리하기 때문에 VM 간 구성이나 환경이 불일치

 

- Container를 통한 가상화 기술의 문제점 해결

1. 작은 이미지 사이즈 : 컨테이너는 레이어 개념으로 이미지에 파일을 추가/삭제하여 관리하고, 레이어 사이즈를 최적화하여 이미지 사이즈를 최소화

2. 빠른 시작 시간 : 컨테이너는 분리된 프로세스 형식으로 OS 부팅이 필요 없기 때문에 부팅 시간을 최소화할 수 있음

3. 높은 이동성(Portability) : 어플리케이션에 필요한 라이브러리나 의존 파일들을 이미지에 포함하기 때문에 환경에 의해 발생되는 문제가 거의 없음

= 컨테이너들은 OS를 가상화하여 여러 개의 컨테이너를 OS 커널에서 직접 실행함. 컨테이너는 기존의 가상화 기술보다 훨씬 가볍게 동작하며, OS 커널을 공유하고 시작 시간이나 종료 시간이 빠르고 메모리를 훨씬 적게 차지함.


Docker를 사용하면 좋은 점

 

★ Environment disparity 문제 해결

- 예를 들어, 개발을 완료하고 이를 서버에 올리기만 하면 되는 상황이라고 가정할 때 코드를 서버에 올렸는데 작동을 제대로 안 하는 상황 발생.

이유는, 내 컴퓨터는 Windows를 쓰는데 서버가 Linux 서버인 경우 = Environment disparity

이 경우 Docker를 통해 다른 머신에서도 같은 환경을 구현할 수 있다.

→ docker를 윈도에 설치하고, 서버에도 설치해서 docker 파일을 생성하고 내가 구현하고 싶은 환경을 설정하면 됨(ex. ubuntu, python, git, postgre 등등)

  + 이후 서버와 윈도우에 각각 파일을 주면 docker가 그 파일을 읽고 필요한 걸 다운로드하고 해당 설정한 환경과 같은 VC를 컴퓨터에 만듦

 

+ 도커를 사용하면 각각의 환경에 따른 VC를 만들 수 있다 = 도커는 독립적인 컨테이너이기 때문 = 그래서 하나의 서버 내에 다양한 컨테이너들을 관리할 수 있게 된다(ex. DJ jango, node js, java )

  = 서버의 java 앱이 인기가 많아지면 그냥 java container의 개수를 늘리면 됨, 트래픽이 줄면 해당 컨테이너 수를 다시 줄이면 됨

  = docker 덕분에 매번 새로운 서비스를 만들 때마다 새로운 서버를 사고, 설정할 필요가 없게 된다. 원할 때마다 docker를 통해 새로운 환경을 설정하고 시작할 수 있음.

 

▶ 결론적으로,

1. 원하는 개발 환경을 파일에 저장하면, docker는 이를 내가 원하는 어떤 머신에든 해당 환경을 시뮬레이션해준다.

2. 이러한 환경들은 각기 독립적으로 존재하기 때문에 원하는 무슨 환경이든 모듈식으로 관리 가능하다.

+ 그래서 python, java, DB서버 등을 막 추가해서 살 필요가 없다. docker 하나면 모든 독립적 운용이 가능함.