Docker와 쿠버네티스

hyunyoungjin·2020년 7월 22일
7
post-thumbnail

목차

  • 도커 설명
  • 컨테이너 설명
  • 쿠버네티스 설명

도커란?


도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다. 그렇다면 도커가 해결하는 문제점은 무엇이고, 도커가 왜 좋은걸까요?

도커는 'environment disparity'라는 문제점을 해결하기 때문입니다. 예를 들어보겠습니다.

만약 당신이 개발자이고, 코드를 서버에 올리려는데, 당신의 컴퓨터가 윈도우이고 서버가 리눅스여서 환경이 달라 오류가 나는 상황이라면 도커가 이 문제점을 해결해 줄 수 있습니다.

Docker를 통해 다른 머신에서도 같은 환경을 구현할 수 있게 되는 것입니다.

💡 사용법
1. 윈도우와 서버 양쪽에 도커 설치
2. Dockerfile 생성
3. 구현하고 싶은 환경 설정(ex. 우분투, 파이썬, 깃..등)
4. Dockerfile을 컴퓨터, 서버 양쪽에 줌
5. docker는 그 파일을 읽고 필요한 것을 다운
6. docker는 설정한 환경과 같은 가상 컨테이너를 컴퓨터에 생성

이 과정을 거친 후 당신이 컴퓨터에서 서버로 docker파일과 함께 코드를 업로드 할때 잘 작동할 것입니다.

컨테이너란?

그렇다면 여기서 컨테이너는 무엇일까요. 컨테이너는 애플리케이션과 애플리케이션을 구동하는 환경을 격리한 공간을 뜻합니다.

컨테이너와 가상머신VM의 차이점


가상머신을 사용한 서버들은 다수의 운영 체제를 동시에 실행하기 위해 하이퍼바이저가 필요하고, 그 상위계층에 Guest OS가 각각 설치된 가상머신들을 구동시킵니다.

반면에 컨테이너로 구성된 서버는 위의 그림과 같이, 하이퍼바이저를 사용하지 않고 CPU, RAM, Disk, Network 과 같은 운영체제의 자원을 필요한 만큼 격리하여 컨테이너에 할당합니다.

도커가 가진 컨테이너는 독립적이고, 동적입니다.

만약 당신의 java앱이 인기가 많아지면 java 컨테이너의 수를 늘리고, 다시 트래픽이 줄면 해당 컨테이너 수를 줄이면 됩니다.

즉 docker덕분에 매번 새로운 서비스를 만들때마다 새로운 서비스를 사고, 설정할 필요가 없는 것입니다. 당신이 원할때마다 docker를 통해 새로운 환경을 생성할 수 있습니다.

하나의 같은 서버에서 각기 다른 환경의 컨테이너를 설정할 수 있고, 게다가 이 컨테이너들은 각각 분리, 독립되어 있는 것이기 때문에 더욱 효율적인 것입니다.

쿠버네티스란?


당신이 다음과 같은 상황이라고 가정해봅니다.

💡상황1. 당신이 도커를 이용해서 웹사이트를 배포할 경우
만약 Node js 혹은 장고 웹사이트를 도커 컨테이너에 넣어서 AWS로 보내고 싶다면 이 프로세서에서는 쿠버네티스를 알아야할 필요가 없습니다.

💡상황2.
만약 당신이 마이크로서비스 아키텍쳐를 가지고 있다면, 그래서 어떤 컨테이너는 '유저 업로드'만 다루고, 어떤 컨테이너는 '인증'만 다루고, 어떤건 '결제'만 다루고 있다면 이 모든 컨테이너는 동시에 업로드 되어야 합니다. 많은 컨테이너를 가지고 있으면 문제가 생길수 있는것입니다. 만약 한개의 컨테이너가 죽으면 빠르게 컨테이너를 재시작해야합니다. 그것이 서비스의 핵심 파트일 수 있기 때문이죠.

자동화된 복구(self-healing)

이 때 쿠버네티스가 등장합니다. 컨테이너들을 모니터링하며 컨테이너 중 하나라도 죽으면 쿠버네티스는 그것을 빠르게 재시작 시킵니다.

로드 밸런싱(Road balancing)

만약 1만명의 유저가 접속할 경우, 그러나 당신의 웹/앱은 준비가 되지 않았을 경우 쿠버네티스는 해당 웹사이트의 니즈를 수용할 수 있도록 자동으로 새로운 컨테이너들을 만들 수 있습니다. 니즈가 줄어들면 컨테이너를 지정해둔 최소 숫자로 자동으로 조절됩니다. 이전에는 수동으로 했던 작업을 쿠버네티스가 자동으로 도와주는 것입니다.

무중단(Fault tolerance-FT) 서비스

기업에서는 서버 업데이트를 위해서 사용자들이 잠든 새벽 시간을 활용하거나 긴급 점검의 형태로 서비스를 일시 중단해왔습니다. 하지만, 쿠버네티스는 점진적 업데이트를 제공하기 때문에 서비스를 중단하지 않고도 애플리케이션을 업데이트할 수 있습니다.

호환성(Vendor Lock In 해결)

고객이 A사의 클라우드를 사용하다가 I사의 클라우드로 환경을 이전하고 싶을 때, 서로 다른 업체(Vendor)의 클라우드 제품 간에 호환 문제가 발생하여 이전하기 어려운 상황을 Vendor Lock In이라고 합니다. 쿠버네티스는 도커 컨테이너를 기반으로 하는 오픈소스이기 때문에 사용자들이 특정 업체에 종속되지 않고 클라우드의 환경들을 이전할 수 있습니다.

현재 쿠버네티스는 구글, 마이크로소프트, 아마존 클라우드에서 사용할 수 있으며 다른 마이크로서비스 관리 시스템들도 한 클라우드 플랫폼에 한정되기도 하지만 쿠버네티스로 할 수 있는 가이드를 제시해줘서 한 번 쿠버네티스를 익히면 provider 회사에 상관없이 공통된 마이크로서비스 아키텍쳐 개발이 가능합니다.

요약

중요한 건, 상황마다 다르다는 것이다. 한 개의 인스턴스만 이용하면 쿠버네티스는 필요 없다. 쿠버네티스는 많은 컨테이너 관리에 유용한 것이다.

profile
Cloud, Machine Learning, DeepLearning Study⏳

1개의 댓글

comment-user-thumbnail
2020년 12월 6일

공부중이였는데 많은 도움 되었습니다 !! ㅎㅎ

답글 달기