Host 클러스터

최종 수정: 2026. 4. 8.

Host 클러스터 설치

Host Cluster에 Skuber+ Observability 중앙 서버를 설치하는 방법을 안내합니다.


개요

Host Cluster는 모든 Agent Cluster의 관측성 데이터를 수집하고, 외부 ClickHouse 서버에 저장된 데이터를 조회하여 시각화하는 중앙 서버입니다.

중요: ClickHouse는 Host Cluster 내부가 아닌 외부 별도 VM 서버에 설치됩니다.
ClickHouse 서버 설치는 ClickHouse 서버 설치 문서를 참조하세요.

설치되는 컴포넌트

컴포넌트 역할
Skuber+ Observability Hub 프론트엔드 UI + Alertmanager 통합
o11y-core 백엔드 API
OTel Collector Gateway OTLP 데이터 수신 게이트웨이 (gRPC :4317, HTTP :4318)
Schema Migrator ClickHouse 테이블 스키마 자동 생성/마이그레이션 (Job)

아키텍처


사전 요구사항

  • ClickHouse 서버 설치 완료 — ClickHouse 서버 설치 문서 참조
  • Kubernetes 1.28+ 클러스터
  • kubectlhelm v3.12+ 설치
  • Harbor 레지스트리 접근 가능registry.skuberplus.com (차트 및 이미지)
  • ClickHouse 서버 네트워크 접근 가능 (TCP :9000, HTTP :8123)

설치

Helm 차트 설치

OCI 레지스트리에서 직접 설치합니다.

helm install skuberplus-observability-host \
  oci://registry.skuberplus.com/charts/skuberplus-observability-host \
  --version <차트-버전> \
  --kube-context <host-cluster-context> \
  --namespace skuber-observability \
  --create-namespace \
  --set externalClickhouse.host=<NLB_DNS_OR_IP> \
  --set externalClickhouse.user=default \
  --set externalClickhouse.password='<CLICKHOUSE_PASSWORD>' \
  --set o11yCore.image.tag=<core-이미지-태그> \
  --set o11yHub.image.tag=<hub-이미지-태그> \
  --set o11yHub.additionalEnvs.CH_HOST=<CLICKHOUSE_VM_IP> \
  --set o11yHub.additionalEnvs.CH_PASSWORD='<CLICKHOUSE_PASSWORD>' \
  --set o11yHub.additionalEnvs.SKUBER_ENCRYPTION_KEY=<ENCRYPTION_KEY>

SKUBER_ENCRYPTION_KEY는 DB 설치 시 사용한 동일한 키입니다. S3 credential 암/복호화에 사용됩니다.


설치 옵션

필수 옵션

옵션 설명 예시
--version Helm 차트 버전 26.2.1
--kube-context Host 클러스터의 kubectl 컨텍스트 my-host-cluster
externalClickhouse.host ClickHouse 서버 IP 또는 호스트명 10.0.1.100
externalClickhouse.user ClickHouse 사용자명 default
externalClickhouse.password ClickHouse 비밀번호
o11yCore.image.tag o11y-core 이미지 태그 — 백엔드 API 서버 Wondermove에서 전달
o11yHub.image.tag Hub 이미지 태그 — 프론트엔드 UI 및 Alertmanager 통합 서버 Wondermove에서 전달

ClickHouse 연결 옵션

옵션 기본값 설명
externalClickhouse.host ClickHouse 서버 주소 (필수)
externalClickhouse.user default ClickHouse 접속 유저
externalClickhouse.password ClickHouse 비밀번호 (필수)
externalClickhouse.httpPort 8123 HTTP 인터페이스 포트
externalClickhouse.tcpPort 9000 Native 프로토콜 포트
externalClickhouse.cluster skuber_cluster ClickHouse 클러스터명
externalClickhouse.secure false TLS 사용 여부
externalClickhouse.database signoz_metrics 메트릭 데이터베이스명
externalClickhouse.traceDatabase signoz_traces 트레이스 데이터베이스명
externalClickhouse.logDatabase signoz_logs 로그 데이터베이스명
externalClickhouse.meterDatabase signoz_meter 미터 데이터베이스명

기타 옵션

옵션 기본값 설명
global.storageClass 클러스터 기본값 PVC에 사용할 StorageClass
o11yHub.persistence.size 10Gi Hub 영구 저장소 크기
o11yHub.service.type LoadBalancer UI 서비스 타입
otelCollector.service.type LoadBalancer OTel Gateway 서비스 타입
schemaMigrator.enableReplication true ReplicatedMergeTree 엔진 사용

주의: ClickHouse가 단일 노드(Keeper 미연결)인 경우 schemaMigrator.enableReplication을 반드시 false로 설정하세요. true인 상태에서 Keeper가 없으면 ReplicatedMergeTree 테이블 생성이 실패합니다.


(선택) TLS 보안 통신

Agent Cluster가 다른 VPC 또는 다른 클라우드/네트워크에 위치하여 퍼블릭 구간을 경유하는 경우, Agent → Host 간 OTLP 전송에 TLS 암호화를 적용해야 합니다.

같은 VPC/네트워크 내에서 통신하는 경우 TLS 설정은 불필요합니다. 기본값(평문 전송)으로 사용하세요.

[TLS 필요한 경우]
Agent (VPC A) → 퍼블릭 NLB → Host OTel Gateway (VPC B)  ← 암호화 필수

[TLS 불필요한 경우]
Agent (VPC A) → 프라이빗 LB → Host OTel Gateway (VPC A)  ← 평문 OK

Step 1: 인증서 준비

인증서를 K8s Secret으로 준비합니다. 4가지 방식 중 환경에 맞게 선택하세요.

