Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

끄적끄적

컨테이너 본문

클라우드

컨테이너

yenacathy97 2020. 7. 9. 19:55

도커가 나오고 많은 기업들이 도커와 쿠버네티스를 활용하여 컨테이너를 사용하고 있다. 컨테이너 기술의 개념과 이점을 알아보자. 여러 블로그를 참고하여 요약 및 정리하였다. 

컨테이너의 정의

컨테이너는 호스트 OS상에 컨테이너를 만들고 어플리케이션을 작동시키기 위해 필요한 라이브러리, 어플리케이션 등을 하나로 모아 마치 별도의 서버인 것처럼 사용할 수 있게 만드는 것이다. 소수의 서버를 많은 서버처럼 활용할 수 있다.

하드웨어를 가상화하는 가상머신과 달리 커널을 공유하는 방식이므로 실행속도가 빠르고 성능상의 손실이 거의 없다.

컨테이너의 종류

컨테이너에는 시스템 컨테이너, 애플리케이션 컨테이너 두 종류가 있다.

시스템 컨테이너

컨테이너 기술을 사용해 운영체제 위에 하드웨어 가상화 없이 운영체제를 실행하는 컨테이너. 다수의 프로세스가 같은 환경을 공유하는 것을 목표로 한다. 대표적인 런타임은 LXD, LXC가 있다.

* 컨테이너 런타임: 컨테이너를 실행하고 관리하는 도구

 

LXC(Linux Container)

최초의 컨테이너. cgroup과 네임스페이스 분리를 사용하여 별개의 프로세스와 네트워킹 스페이스를 가진 가상환경을 만든다.

* cgroup: Linux control groups. 유저 프로세스의 리소스 사용을 분리하여 관리하는 리눅스 커널의 기능. CPU, 메모리, 디스크 네트워크를 할당하고 관리하는 기능을 한다.

* namespace: 호스트와 별개의 공간으로 프로세스 트리, 사용자 계정, 파일시스템, IPC 운영체제 수준의 가상화 기술이다. 리눅스 커널을 공유하면서 프로세스를 격리된 환경에서 실행하는 기술이다. 컨테이너로 실행된 프로세스는 커널은 공유하지만 리눅스 스페이스, 컨트롤 그룹, 루트 디렉터리 격리 등 커널 기능을 활용하여 격리되어 실행한다.

 

LXC 컨테이너의 구조

애플리케이션 컨테이너

컨테이너 기술을 활용하여 하나의 애플리케이션(프로세스)를 실행하는 것을 목표로 한다. 독립적인 환경을 가진다는 점에서 시스템 컨테이너와 동일하지만 단 하나의 프로세스를 실행한다는 점에서 확장이 쉽고 관리 요소가 적다. 대표적인 런타임은 도커가 있다.

 

도커

초기에는 LXC 기반으로 컨테이너를 생성하고 동작했지만 현재는 containerd, runc 기반으로 동작한다. 리눅스 운영체제에서 지원하는 다양한 기능을 사용해 컨테이너를 실행하기 위한 별도의 환경(파일 시스템)을 준비하고 리눅스 네임스페이스와 다양한 커널 기능을 조합해 프로새스를 실행시켜준다. 하나의 프로세스(컨테이너)를 실행하기 위한 별도의 환경을 구축하는 일을 지원하고 도커는 바로 프로세스를 격리시켜 실행해주는 도구라 할 수 있다. 

 

도커의 구조

도커를 사용해야하는 이유

컨테이너를 사용하지 않아도 이전까지 서버를 운용해왔기에 왜 굳이 컨테이너를 통해 다시 환경을 구축해야하는지 의문이 들 수 있다. 도커의 장점은 무엇일까

 

변화하지 않는 실행환경 확보

