쿠버네티스(Kubernetes) 개념

최초작성일 [2020.01.26]

쿠버네티스는 containerized된 리소스를 대상으로 서비스를 배포, 운영하는 오픈소스 플랫폼이다. 쿠버네티스를 이용하면 여러 컨테이너들을 하나의 호스트에서 작업하는 것처럼 묶어서 배포, 운영 할 수 있고 컨테이너 간의 상호연결 및 auto-scaling 등이 가능하다. (쿠버네티스가 하는 일에 대해 더 알아보려면 여기를 참고.)

쿠버네티스를 이용하여 컨테이너 클러스터들을 관리하려면 컨테이너가 무슨 이미지를 쓰는지, 리플리카(replica)는 몇 대인지, 네트워크 또는 디스크 리소스는 어떻게 쓸 것인지 등의 설정이 필요하다. 이러한 것들은 kubectl 명령어로 설정 한다.

Pod

pod는 같은 리소스를 공유하는 1개 이상의 컨테이너를 캡슐화 해놓은 단위다. 같은 리소스를 공유하는 컨테이너들의 묶음이기 때문에 pod는 스토리지, IP주소, 컨테이너를 실행하는 정책 등을 포함한다. pod의 컨테이너 런타임으로 도커가 제일 많이 쓰인다. (더 자세한 내용은 여기를 참고.)

  • pod에 컨테이너 1개가 실행되는 경우 : 쿠버네티스에서 흔히 쓰이는 구조. 이 때 pod는 컨테이너의 래퍼(wrapper)라고 간주해도 되고 쿠버네티스에서는 pod를 직접 관리한다.

  • pod에 컨테이너 여러개가 실행되는 경우 : 같은 리소스를 공유하고 강하게 결합된 여러 컨테이너들을 구성한다. 1개의 pod에 들어가는 여러 컨테이너들은 대개 1개의 서비스를 제공하는 여러 컴포넌트에 해당한다. pod는 이 컨테이너들이 사용하는 스토리지 리소스를 1개의 개체가 사용하는 것으로 간주한다.

Service

여러 개의 pod들로 구성된 애플리케이션을 단일한 서비스로 노출시킨다. 쿠버네티스는 각 pod에 IP주소와 DNS 이름을 부여하므로 pod들을 대상으로 로드밸런싱이 가능하다. (더 자세한 내용은 여기를 참고.)

쿠버네티스로 운영되는 컨테이너들에 배포를 하면 기존의 pod는 죽고 새로운 pod가 생겨나는데, 매번 다른 pod가 새로 생김으로써 pod의 IP가 바뀐다면 서비스 운영에 문제가 생긴다. 이를 해결하기 위해 service를 사용한다. service는 pod들을 논리적인 묶음으로 정의하여 추상화시키므로 pod가 제공하는 리소스를 사용하는 프론트엔드에서는 바뀐 pod의 IP나 DNS이름을 몰라도 된다.

Node

노드는 pod가 작동하는 물리 또는 가상 머신이다. 노드는 쿠버네티스 클러스터 내 마스터가 관리한다. 노드 1개당 여러개의 pod가 동작할 수 있으며 마스터는 클러스터 내 노드들을 대상으로 pod를 스케줄링한다.

쿠버네티스 노드는 아래 2가지의 속성을 반드시 가진다.

  • 쿠버렛(kuberlet) : 쿠버네티스 클러스터 내의 마스터와 노드 사이의 의사소통을 담당하는 프로세스. kuberlet은 노드 위에서 돌아가는 pod와 머신을 관리한다.

  • 컨테이너 런타임(container runtime) : 레지스트리에서 이미지를 내려받고 애플리케이션을 동작시킨다. 컨테이너 런타임으로 Docker가 가장많이 쓰인다.

출처

Last updated