7.2 레플리카셋 (ReplicaSet): 파드 복제 및 관리
앞서 우리는 쿠버네티스의 가장 기본적인 배포 단위인 파드에 대해 자세히 알아보고, YAML 파일을 이용해 직접 파드를 생성하고 관리하는 실습까지 진행했습니다. 파드 하나만으로도 애플리케이션을 실행할 수 있지만, 실제 운영 환경에서는 단일 파드만으로는 부족한 경우가 많습니다. 예를 들어, 더 많은 트래픽을 처리하기 위해 동일한 파드를 여러 개 실행하고 싶거나, 특정 파드에 문제가 생겨 종료되었을 때 자동으로 새로운 파드가 생성되어 서비스를 계속 유지하고 싶을 때 어떻게 해야 할까요? 바로 이러한 요구사항을 해결해 주는 것이 이번 7.2절에서 다룰 ‘레플리카셋(ReplicaSet)’입니다.
레플리카셋은 이름에서 알 수 있듯이, 지정된 수만큼의 파드 복제본(replica)이 항상 안정적으로 실행되도록 보장하는 역할을 합니다. 마치 복제 기계처럼, 우리가 “이 파드를 3개 만들어줘!”라고 레플리카셋에 알려주면, 레플리카셋은 꾸준히 3개의 파드가 실행 중인 상태를 유지하려고 노력합니다. 이것이 바로 6.2.1절에서 살펴볼 레플리카셋의 핵심 역할입니다. 만약 실행 중인 파드의 수가 우리가 설정한 복제본 수보다 적으면 레플리카셋은 새로운 파드를 생성하고, 반대로 더 많으면 불필요한 파드를 삭제하여 항상 원하는 개수를 맞춥니다. 더 중요한 것은, 만약 실행 중이던 파드 중 하나가 노드 장애나 컨테이너 오류 등으로 인해 예기치 않게 종료되더라도, 레플리카셋은 이 상황을 감지하고 즉시 새로운 파드를 생성하여 서비스를 복구합니다. 이러한 기능을 ‘자동 복구(Self-healing)’라고 하며, 애플리케이션의 가용성을 높이는 데 매우 중요한 역할을 합니다.
그렇다면 레플리카셋은 어떤 파드를 몇 개나 관리해야 하는지 어떻게 알 수 있을까요? 그 해답은 바로 7.2.2절에서 분석할 ‘레플리카셋 명세(Spec)’에 담겨 있습니다. 레플리카셋 YAML 파일을 작성할 때, 우리는 크게 세 가지 중요한 정보를 명시해야 합니다. 첫 번째는 replicas 필드로, 말 그대로 몇 개의 파드 복제본을 유지할 것인지를 숫자로 지정합니다. 두 번째는 selector 필드인데, 레플리카셋이 어떤 파드들을 자신의 관리 대상으로 삼을지를 식별하는 방법을 정의합니다. 보통 파드의 레이블(label)을 사용하여 “이러한 레이블을 가진 파드들은 내가 관리할게!”라고 선언하는 것이죠. 마지막으로 가장 중요한 template 필드에는, 레플리카셋이 새로운 파드를 생성해야 할 때 어떤 모습의 파드를 만들어야 하는지에 대한 ‘파드 명세’가 그대로 들어갑니다. 즉, 파드를 만들기 위한 ‘틀’ 또는 ‘템플릿’이라고 생각하시면 됩니다. 이 세 가지 요소가 레플리카셋 동작의 핵심입니다.
이론을 배웠으니 이제 직접 경험해 볼 차례입니다. 7.2.3절에서는 [실습]을 통해 레플리카셋을 직접 생성하고 스케일링하는 과정을 함께 해볼 것입니다. 먼저, 앞서 파드 명세를 작성했던 것처럼 레플리카셋 YAML 파일을 작성하여, 예를 들어 2개의 동일한 Nginx 파드를 실행하도록 정의해 봅니다. 그리고 kubectl apply 명령으로 레플리카셋을 생성하면, 쿠버네티스가 자동으로 2개의 파드를 만들어 실행하는 것을 확인할 수 있을 겁니다. 더 나아가, 실행 중인 파드 중 하나를 강제로 삭제해보면 레플리카셋이 어떻게 자동으로 새로운 파드를 생성하여 개수를 맞추는지, 즉 자동 복구 기능을 직접 목격할 수 있습니다. 또한, kubectl scale 명령어를 사용하여 실행 중인 레플리카셋의 replicas 수를 동적으로 변경(예: 2개에서 5개로 늘리거나, 5개에서 1개로 줄이는 등)하여 애플리케이션의 부하에 따라 파드 수를 유연하게 조절하는 스케일링 작업도 경험해 볼 것입니다.
레플리카셋은 파드의 고가용성과 확장성을 확보하는 데 있어 매우 기본적인 컨트롤러입니다. 비록 요즘에는 레플리카셋을 직접 사용하기보다는, 롤링 업데이트나 롤백과 같은 더 발전된 배포 기능을 제공하는 ‘디플로이먼트(Deployment)’를 통해 간접적으로 활용하는 경우가 대부분이지만, 디플로이먼트의 내부 동작 원리를 이해하기 위해서는 레플리카셋의 개념을 확실히 알아두는 것이 중요합니다. 그럼, 레플리카셋을 통해 어떻게 우리의 애플리케이션을 더욱 견고하게 만들 수 있는지 함께 자세히 살펴보시죠!