티스토리 뷰

쿠버네티스 정리

쿠버네티스는 다수의 컨테이너를 효율적으로 배포, 확장, 관리하기 위한 시스템이다. 컨테이너화된 애플리케이션을 클러스터 환경에서 자동으로 배포하고 필요에 따라 확장과 축소하며 장애가 발생했을 때 복구까지 담당한다. 흔히 docker compose와 비교되지만 compose가 단일 서버 내 다수 컨테이너 관리에 초점을 둔다면 쿠버네티스는 여러 서버에 걸친 대규모 컨테이너 오케스트레이션을 지원한다. docker compose의 확장판으로 이해할 수 있지만 더 많은 기능을 제공한다.

 

주요 장점

컨테이너 관리 자동화로 배포, 업데이트, 롤백을 자동 처리하고 다수의 파드로 들어온 요청을 균등하게 분배해 로드 밸런싱을 한다. 트래픽 상황에 따라 파드 개수를 자동으로 늘리거나 줄여 쉬운 스케일링이 있고 셀프 힐링을 통해 파드가 죽으면 자동으로 새 파드를 띄워 상태를 유지한다.


파드란

도커에서 컨테이너가 실행 단위라면 쿠버네티스에서는 파드가 실행 단위이다. 파드는 쿠버네티스에서 가장 작은 배포 단위이며 보통 1 파드 = 1 컨테이너 구조로 운영된다. 예외적으로 사이드카 패턴처럼 서로 밀접히 결합된 여러 컨테이너를 한 파드에 담는 경우도 있다. 파드 내부 컨테이너들은 네트워크 네임스페이스를 공유한다 따라서 같은 파드 안에서는 localhost로 통신이 가능하다. 파드 자체는 고유한 ip를 갖고 클러스터 내부 네트워크와는 독립되어 있다. 외부에서 접근하려면 포트 포워딩이나 서비스를 통해 접근해야 한다.

 

디플로이먼트(Deployment)

파드의 수를 지정하는 대로 여러 개의 파드를 쉽게 생성 가능하고 파드가 비정상적으로 종료된 경우 알아서 새로 파드를 생성해 파드 수를 유지해 준다 동일한 구성의 여러 파드를 일괄적으로 중지, 삭제, 업데이트를 하기 쉽다.

 

쿠버네티스의 서비스(Service)

외부로부터 들어오는 트래픽을 받아 파드에 균등하게 분배해 주는 로드밸런서 역할을 하는 기능으로 실제 서비스에서 파드에 요청을 보낼 때 포트 포워딩이나 파드 내로 직접 접근해서 요청을 보내지 않는다 서비스를 통해 요청을 보내는 게 일반적이다. 

 

오브젝트

쿠버네티스에서 파드, 디플로이먼트, 서비스와 같은 모든 구성 요소를 오브젝트라고 부릅니다. 이 오브젝트들은 YAML 또는 JSON 파일로 정의되어 쿠버네티스에 제출한다.


k3s

쿠버네티스의 경량화 버전으로 설치가 간단하고 리소스 사용량이 적다. 테스트 환경 등에서 자주 쓰이며 프로덕션에서도 경량 클러스터가 필요한 경우 활용된다. 학습용으로 ec2에서 직접 k8s를 설치하는 것보다 k3s를 사용하는 것이 효율적이다.


컨테이너 철학과 내 잘못된 설정

기존 모놀리식에서 마이크로서비스한다고 서비스들 나누면서 서비스들을 하나의 컨테이너에 묶어 테스트를 하곤 했다. 하지만 해당 행위는 알고 보니 컨테이너의 철학에 어긋난다는 거였다. docker 관련해서 공부를 자세히 하지 않았던 이유가 크다. 이번 쿠버네티스를 공부하면서 알게 되어 다행이라고 생각한다. 

 

먼저 컨테이너의 철학은 단일 프로세스, 단일 책임 원칙이다. 하나의 마이크로서비스는 하나의 컨테이너 하나의 파드 그리고 서비스를 가지는 것이 베스트이다. 여기서 언급한 서비스는 쿠버네티스의 서비스를 말한다.

 

쿠버네티스는 컨테이너 단위로만 상태를 관찰 유지합니다. 내부 프로세스가 죽어도 컨테이너가 살아 있으면 정상으로 보기 때문에 하나의 컨테이너 안에 여러 서비스가 존재한다면 알기 어렵고 치유가 불가능하다.

 

쿠버네티스 기반 마이크로서비스 아키텍처 이해하기

마이크로서비스 아키텍처에서 각 마이크로서비스는 독립적으로 배포 및 확장이 가능하다. 이때 쿠버네티스 환경에서 구현할 경우 일반적으로 하나의 마이크로서비스는 하나의 컨테이너, 파드로 구조를 따른다. 예를 들어 토큰 서비스, 사용자 서비스 2개의 서비스가 있다면 각 독립적인 컨테이너와 파드로 구성되며 총 2개의 컨테이너와 2개의 파드가 된다.

 

쿠버네티스에서는 각 마이크로서비스마다 서비스 오브젝트가 존재합니다. 서비스는 특정 파드 집합에 대한 접근을 보장하는 로드밸런서 역할을 수행합니다. 클라이언트는 개별 파드의 ip를 알 필요 없이 해당 서비스로 요청을 전달하면 서비스는 뒤에 있는 파드로 트래픽을 분산시켜 준다. 2개의 마이크로서비스가 존재한다면 2개의 서비스가 구성되어 각 마이크로서비스의 전용 로드밸런서로 이해하면 좋을 거 같다.

 

마이크로서비스는 트래픽 상황에 따라 개별적으로 확장할수 있다. 2개의 마이크로서비스가 각 파드 1개씩 유지하면서 사용자 트래픽이 급증했다 가정한다면 사용자 서비스의 디플로이먼트만 복제를 늘려 파드를 2개로 확장할 수 있다 이때 전체 파드 수는 3개가 되며 서비스 수는 변하지 않고 여전히 2개이다. 중요한 점은 서비스 개수는 늘어나지 않고 단지 특정 마이크로서비스에 속한 파드 수만 증가한다는 점이다. 서비스는 늘어난 파드들 사이에서 자동으로 트래픽을 로드밸런싱 한다.

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/10   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함