같은 기능을 하는 서버라 해도 각 서버마다 운영 기록이 다르기 떄문에 운영체제, 컴파일러, 설치된 패키지 등 차이점이 발생하고 이러한 차이가 장애를 일으키기도 한다. 이렇게 서로 다른 서버가 존재하는 상황을 눈송이 서버라고 한다.  눈송이처럼 각 모양이 다르다 해서 붙혀진 이름이다. 하지만 도커는 도커 파일로 이미지를 만들어 두면, 서버가 구성되는 시점이 이미지를 만든 시점으로 고정된다. 이 이미지를 사용하면 1년전에 배포하거나 오늘 배포하여도 같은 시점으로 배포할 수 있다.

구성 시점을 고정할 수 있는 도커

코드를 통한 실행환경 구축 및 애플리케이션 구성

도커는 코드를 통해 서버를 구축한다. 이는 서버 제작 과정에 견고함과 유연성을 더할 뿐 아니라 다른 이가 만든 서버를 소프트웨어를 사용하듯 가져다 쓸 수 있고 여러대에 배포할 수 있는 확장성을 가진다.

 

실행환경과 애플리케이션의 일체화로 이식성 향상

도커 이미지는 컨테이너를 구성하는 파일 시스템과 실행할 애플리케이션 설정을 하나로 합친 것으로 컨테이너를 생성하기 위한 템플릿이다. 애플리케이션과 환경을 같이 묶어서 빌드 할 수 있게 함으로써 환경의 차이를 최소한으로 줄인다. 빌드된 이미지는 도커가 설치된 머신이라면 어디서든 실행할 수 있다.

 

* 도커 이미지: 도커 컨테이너를 구성하는 파일 시스템과 실행 할 애플리케이션 설정을 하나로 합친 것으로 컨테이너를 생성하는 템플릿 역활을 한다. 

* 도커 컨테이너: 도커 이미지를 기반으로 생성되며, 파일시스템과 애플리케이션이 구체화되어 실행되는 상태이다.

* 도커 파일: 도커 이미지를 만들 때 필요한 설정 파일이다. 도커 이미지 빌드 시에 이 파일의 인스터럭션을 참조하여 이미지를 만든다.

* 인스트럭션: 도커 파일 내에 있는 명령어들을 말한다. 

 


컨테이너 기반 서비스 운영 사례

구글 

구글에서는 2014년 모든 서비스를 컨테이너에서 운영하고 있고 매주 20억 개 이상의 컨테이너를 실행했다. Gmail, YouTube, Google 검색 등 구글의 모든 제품은 컨테이너에서 실행된다.
엔씨소프트

게임을 출시할때에는 게임말고도 많은 서비스가 필요하다. 수백개의 서비스들이 마이크로 서비스화되어 쿠버네티스에 올라가 있다. 사용자가 접속하는 프론트 웹페이지, 커뮤니티 사이트, 결제 정보, 결제동작 등 많은 서비스가 마이크로 서비스로 되어있다. 여러 게임에 공통적으로 들어가는 기능, 웹이나 커뮤니티 사이트, 빌링, 거래 페이지, 계정 등 여가지 공통 서비스를 마이크로 서비스화 하여 작게 만들어두어 쿠버네티스에 올라가 있다고 한다 
토스

컨테이너를 사용하면 장애 원인 파악부터 해결까지 걸리는 시간을 최대한 확보할 수 있다는 점에서 장애 대응에 유리해진다. 쿠버네티스를 활용하면 장애 발생 시 다른 장비로 빠르게 이동시킬 수 있어 고객들이 겪는 시간을  최소한으로 줄일 수 있다. 위험을 분산시키면서 안정적으로 운영할 수 있고 장애를 시뮬레이션 해볼 수 있는 케이어스 엔지니어링 시도가 가능해졌다.  
타다

컨네이너 오케스트레이션 플랫폼으로 배포 자동화, 스케일링 등 여러가지 운영적 편의성을 제공한다.  kops를 이용하여 클러스터를 직접 띄우는 방식에서 EKS를 이용하여 직접 오브젝트를 만들기보다 helm을 이용하는 방식로 개선하였다.

