본문 바로가기

DevOps/도커(Docker)

파드, 컨테이너, 도커, 쿠버네티스의 관계

쿠버네티스를 말할 때 도커를 자주 이야기하곤 한다. 쿠버네티스를 이루는 기본 오브젝트가 파드이고, 파드는 컨테이너로 이루어져 있으며, 컨테이너를 만들고 관리하는 도구가 도터이기 때문이다. 최근에는 도커를 몰라도 쿠버네티스를 배우고 사용하는것이 가능해졌다. 여러 공급사에서 만들어 둔 컨테이너 이미지로 쿠버네티스에 컨테이너 인프라 서비스를 만들수 있다는 뜻이다. 컨테이너 관리 기술이 발전했고, 여러 어플리케이션이 이미 도커 이미지로 배포되어 배포된 이미지를 사용하면 도커를 몰라도 쿠버네티스 환경을 만들고 사용할 수 있다.

하지만 쿠버네티스를 이루고 있는 기술 자체는 컨테이너를 벗어날 수 없다. 상황에 따라서는 직접 만든 소스코드를 빌드해 컨테이너로 만들고 이를 쿠버네티스에서도 사용할 수도 있다. 지속적인 통합과 배포 그리고 모니터링은 모구 컨테이너로 관리된다. 따라서 컨체이너와 이를 다루는 도커를 자세히 알면 컨테이너 인프라 환경을 한층 더 이해할 수 있다.

 

먼저 현재 쿠버네티스의 시스템을 기술적으로 정의해 보자. 파드들은 워커 노드라는 노드 단위로 관리하며, 워커 노드와 마스터 노드가 모여 쿠버네티스 클러스터가 된다. 그리고 파드는 1개 이상의 컨테이너로 이루어져 있다.

파드는 쿠버네트스로부터 IP를 받아 컨테이너가 외부와 통신할 수 있는 경로를 제공한다. 그리고 컨테이너들이 정상적으로 작동하는지 확인하고 네트워크나 저장공간을 서로 공유하게 한다. 파드가 이러한 환경을 만들기 때문에 컨테이너들은 마치 하나의 호스트에 존재하는 것처럼 작동할 수 있다. 정리하면, 파드를 돌보는것이 쿠버네티스 워커노드이며, 워커노드를 돌보는 것이 쿠버네티스 마스터이다. 그런데 쿠버네티스 마스터 역시 파드(컨테이너)로 이루어져 있다.

구조를 이루는 가장 기본인 컨테이너는 하나의 운영체제 안에서 커널을 공유하면 개별적인 실행 환경을 제공하는 격리된 공간이다. 여기서 개별적인 실행 환경이란 CPU, 네트워크, 메모리와 같은 시스템 자원을 독자적으로 사용하도록 할당된 환경을 말한다. 개별적인 실행 환경에서는 실행되는 프로세스를 구분하는 ID도 컨테이너 안에 격리돼 관리된다. 그래서 각 컨테이너 내부에서 실행되는 어플리케이션들은 서로 영향을 미치지 않고 독립적으로 작동할 수 있다.

각 컨테이너가 독립적으로 작동하기 때문에 여러 컨테이너를 효과적으로 다룰 방법이 필요해졌다. 오래전부터 유닉스나 리눅스는 하나의 호스트 운영 체제 안에서 자원을 분리해 할당하고, 실행되는 프로세스를 격리해서 관리하는 방법을 제공했다. 하지만 파일 시스템을 설정하고 자원과 공간을 관리하는 등의 복잡한 과정을 직접 수행해야 해서 일부 전문가만 사용할 수 있다는 단점이있었다. 이런 복잡한 과정을 쉽게 만들어 주는 도구로 등장한 것이 도커이다. 도커는 컨테이너를 사용하는 방법을 명령어로 정리한 것이라고 보면 된다. 도커를 사용하면 사용자가 따로 신경쓰지 않아도 컨테이너를 생성할 때 개별적인 실행 환경을 분리하고 자원을 할당한다.

 

 

 

 

 

출처:

"컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 - 조훈,심근우,문성주 지음/길벗출판사" 책을 기반으로 실습한 내용입니다.