방식 적합한 상황 cert-manager 필요
고객 인증서 자체 인증서 관리 체계가 있는 경우 (가장 일반적) X
사내 CA 사내 인증 기관(CA)을 운영하는 경우 O
Let's Encrypt 퍼블릭 도메인 + DNS 제어 권한이 있는 경우 O
Self-signed 테스트/PoC 용도 O

TLS 설정 도구(skuberplus-observability-tls)를 사용하면 인증서 생성부터 Secret 등록까지 자동화됩니다:

# 고객 인증서 사용
./skuberplus-observability-tls setup --mode existing \
  --cert ./tls.crt --key ./tls.key \
  --secret-name skuber-otel-collector-tls \
  --kube-context <host-cluster-context>

# 사내 CA
./skuberplus-observability-tls setup --mode private-ca \
  --domain <도메인> \
  --ca-cert ./ca.crt --ca-key ./ca.key \
  --secret-name skuber-otel-collector-tls \
  --kube-context <host-cluster-context>

# Let's Encrypt (퍼블릭 도메인 필요)
./skuberplus-observability-tls setup --mode letsencrypt \
  --domain <도메인> --email <이메일> \
  --secret-name skuber-otel-collector-tls \
  --kube-context <host-cluster-context>

# Self-signed (테스트용)
./skuberplus-observability-tls setup --mode selfsigned \
  --domain <도메인> \
  --secret-name skuber-otel-collector-tls \
  --kube-context <host-cluster-context>

cert-manager가 필요한 모드(사내 CA, Let's Encrypt, Self-signed)는 도구가 자동 설치합니다.
모든 모드의 사용법은 ./skuberplus-observability-tls setup --help로 확인할 수 있습니다.

Step 2: Helm 설치 시 TLS 옵션 추가

기존 helm install 명령어에 아래 3줄을 추가합니다:

  --set otelCollector.tls.enabled=true \
  --set otelCollector.tls.existingSecretName=skuber-otel-collector-tls \
  --set otelCollector.tls.path=/etc/otel/tls

TLS 옵션

옵션 기본값 설명
otelCollector.tls.enabled false TLS 활성화 여부
otelCollector.tls.existingSecretName 인증서가 저장된 K8s Secret 이름
otelCollector.tls.path /etc/otel/tls Pod 내부 인증서 마운트 경로
otelCollector.tls.ca (선택) CA 인증서 — 설정 시 mTLS 클라이언트 검증 활성화

TLS를 활성화하면 OTel Gateway의 gRPC(:4317)와 HTTP(:4318) 모두 TLS로 수신합니다. Agent 클러스터 설치 시에도 TLS 옵션을 맞춰야 합니다 — Agent 클러스터 TLS 설정을 참조하세요.


설치 확인

파드 상태

kubectl --context <host-context> -n skuber-observability get pods

정상 설치 시:

NAME                                              READY   STATUS      RESTARTS   AGE
skuberplus-observability-host-0                   2/2     Running     0          5m
o11y-core-xxxxxxxxx-xxxxx                         1/1     Running     0          5m
skuberplus-observability-host-otel-collector-gw-xxx 1/1   Running     0          5m
skuberplus-observability-host-schema-migrator-xxx 0/1     Completed   0          5m

schema-migrator는 ClickHouse에 기본 테이블을 생성하는 초기화 Job으로, Completed가 정상입니다.

OTel Gateway IP 기록

Agent Cluster 설치 시 필요한 Gateway 주소를 확인합니다:

kubectl --context <host-context> -n skuber-observability \
  get svc skuberplus-observability-host-otel-collector-gw \
  -o jsonpath='{.status.loadBalancer.ingress[0].ip}'

이 IP를 기록해두세요. Agent 클러스터 설치 시 사용합니다.

  • gRPC: <gateway-ip>:4317
  • HTTP (평문): http://<gateway-ip>:4318
  • HTTP (TLS): https://<gateway-ip>:4318

웹 UI 접속

LoadBalancer IP 확인

kubectl --context <host-context> -n skuber-observability \
  get svc skuberplus-observability-host \
  -o jsonpath='{.status.loadBalancer.ingress[0].ip}'

브라우저에서 http://<external-ip>:8080으로 접속합니다.


문제 해결

Schema Migrator 실패

kubectl --context <host-context> -n skuber-observability \
  logs -l app.kubernetes.io/component=schema-migrator
원인 해결
ClickHouse 연결 불가 externalClickhouse.host 및 네트워크 확인
인증 실패 externalClickhouse.user, password 확인
Keeper 연결 없음 ClickHouse에 Keeper가 정상 연결되어 있는지 확인 (ReplicatedMergeTree 필수)

ClickHouse 연결 오류

Host Cluster 내부에서 ClickHouse 접근 테스트

kubectl --context <host-context> -n skuber-observability \
  run ch-test --rm -it --image=busybox -- nc -zv $CH_HOST 9000
원인 해결
네트워크 불통 방화벽, SecurityGroup, NetworkPolicy 확인
포트 변경 externalClickhouse.tcpPort, httpPort 조정
비밀번호 오류 clickhouse-client로 직접 접속 테스트

파드가 Pending 상태인 경우 — kubectl describe pod로 이벤트 확인. StorageClass 미지정 또는 리소스 부족이 일반적 원인입니다.

LoadBalancer IP가 할당되지 않는 경우 — AWS는 Load Balancer Controller, On-premise는 MetalLB 등 LB 프로비저너가 필요합니다.


다음 단계

Host Cluster 설치가 완료되면:

  1. Agent 클러스터 설치 — 모니터링 대상 클러스터에 Agent 설치
  2. 데이터 보존 설정 — 데이터 보존 기간 설정