본문 바로가기
12. 쿠버네티스란

쿠버네티스에서 어플리케이션 실행

by 김덕환 2020. 5. 1.
반응형

쿠버네티스에서 어플리케이션을 실행하려면 먼저 하나 이상의 컨테이너 이미지들을 패키지로 만들어 이미지 레지스트리에 푸시한 후 쿠버네티스 API 서버에 어플리케이션의 디스크립션을 게시해야 한다. 

 

디스크립션에는 컨테이너 이미지 또는 어플리케이션 컴포넌트가 들어 있는 이미지가 있고, 컴포넌트 간 관련성 및 노드 배치 정보도 있다. 각 컴포넌트의 실행 복제본 수를 지정할 수도 있다. 그 뿐만 아니라 디스크립션에는 내부 클라이언트나 외부 클라이언트에 서비스를 제공하는 컴포넌트가 들어 있고, 단일 IP 주소로 노출해 다른 컴포넌트에서 검색할 수 있어야 한다. 

 

 

디스크립션이 컨테이너의 실행을 가져오는 방법

 

스케줄러는 API 서버가 어플리케이션의 디스크립션을 처리할 때 각 그룹에서 필요한 연산 리소스와 각 노드의 할당되지 않은 리소스를 기반으로 사용 가능한 워커 노드로 컨테이너의 지정 그룹을 예약한다. 그런 다음 해당 노드의 Kubelet은 필요한 컨테이너 이미지를 가져와 컨테이너를 실행하도록 컨테이너 런타임에 지시한다. 

 

 

실행 중인 컨테이너 유지

 

어플리케이션이 실행되면 쿠버네티스는 어플리케이션의 배포된 상태가 사용자가 제공한 디스크립션과 일치하는지 지속적으로 확인한다. 예를 들어 웹 서버의 인스턴스 다섯 개를 항상 실행하도록 지정하면 쿠버네티스는 정확하게 다섯 개의 인스턴스를 실행 상태로 유지한다. 쿠버네티스는 이런 인스턴스 중 하나가 제대로 작동하지 않는 경우, 인스턴스를 자동으로 다시 시작한다. 

 

이와 마찬가지로 쿠버네티스는 전체 워커 노드가 종료되거나 액세스할 수 없게 되면 노드에서 실행 중인 모든 컨테이너의 노드를 새로 선택하고, 이 노드 중에서 컨테이너를 실행한다. 

 

 

복제본 수 확장

 

쿠버네티스는 어플리케이션이 실행되는 동안 복사본의 수를 늘릴지, 줄일지를 결정할 수 있으며, 각각 추가 복사본을 스핀업하거나 초과 복사본을 중지시킬 수 있다. 심지어 최적의 복제본 수를 결정하는 일을 쿠버네티스에게 맡길 수도 있다. CPU 부하, 메모리 사용량, 초당 쿼리, 어플리케이션에서 노풀하는 그 외의 메트릭과 같은 실시간 메트릭에 따라 숫자를 자동으로 조정할 수 있다. 

 

 

이동 중인 대상에 접근하기

 

쿠버네티스는 컨테이너를 다른 워커 노드로 이동시킬 수도 있다. 이는 실행 중이던 노드에 장애가 발생하거나 다른 컨테이너의 공간을 확보하기 위해 노드에서 제거된 경우에 발생할 수 있다. 컨테이너가 외부 클라이언트 또는 클러스터에서 실행 중인 다른 컨테이너에 서비스를 제공하는 경우, 컨테이너가 계속 클러스터 주위를 이동하고 있다면 해당 컨테이너를 어떻게 적절하게 사용할 수 있을까? 그리고 컨테이너가 복제돼 전체 클러스터에 분산되어 있을 때 클라이언트가 서비스를 제공하는 컨테이너에 어떻게 연결할 수 있을까?

 

클라이언트가 특정 서비스를 제공하는 컨테이너를 찾기 쉽게 하려면 쿠버네티스에게 동일한 서비스를 제공하는 컨테이너의 정보와 모든 고정 IP 주소를 공개하고, 해당 주소를 클러스터에서 실행 중인 모든 어플리케이션에 노출해야 한다. 이 작업은 환경 변수를 통해 실행되지만 클라이언트는 이전 DNS를 통해 서비스 IP를 조회할 수도 있다. Kube-proxy는 서비스를 제공하는 모든 컨테이너의 서비스 연결 부하를 분산한다. 따라서 클러스터의 다른 노드로 이동하는 경우에도 클라이언트가 항상 해당 컨테이너에 연결할 수 있다. 

반응형