ConfigMap 드리프트 감지

ConfigMap 드리프트 감지 (ConfigMap drift detection)

ConfigMap에 반영된 원하는 설정과 실제로 실행 중인 에이전트 설정 사이의 차이를 눈으로 확인할 수 있게 해주는 기능이에요. Prometheus 메트릭으로 이 "차이(drift)"를 관찰하는 방법을 알려드릴게요.

출처: ConfigMap drift detection

본문

많은 Cilium 구성 옵션은 에이전트 재시작이 있어야 적용돼요. cilium-config ConfigMap을 갱신한 뒤(예: helm upgrade나 cilium config set)에는, 실행 중인 에이전트의 활성 설정이 ConfigMap의 원하는 상태와 더 이상 일치하지 않는 창이 생겨요. ConfigMap 드리프트 감지 기능은 에이전트가 아직 적용하지 않은 구성 키가 몇 개인지 보고하는 Prometheus 메트릭을 노출해서 이 창을 관찰 가능하게 만들어요.

동작 원리 (How it works)

드리프트 감지는 두 컴포넌트 위에 구축돼요.

  • 동적 구성 감시자 (enable-dynamic-config): 에이전트가 Kubernetes API를 통해 cilium-config ConfigMap을 계속 감시하고, 그 내용을 내부 메모리 테이블에 반영해요. 이 테이블은 항상 원하는 상태를 나타내요.

  • 드리프트 검사기 (enable-drift-checker): 백그라운드 루프가 메모리 테이블의 모든 키를 에이전트가 시작할 때 가졌던 활성 설정과 비교해요. 불일치가 있을 때마다 경고를 기록하고 카운터를 증가시켜요. 이 카운터 값은 cilium_drift_checker_config_delta Prometheus 메트릭으로 게시돼요.

cilium_drift_checker_config_delta 값이 0이 아니면, 실행 중인 에이전트가 아직 모든 최신 ConfigMap 변경을 적용하지 않았고 재시작이 필요하다는 뜻이에요.

Helm 구성 (Helm configuration)

이 기능은 configDriftDetection Helm 값 그룹으로 제어돼요. 두 컴포넌트 모두 기본적으로 활성화돼 있어요.

configDriftDetection:
  enabled: true
  driftChecker: true
  ignoredKeys: []

ConfigMap과 에이전트의 활성 설정 사이에서 의도적으로 다른 특정 키(예: 외부에서 관리되는 키)를 무시하려면 ignoredKeys를 설정하면 돼요.

configDriftDetection:
  enabled: true
  driftChecker: true
  ignoredKeys:
    - devices

Prometheus 메트릭

드리프트 감지가 활성화되면 에이전트에서 다음 메트릭을 사용할 수 있어요.

Metric name Type Description
cilium_drift_checker_config_delta Gauge 원하는 값이 에이전트의 활성 설정과 다른 cilium-config ConfigMap 키의 개수. 값이 0이면 에이전트가 ConfigMap과 완전히 동기화된 상태예요.

메트릭 해석하기 (Interpreting the metric)

값이 0이면 에이전트가 현재 ConfigMap과 완전히 동기화된 상태예요. 값이 0보다 크면 ConfigMap에서 하나 이상의 구성 키가 변경됐지만 에이전트가 아직 적용하지 않았다는 뜻이에요. 에이전트를 재시작해 변경 사항을 반영하세요.

메트릭은 ConfigMap이 바뀔 때마다 다시 평가돼요. 에이전트를 재시작하고 갱신된 구성으로 실행되면 값은 다시 0으로 내려가요.

더 알아보기 (Learn more)