* EKS: 쿠버네티스 클러스터의 마스터 노드들을 쉽게 띄우고 관리해주는 서비스. 
* helm: 쿠버네티스의 패키지 관리 툴. 쿠버네티스 패키지 배포를 가능하게 한다.


그외에도 넷플릭스, 에어비엔비, 틴더, 삼성전자, 당근마켓, 우아한 형제들 등이 컨테이너로 서비스를 운영하고 있다고 한다. 

 

오케스트레이션

오캐스트레이션 솔루션은 컨테이너를 쉽고 빠르게 배포, 확장, 관리를 자동화해주는 플랫폼을 의미한다. 실제 상용 서비스를 하다보면 여러 서버를 운영해야하는데, 매번 배포마다 여러대 서버에 컨테이너를 배포하는 전체과정을 수동으로 제어해야했다. 이러한 불편함을 해결하기 위해 컨테이너 오케스트레이션 시스템이 나타났다. 컨테이너 오케스트레이션을 사용하면 서비스에 사용할 서버들을 클러스터로 구성하기만하면 명령어 한번으로 자동 배포할 수 있다. 또 클러스터 일부에 장애가 발생하면 시스템이 알아서 장애가 발생한 서버에 있는 컨테이너를 정상운영중인 다른 서버로 옮겨가면서  실행하며 트래픽도 자동으로 중지시키고 새로 옮겨서 시행시킨다. 대표적인 예로는 쿠버네티스, 도커스웜, LXC 등이 있다.

 

오케스트레이션 툴의 기능

  • 노드 클러스터링
  • 컨테이너 로드 밸런싱
  • 컨테이너의 배포와 복제 자동화
  • 컨테이너 장애 복구가능
  • 컨테이너 자동 확장 및 취소
  • 컨테이너 스케줄링
  • 로깅 및 모니터링

 

쿠버네티스

쿠버네티스는 구글에서 개발한 오픈소스화된 프로젝트이다. 

 

장점 

  • 현재 가장 인지도가 높고 기능이 많은 오케스트레이션 툴
  • 내장된 기능이 많아 애드온이 불필요함

단점

  • 쿠버네티스의 구성과 개념에 대한 이해가 필요하다
  • 학습해야할 부분이 많고 소규모 프로젝트에서 구축하기가 쉽지않다. 

Docker Swarm

도커 스웜은 도커 컨테이너 플랫폼에 통합된 컨테이너 오케스트레이션 툴이다. 최초의 도커 스웜은 도커와 별개로 개발되었으나 도커 1.1.2 버전부터는 도커 스웜모드라는 이름으로 합쳐졌다.

 

장점

  • 도커 명령어와 도커 컴포즈를 포함한 도커의 모든 기능이 내장되어 있다.
  • 도커 이외의 별도의 툴 설치가 필요하지 않다.
  • 타 오케스트레이션 툴에 비해 복잡하지않고 다루기 쉽다.

단점

  • 타 오케스트레이션 툴에 비해 기능이 단순하여 세부적 설정이 어렵다..
  • 초대형 노드 클러스터링에는 무리가 있다. 

https://dololak.tistory.com/351

https://www.hanumoka.net/2018/11/16/docker-20181116-docker-docker-basic/

https://team-platform.tistory.com/48

https://jungwoon.github.io/kubernetes/2020/01/19/Kubernetes-1/

https://brainbackdoor.tistory.com/119

https://www.44bits.io/ko/post/why-should-i-use-docker-container

https://junlab.tistory.com/216

'클라우드' 카테고리의 다른 글

쿠버네티스의 볼륨 -2  (0) 2020.08.12
쿠버네티스의볼륨 - 1  (0) 2020.08.10
도커 스웜 시작하기  (0) 2020.07.31
컨테이너 생성하기  (0) 2020.07.17
서버 가상화의 분류  (0) 2020.07.03
Comments