You are a developer, not a coder.

Docker & Kubernetes 개념 본문

Development Tip

Docker & Kubernetes 개념

Mattmk 2020. 1. 31. 15:35
SMALL

1. Docker

컨테이너 기반의 오픈소스 가상화 플랫폼 이다.

기술적인 개념이며, 컨테이너를 띄우는 역할을 한다.

  • 컨테이너 : 애플리케이션 & 애플리케이션을 구동하는 환경을 격리한 공간.

 

가상머신(vm) VS Docker 차이점

-기존 가상머신(vm)은 해당하는 모든 자원을 사용하던 것이였지만, Docker는 자원을 필요한 만큼 격리하여 컨테이너에 할당을 하기 때문에

효율적이고 배포가 빠르다는 점이 있다. 하지만, 컨테이너 하나가 자원을 많이 사용하게 되면 장애가 발생하게 된다는 단점이 존재 한다.

 

2. Kubernetes

컨테이너 오케스트레이션 툴 이다.

  • 오케스트레이션 : 컨테이너를 스케줄링/ 클러스터링/ 서비스 디스커버리/ 로깅 및 모니터링 하는 것

쿠버네티스는 점진적 업데이트를 제공 한다.

  • 점진적 업데이트 : 서비스 중단 없이 업데이트 가능

만약, 특정 컨테이너가 죽었다면 즉각 그 컨테이너를 복제 생성해서 서비스를 유지 한다. (Self Healing)

컨테이너를 사용하면 하나의 큰 어플을 서비스 단위로 잘라 빠르게 배포가 가능 하다.

그리고 각각 분리해서 사용하기 때문에  다른 프로세스에서의 다른 기능들에 영향을 미치지 않는다.

 

기존 서비스별 아케텍처 VS MSA 아키텍처

Kubernetes는 다음과 같은 MSA 아키텍처 환경을 구현하기에 가장 적합한 기술로 세부적으로 기능들을 분리해서 컨테이너화를 구현하여 사용

하여아 효율적으로 Kubernetes를 사용 한다고 볼 수 있다.

  • MSA 아키텍처 : 거대한 어플리케이션을 기능별로 세세하게 나누어 변경/조합이 가능하게 설계를 한것

 

3. Kubernetes 와 Docker 의 차이점

- Kubernetes : 여러 컨테이너를 관리/예약 하는 도구

-Docker : 여러 컨테이너를 관리/예약하는 플랫폼

이미지를 컨테이너에 띄우고 실행하는 기술이 Docker, 이런 도커를 기반으로 컨테이너를 관리하는 서비스가 Kubernetes 이다.

또한, Docker는 "한 개의 컨테이너"를 관리하는데 최적화 되어있고, Kubernetes는 "여러개의 컨테이너"를 관리하는데 최적화 되어 있다.

 

4. 부록

기초적이지만, 본인이 생각하여 정리한 내용을 다뤄보자 한다.

쿠버네티스의 장점

1. 시간 모니터링을 진행, 이상을 발견하면 자동으로 재가동 해줌

- 컨테이너기반의 어플리케이션을 작업할 경우, 많은 컨테이너들이 있을 것이다.

그안의 컨테이너 서비스를 예시를 들면 로그인, 인증, 결제시스템 등이 있을 것이다.

그중 컨테이너 1개가 다운됬다는 가정을 들어보자.

어떤 중요한 컨테이너가 다운이 됬는지, 대응을 늦게 해줘도 무관한 컨테이너가 다운이 되었는지 우리는 알길이 없다.

쿠버네티스가 없었다면 우리는 모니터링을 실시간으로 하여, 다운이된 컨테이너를 찾아 밤이든 낮이든 관리를 해야 유지를 할 수 있다.

이 모든것을 자동화하여 해주는것이 쿠버네티스의 첫번째 장점이라 생각한다.

 

2. 진입 가능한 사용자의 수의 니즈가 있을 경우, 자동으로 컨테이너를 늘리고 줄여 준다.

- 이부분을 예시를 주면 딱 좋다고 생각하는건 이벤트페이지로 볼 수 있다.

우리가 티몬에서 선착순 100명 이벤트로 맥북을 1원에 살 수 있다고 가정해 보자.

이런 이벤트를 진행하기 전, 티몬이라는 업체에서는 마케팅부분으로 생각하고 맥북을 1원가격에 납풉할 계획을 가질 것이다.

이 이벤트를 본 유저들은 모두들 이벤트에 당첨되고 싶어서 해당시간에 페이지에 진입 하겠지?

이렇게 사용자 수가 평균 접속하는 인원이 500명이라 가정하고, 이벤트 시간이 되었을때는 10000명이라 가정해 보자.

몇배수로 급증하는지 대충 짐작이 갈것이다.

이럴때, 니즈를 줄여주는 방법으로 쿠버네티스가 해주는건 똑같은 컨테이너를 복제하여 그 수를 자동으로 늘려주고,

이벤트가 끝났을때, 늘려준 컨테이너들을 다시 줄여 준다. (설정해둔 컨테이너 미니멈사이즈)

이 부분을 두번째 장점이라 생각한다.

 

3. 업데이트될 어플리케이션을 재가동할 필요가 없어 진다.

컨테이너들은 각각 하나의 도커파일들 이다.

도커파일이 변경 된다면 어떻게 해야 될까?

기존 도커를 죽이고, 재빌드 해야 될 것이다.

그런데, 쿠버네티스를 사용하면 서버를 재가동할 필요가 없어지게 된다. (blue-green, canari 배포 방식 사용.)

놀라운 장점 이라 생각이 든다.

쿠버의 큰~~~장점!

LIST
Comments