1.1 Understanding the need for a system like Kubernetes
kubernetes를 본격적으로 시작하기 전에 하나의 단일 어플리케이션을 작은 서비스 단위로 나눈 마이크로 서비스의 등장과 이러한 어플리케이션을 실행하는 인프라의 변화를 알아보도록 하자.
1.1.1 Moving from monolithic apps to microservices
기존의 monolithic app과 새로운 microservices 방식의 차이를 알아보자.
Monolithic App
- 모두 단일 프로세스로 실행되기 때문에 긴밀하게 결합되어 하나의 프로그램으로 개발, 배치, 관리해야하는 구성요소로 되어 있음, 그렇기에 어플리케이션의 한 부분에 대한 변경은 전체 어플리케이션의 재배포를 요구한다.
- 일반적으로 어플리케이션 실행에 충분한 리소스를 제공할 수 있는 성능의 서버가 필요하고, 시스템에 증가하는 부하에 대처하려면 CPU, 메모리, 기타 서버 구성요소를 추가하여 스케일 업 하거나 어플리케이션 전체를 스케일 아웃하야한다.
Microservices
- Monolithic의 여러 문제들 때문에 복잡한 단일 어플리케이션을 마이크로 서비스라는 독립적으로 배포 가능한 더 작은 구성요소로 분할하기 시작, 각 마이크로 서비스는 독립 프로세스로 실행되며, 간단하고 잘 정의된 API를 통해 다른 마이크로 서비스와 통신한다.
- 마이크로서비스는 RESTful (REpresentational State Transfer) API를 노출하는 HTTP와 같은 동기 프로토콜을 통해 통신하거나 AMQP(Advanced Message Queuing Protocol)와 같은 비동기 프로토콜을 통해 통신한다.
- 특정 언어에 얽매이지 않고, 각 마이크로 서비스에 가장 적합한 언어로 개발이 가능하다.
- 각 마이크로 서비스는 상대적으로 정적인 외부 API를 가진 독립 실행형 프로세스이기 때문에 각 마이크로 서비스를 개별젹으로 개발하고 배포할 수 있다. 마이크로 서비스 하나를 변경하더라도 다른 서비스를 변경하거나 재배치할 필요가 없다.
1.2 Introducing container technologies
kubernetes는 Linux 컨테이너 기술을 사용하여 실행 중인 어플리케이션의 격리를 제공하므로, kubernetes 자체에 대해 살펴보기 전에 Kubernetes가 자체적으로 수행하는 작업과 Docker, rkt 같은 컨테이너의 기본 사항을 알고 있어야 한다.
COMPARING VIRTUAL MACHINES TO CONTAINERS