7.5 데몬셋 (DaemonSet): 모든 노드에 파드 실행
지금까지 우리는 쿠버네티스에서 애플리케이션 파드의 복제본 수를 관리하거나(레플리카셋, 디플로이먼트), 상태를 가진 파드를 특별하게 다루는(스테이트풀셋) 다양한 컨트롤러들을 살펴보았습니다. 이들 컨트롤러는 주로 “몇 개의 파드를 실행할 것인가” 또는 “각 파드가 어떤 고유한 상태를 가질 것인가”에 초점을 맞추었습니다. 하지만 쿠버네티스 클러스터를 운영하다 보면, 때로는 클러스터 내의 모든 (또는 특정 조건을 만족하는) 노드 각각에 정확히 하나의 파드 복제본이 실행되도록 보장해야 하는 경우가 있습니다. 마치 각 방마다 반드시 하나의 감시 카메라를 설치해야 하는 것처럼 말이죠.
예를 들어, 각 노드에서 로그를 수집하여 중앙 로그 저장소로 전송하는 로그 수집 에이전트, 각 노드의 시스템 성능 지표(CPU, 메모리, 네트워크 사용량 등)를 모니터링하는 모니터링 에이전트, 또는 각 노드에 특정 네트워크 설정을 적용하거나 스토리지 데몬을 실행하는 시스템 수준의 유틸리티 등이 이러한 경우에 해당합니다. 이러한 파드들은 클러스터 전체의 특정 노드에서 실행되는 것이 아니라, 각 노드 자체의 기능을 보조하거나 확장하는 역할을 수행합니다.
이러한 요구사항을 충족시키기 위해 쿠버네티스가 제공하는 특별한 컨트롤러가 바로 데몬셋(DaemonSet)입니다. 이름에서 알 수 있듯이, 데몬셋은 마치 시스템 데몬처럼 클러스터의 각 노드에서 특정 파드가 항상 실행되도록 관리합니다. 새로운 노드가 클러스터에 추가되면 데몬셋은 자동으로 해당 노드에도 파드를 배포하고, 노드가 클러스터에서 제거되면 해당 노드의 파드도 자동으로 정리합니다. replicas 필드를 통해 복제본 수를 지정하는 대신, 데몬셋은 “모든 적격한 노드에 하나씩”이라는 원칙으로 동작합니다.
이번 7.5장에서는 클러스터의 모든 노드를 대상으로 작업을 수행해야 할 때 유용하게 사용되는 데몬셋에 대해 자세히 알아볼 것입니다.
- 먼저 7.5.1 데몬셋의 사용 사례에서는 데몬셋이 어떤 상황에서 유용하게 활용될 수 있는지 구체적인 예시들(예: 로그 수집기, 노드 모니터링 에이전트, 클러스터 스토리지 데몬 등)을 통해 살펴볼 것입니다. 이를 통해 데몬셋이 해결하고자 하는 문제 영역과 그 필요성을 명확히 이해하게 될 것입니다.
- 이어서 7.5.2 데몬셋 동작 방식에서는 데몬셋 컨트롤러가 어떻게 클러스터의 노드들을 감시하고, 각 노드에 파드를 스케줄링하며, 노드의 추가 및 제거에 따라 파드를 자동으로 관리하는지 그 내부 메커니즘을 자세히 들여다볼 것입니다. 특히, 특정 노드에만 데몬셋 파드를 실행시키고 싶을 때 사용하는 노드 셀렉터(node selector)나 노드 어피니티(node affinity)/안티-어피니티(anti-affinity), 그리고 테인트(taint)와 톨러레이션(toleration)과의 관계 등도 중요한 개념으로 다뤄질 것입니다. 또한, 데몬셋의 업데이트 전략(예: RollingUpdate, OnDelete)에 대해서도 알아볼 것입니다.
- 마지막으로 7.5.3 [실습] 데몬셋을 이용한 노드 정보 표시 웹서버 배포에서는 직접 데몬셋 YAML 파일을 작성하여, 각 노드의 호스트 이름과 같은 간단한 정보를 표시하는 웹서버 파드를 클러스터의 모든 노드에 배포해 볼 것입니다. 이 실습을 통해 데몬셋이 어떻게 각 노드에 파드를 하나씩 생성하는지, 그리고 새로운 노드가 추가되거나 기존 노드가 제거될 때 데몬셋이 어떻게 반응하는지(만약 테스트 환경에서 노드 추가/제거가 가능하다면) 관찰하며 데몬셋의 동작 원리를 체감할 수 있을 것입니다.
데몬셋은 쿠버네티스 클러스터의 인프라스트럭처 수준에서 동작하는 중요한 구성 요소들을 배포하고 관리하는 데 필수적인 도구입니다. 이 장을 통해 데몬셋의 개념과 활용법을 익히신다면, 클러스터 전체의 기능을 향상시키고 운영 효율성을 높이는 데 큰 도움이 될 것입니다.