노드 상태 모니터링
노드 상태 모니터링 (Monitor Node Health)
Node Problem Detector는 노드의 상태를 모니터링하고 보고하는 데몬이에요. Node Problem Detector를 DaemonSet으로 또는 독립형 데몬으로 실행할 수 있어요. Node Problem Detector는 다양한 데몬에서 노드 문제에 대한 정보를 수집하고, 이 상태를 Node Condition이나 Event로 API 서버에 보고해요.
Node Problem Detector를 설치하고 사용하는 방법은 Node Problem Detector 프로젝트 문서를 참고해요.
출처: 문서
본문
시작하기 전에
Kubernetes 클러스터가 있어야 하고 kubectl 명령줄 도구가 클러스터와 통신하도록 구성되어 있어야 해요. 이 튜토리얼은 컨트롤 플레인 호스트가 아닌 노드가 최소 두 개 있는 클러스터에서 실행하는 것을 권장해요. 아직 클러스터가 없다면 minikube를 이용해 만들거나, 아래 Kubernetes 플레이그라운드 중 하나를 사용할 수 있어요.
제한 사항 (Limitations)
- Node Problem Detector는 커널 문제 보고에 커널 로그 형식을 사용해요. 커널 로그 형식을 확장하는 방법은 다른 로그 형식 지원 추가를 참고해요.
Node Problem Detector 활성화
일부 클라우드 프로바이더는 Node Problem Detector를 애드온으로 활성화해요. kubectl로 또는 Addon DaemonSet을 만들어 Node Problem Detector를 활성화할 수도 있어요.
kubectl로 Node Problem Detector 활성화
kubectl은 Node Problem Detector의 가장 유연한 관리를 제공해요. 기본 구성을 덮어써 환경에 맞추거나 사용자 정의 노드 문제를 감지할 수 있어요. 예를 들어:
- node-problem-detector.yaml과 유사한 Node Problem Detector 구성을 만들어요. 시스템 로그 디렉터리가 사용 중인 OS 배포판에 맞는지 확인해야 해요.
- kubectl로 node problem detector를 시작해요.
Addon 파드로 Node Problem Detector 활성화
사용자 지정 클러스터 부트스트랩 솔루션을 사용하고 기본 구성을 덮어쓸 필요가 없다면, Addon 파드를 활용해 배포를 더 자동화할 수 있어요.
node-problem-detector.yaml을 만들고, 구성 파일을 컨트롤 플레인 노드의 Addon 파드 디렉터리 /etc/kubernetes/addons/node-problem-detector에 저장해요.
구성 덮어쓰기
기본 구성은 Node Problem Detector의 Docker 이미지를 빌드할 때 내장돼요.
하지만 ConfigMap을 사용해 구성을 덮어쓸 수 있어요.
config/의 구성 파일을 변경해요.- ConfigMap
node-problem-detector-config를 만들어요. - ConfigMap을 사용하도록 node-problem-detector.yaml을 변경해요.
- 새 구성 파일로 Node Problem Detector를 다시 만들어요.
Node Problem Detector가 클러스터 Addon으로 실행되면 구성을 덮어쓰는 것은 지원되지 않아요. Addon manager는 ConfigMap을 지원하지 않아요.
문제 데몬 (Problem Daemons)
문제 데몬(problem daemon)은 Node Problem Detector의 하위 데몬이에요. 특정 종류의 노드 문제를 모니터링하고 이를 Node Problem Detector에 보고해요. 지원되는 문제 데몬 유형은 여러 가지가 있어요.
- SystemLogMonitor 유형의 데몬은 시스템 로그를 모니터링하고 미리 정의된 규칙에 따라 문제와 메트릭을 보고해요. filelog, kmsg, kernel, abrt, systemd 같은 다양한 로그 소스에 대한 구성을 사용자 지정할 수 있어요.
- SystemStatsMonitor 유형의 데몬은 건강 관련 다양한 시스템 통계를 메트릭으로 수집해요. 구성 파일을 업데이트해 그 동작을 사용자 지정할 수 있어요.
- CustomPluginMonitor 유형의 데몬은 사용자 정의 스크립트를 실행해 다양한 노드 문제를 호출·확인해요. 구성 파일을 업데이트해 서로 다른 문제를 모니터링하는 여러 사용자 정의 플러그인 모니터를 사용하고 데몬 동작을 사용자 지정할 수 있어요.
- HealthChecker 유형의 데몬은 노드에서 kubelet과 컨테이너 런타임의 건강 상태를 확인해요.
다른 로그 형식 지원 추가하기
시스템 로그 모니터는 현재 파일 기반 로그, journald, kmsg를 지원해요. 새로운 로그 감시자(log watcher)를 구현해 추가 소스를 더할 수 있어요.
사용자 정의 플러그인 모니터 추가하기
커스텀 플러그인을 개발해 Node Problem Detector를 확장해 어떤 언어로든 작성된 모니터 스크립트를 실행할 수 있어요. 모니터 스크립트는 종료 코드와 표준 출력에서 플러그인 프로토콜을 따라야 해요. 자세한 내용은 플러그인 인터페이스 제안을 참고해요.
내보내기 (Exporter)
내보내기(exporter)는 노드 문제 및/또는 메트릭을 특정 백엔드에 보고해요. 지원되는 내보내기는 다음과 같아요.
- Kubernetes exporter: 이 내보내기는 노드 문제를 Kubernetes API 서버에 보고해요. 일시적인 문제는 Event로, 영구적인 문제는 Node Condition으로 보고해요.
- Prometheus exporter: 이 내보내기는 노드 문제와 메트릭을 Prometheus(또는 OpenMetrics) 메트릭으로 로컬에 보고해요. 명령줄 인자로 내보내기의 IP 주소와 포트를 지정할 수 있어요.
- Stackdriver exporter: 이 내보내기는 노드 문제와 메트릭을 Stackdriver Monitoring API에 보고해요. 구성 파일로 내보내기 동작을 사용자 지정할 수 있어요.
권장 사항과 제한
클러스터에서 Node Problem Detector를 실행해 노드 상태를 모니터링하는 것을 권장해요. Node Problem Detector를 실행할 때 각 노드에 추가 리소스 오버헤드가 발생할 수 있어요. 보통은 문제없어요. 그 이유는:
- 커널 로그가 상대적으로 천천히 증가해요.
- Node Problem Detector에 리소스 한도가 설정돼요.
- 높은 부하에서도 리소스 사용량이 허용 가능해요. 자세한 내용은 Node Problem Detector 벤치마크 결과를 참고해요.