도커와 쿠버네티스 비교 예시
컨테이너를 하나만 띄워서 사용해야지! => 도커
0월 0시에, 100개의 컨테이너를 자동으로 생성해야지! => 쿠버네티스
즉, 도커는 ’이미지를, 컨테이너에 띄우고 실행하는 기술’이고
쿠버네티스는 '도커를 관리하는 툴'이라고 생각하시면 됩니다.
따라서, 도커는 '한 개의 컨테이너를 관리’하는 데 최적화 되어있고,
쿠버네티스는 '여러 개의 컨테이너를, 서비스 단위로 관리’하는 데 최적화 되어있습니다.


쿠버네티스는 '컨테이너 오케스트레이션 툴' 입니다.
오케스트레이션이란?

쿠버네티스를 검색하다 보면 위와 같은 사진이 나오는데, 왼쪽부터 전통적 배포(Traditional Deployment), 가상화 배포(Virtualized Deployment) 그리고 컨테이너 중심 배포(Container Deployment)를 의미한다.
전통적 배포는 오래 전부터 쓰이던 방식으로 컴퓨터 한대에 하나의 OS를 설치하고 여러가지 프로그램을 구동하는 전통적인 방식이다. 우리가 컴퓨터를 이용할 때 하나의 컴퓨터에 게임이나 워드 프로그램을 함께 설치해서 사용하는 방법과 같다고 생각하면 된다.
그렇지만 이런식으로 컴퓨터를 사용할 때 우리는 문제에 직면하게 된다. 여러가지 프로그램을 설치하였더니 컴퓨터의 성능이 떨어지거나 프로그램들이 서로 충돌하게 되는 문제점에 맞닥뜨리는데, 이러한 문제를 해결하기 위해 나온 배포 방식이 가상화 배포(Virtualized Deployment) 방식이다.
전통적 배포 방식과 같이 하나의 컴퓨터에 하나의 OS를 설치하는 것까지는 같은데 여기에서는 가상 머신(Virtual Machine)이라는 새로운 개념이 등장한다. 중간에 위치한 하이퍼바이저는 하나의 시스템 상에서 가상 컴퓨터를 여러 개 구동할 수 있도록 해 주는 중간 계층을 의미한다는 정도로만 알고 있으면 된다. 그리고 App은 실행하고자 하는 프로그램, Bin/Library는 프로그램이 실행하는데 필요한 환경과 관련된 파일이라고 생각하면 된다.
가상머신은 말 그대로 가상의 컴퓨터다. 비록 물리적으로 한개의 컴퓨터를 사용하지만, 가상머신을 이용하면 여러 프로그램을 각각의 가상머신에서 실행시킴으로서 프로그램들이 서로 간섭하는 것을 방지할 수 있다. 또한 가상머신은 각각 CPU, 메모리, 저장 장치 등을 개별적으로 할당할 수 있으므로 좀 더 무거운 프로그램에는 더 높은 사양을 할당할 수 있다는 장점이 있다.
다만 이 방식이 전통적 배포 방식보다는 분명 효율적이지만, 가상머신은 완전한 컴퓨터이고 가상머신에 일일이 운영체제를 설치해야 하기 때문에 컨테이너 중심의 배포(Container Deployment)보다는 무거운 편이다.
컨테이너 중심의 배포 방식에서는 ‘하이퍼바이저’라는 부분이 ‘컨테이너 런타임’으로 대체되고, ‘가상머신’ 부분은 ‘컨테이너’로 대체된다.
컨테이너는 가상머신과 달리 프로그램 구동을 위해서 OS를 매번 설치할 필요가 없이 하나의 OS만 사용한다. 컨테이너는 컨테이너 아래에서 일어나는 일에는 관심을 두지 않는다. 즉 한 컨테이너에서 일어나는 문제는 다른 컨테이너에서 구동되는 프로그램에 아무런 영향을 주지 않는다. 따라서 하나의 OS를 공유하더라도 각각의 컨테이너에서 구동되는 프로그램들은 서로의 간섭 없이 독립적으로 실행될 수 있다.
다만, 컨테이너는 어디까지나 OS 위에 존재하기 때문에 OS에서 일어나는 문제에는 영향을 받게 된다. 따라서 한 컨테이너에서 일어난 문제가 OS 환경 자체에 문제를 일으켰다면 다른 컨테이너 역시 그 영향을 받게 될 것이므로 이 점을 유의해야 한다.

컨테이너: 앱이 구동되는 환경까지 감싸서 실행할 수 있도록 하는 격리 기술
컨테이너 런타임: 컨테이너를 다루는 도구 (ex. 도커)
오케스트레이션: 여러 서버에 걸친 컨테이너 및 사용하는 환경 설정을 관리하는 행위
쿠버네티스: 컨테이너 런타임을 통해 컨테이너를 오케스트레이션 하는 도구
모두들 컴퓨터를 사용하면서 여러 프로그램을 설치하여 사용할 것이다. 프로그램을 설치할 때에는 특정 경로에 맞춰 설치를 진행하거나 컴퓨터에 맞는 옵션을 일일이 맞춰줘야 하는 경우가 생긴다. 이렇게 되면 무거운 프로그램들의 경우 서로 충돌하는 경우가 생기기 마련이다.
컨테이너는 이런 상황을 방지하고나 프로그램을 구동하는데 필요한 환경을 격리시켜서 여러 프로그램을 구동하더라도 서로 간섭하는 문제가 생기지 않도록 하는 도구이다.
컨테이너는 프로그램들 사이에 장벽을 세워주는 역할을 한다고 보면 된다. 컨테이너 환경을 묶어서 배포한 컨테이너 이미지라는 프로그램을 내려받아 구동하면 실행되기 때문에, 각종 설정 과정이 줄어 들어서 좀 더 편하게 사용할 수 있다.
많은 개발자들이 도커를 사용해 본 경험이 있을 것이다. 도커가 바로 컨테이너 런타임 프로그램 중 가장 유명한 종류이다.
컨테이너 런타임은 컨테이너를 쉽게 내려받거나 공유하고 구동할 수 있도록 해주는 도구이다.
도커를 많이 이용하지만 도커가 사용하는 컨테이너 규격은 표준화되어있기 때문에 도커가 아닌 다른 컨테이너 런타임을 통해서도 도커로 만든 컨테이너를 구동할 수 있다.
쿠버네티스의 역할은 도커와 같은 컨테이너 런타임을 통해 컨테이너를 다루는 일이다.
자동화된 복구(self-healing)
출처
https://wooono.tistory.com/109
https://velog.io/@yunuchoiii/%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C-%EB%8F%84%EC%BB%A4%EC%99%80-%EC%BF%A0%EB%B2%84%EB%84%A4%ED%8B%B0%EC%8A%A4%EC%9D%98-%EC%B0%A8%EC%9D%B4
https://joyhong-91.tistory.com/50