들어가기 앞서..
해당 포스트는 "쿠버네티스 인 액션"을 공부하며 중요하다고 생각되는 내용을 정리한 것입니다.
도커 컨테이너 플랫폼의 이해와 쿠버네티스의 아키텍처에 대해 학습한다.
도커는 컨테이너를 여러 시스템에 쉽게 이식 가능하게 하는 최초의 컨테이너 시스템이다.
애플리케이션뿐만 아니라 라이브러리, 종속성, 심지어 운영체제 파일시스템까지도 도커를 실행하는 다른 컴퓨터에 애플리케이션을 프로비저닝하는 데 사용할 수 있다.
도커로 패키징된 애플리케이션을 실행하면 함께 제공된 파일시스템 내용을 정확하게 볼 수 있다. 어떤 환경이라도 같이 패키징된 파일시스템만 사용할 수 있다.(호스트 파일시스템을 못본다는 말은 아님.)
도커는 컨테이너 이미지가 여러 이미지에 공유되고 재사용될 수 있는 레이어로 구성되어 있다. 동일한 레이어를 포함하는 다른 컨테이너 이미지를 실행할 때 다른 레이어가 이미 다운로드된 경우, 이미지의 특정 레이어만 다운로드하게 된다.
도커는 애플리케이션을 패키징, 배포, 실행하기 위한 플랫폼이다. 애플리케이션을 전체 환경과 함께 패키지화할 수 있다. 애플리케이션에서 필요한 몇 가지 라이브러리나 운영체제의 파일시스템에 설치되는 모든 파일을 포함시킬 수 있다. 도커를 사용하면 패키지화 한 이미지를 원격 저장소로 전송하여 관리, 배포 할 수 있다.
도커의 세 가지 개념
이미지 : 애플리케이션과 해당 환경을 패키지화한 것. 애플리케이션에서 사용할 수 있는 파일시스템과 이미지가 실행될 때 실행되어야 하는 실행파일 경로 같은 메타데이터가 포함되어있다.
레지스트리 : 도커 이미지를 저장하고 다른 사람이나 컴퓨터 간에 해당 이미지를 쉽게 공유할 수 있는 저장소다. 이미지를 빌드할 때 빌드하는 컴퓨터에서 이미지를 실행하거나 이미지를 레지스트로 Push한 다음 다른 컴퓨터에서 이미지를 Pull 할 수 있다.
컨테이너 : 도커 기반 컨테이너 이미지에서 생성된 일반적인 리눅스 컨테이너다. 실행 중인 컨테이너는 도커를 실행하는 호스트에서 실행되는 프로세스지만호스트와 호스트에서 실행 중인 프로세스와는 격리되어있다. 또, 프로세스는 리소스 사용이 제한되어 있으므로 할당된 리소스의 양만 엑세스하고 사용할 수 있다.
도커 이미지는 여러 개의 읽기 전용 레이어로 구성되고 파일이 추가되거나 수정되면 새로운 레이어가 생성된다. 레이어란 기존 이미지에 추가적인 파일이 필요할 때 전체를 다시 다운로드 받는 방법이 아닌 추가된 파일만 받기위한 개념이다.
예를 들어, 도커 이미지로 되어있는 애플리케이션 버전 2.4에서 2.5로 업데이트를 한다했을 때, 2.5를 새로 다운로드 받는 것이 아닌, 2.5에서 추가된 내용만 다운로드 받는다는 것이다.
레이어는 이미지 스토리지 공간을 줄이는 도움을 준다. 각 레이어는 동일 호스트에 한 번만 저장된다.
이미지 출처
기존 이미지(컨테이를 실행할 때의)의 레이어는 Read-Only고, 기존 레이어 위에 새로 생성된 레이어는 Read-Write상태이다. Commit되지 않은 레이어는 컨테이너 종료 시에 같이 소멸된다.
기존 레이어에서 어떤 것을 삭제한다면, 보여지지만 않을 뿐 실제로는 지워지지 않는다.
컨테이너는 이미지 Layer에 읽기/쓰기(read-write) Layer를 추가하는 것으로 생성/실행된다.
이론적으로 컨테이너 이미지는 도커를 실행하는 모든 리눅스 시스템에서 실행될 수 있지만, 모든 컨테이너가 호스트의 리눅스 커널을 사용한다는 점을 주의해야한다.
컨테이너화된 애플리케이션이 특정 버전의 커널이 필요하다면 정상적으로 동작하지 않을 수 있다.
커널 뿐 아니라 하드웨어도 마찬가지로, 특정 하드웨어 아키텍처용으로 만들어진 컨테이너화 된 애플리케이션은 해당 아키텍처 시스템에서만 실행될 수 있다는 점을 알아야한다.
쿠버네티스는 컨테이너화된 애플리케이션을 쉽게 배포하고 관리할 수 있게 해주는 소프트웨어 시스템이다.
각 호스트에 애플리케이션을 수동으로 배포하지 않고도 이기종 애플리케이션을 실행할 수 있다. 쿠버네티스를 사용하면 모든 노드가 하나의 컴퓨터인 것처럼 수천 대의 컴퓨터 노드에서 애플리케이션을 실행할 수 있다. 기본 인프라를 추상화하고 개발과 운영팀 모두의 개발, 배포, 관리를 단순화한다.
쿠버네티스는 마스터 노드와 여러 워커 노드로 구성된다. 개발자가 애플리케이션 매니페스트를 마스터에 게시하면 쿠버네티스는 해당 애플리케이션을 워커 노드 클러스터에 배포한다. 구성요소가 어떤 노드에 배포되든지 상관없다. 특정 애플리케이션이 함께 실행되도록 워커노드를 지정할 수 있다.
하드웨어 관점에서 쿠버네티스 클러스터는 여러 노드로 구성되며, 두 가지 유형으로 나눌 수 있다.
클러스터를 제어하고 작동시킨다. 하나의 마스터 노드에서 실행하거나 여러 노드로 분할되고 복제되어 고가용성을 보장할 수 있는 여러 구성 요소로 구성된다.
구성요소
컨트롤 플레인의 구성 요소는 클러스터 상태를 유지하고 제어하지만 애플리케이션을 실행하진 않는다. 이는 노드에 의해 이뤄진다.
워커 노드는 컨테이너화된 애플리케이션을 실행하는 시스템이다. 애플리케이션을 실행하고 모니터링하며 애플리케이션에 서비스를 제공하는 작업은 다음 구성요소에 의해 수행된다.
구성요소