Container 기술의 역사
1. LXC와 Docker 등장
모든 컨테이너 기술은 LXC에서부터 시작되었다. LXC는 커널 기술을 이용해서 만들어진 컨테이너 기술이다. 이후 libcontainer라는 기술이 등장하였고, libcontainer 기술을 활용해서 만들어진 기술이 Docker이다. LXC와 Docker는 모두 컨테이너를 만들어 주지만, LXC는 운영체제를 컨테이너 가상화로 나누기 위한 목적이며, Docker는 앱을 띄우기 위한 목적으로 주로 사용한다. rkt 또한 존재한다. Docker보다 보안성은 좋지만 사용성 면에서는 좋지 않다.
컨테이너를 생성하는 것은 container runtime이다. k8s에서는 Pod라는 단위를 이용해서 실행하는데, 하나의 Pod에는 1개 이상의 컨테이너가 있을 수 있다.
Docker Engine
실제 Docker에서 컨테이너를 만들어 주는 것은 containerd라는 프로그램이다. 해당 기술은 libcontainer를 활용해서 만들어졌다.
Kubelet
container runtime이 받을 수 있는 형태로 API 요청을 보낸다. 이때 Docker, rkt를 선택적으로 사용했다. 하지만 현재는 Docker와 containerd를 따로 분리하게 되어 runtime이 늘어날 때마다 kubelet을 건드려야 했으므로, CRI라는 컨테이너 런타임 인터페이스를 만들었다. 이를 바탕으로 Docker, containerd, rkt에서 Kubernetes API를 연결하는 형식으로 작동한다.
OCI
컨테이너 환경이 유명해지면서 많은 컨테이너가 등장하게 되었다. 이에 따라 container의 규약이 만들어졌다.
CRI-plugin의 등장
Docker의 기능 패치마다 Kubernetes도 같이 해야 했으므로 해당 문제를 해결하기 위해서 만들어졌다.
