[Loki] fsGroupChangePolicy=OnRootMismatch로 Pod 시작 속도 향상
PR 링크: grafana/loki#13942 상태: Merged | 변경: +37 / -23
들어가며
Kubernetes에서 securityContext.fsGroup을 설정하면, Pod 시작 시 마운트된 볼륨의 모든 파일에 대해 재귀적으로 chown을 실행합니다. Loki처럼 대량의 로그 데이터를 볼륨에 저장하는 경우, 수십만 개의 파일에 대한 소유권 변경이 수 분이 걸릴 수 있습니다. fsGroupChangePolicy: OnRootMismatch를 설정하면, 루트 디렉토리의 소유권이 이미 올바른 경우 재귀적 chown을 건너뛰게 됩니다.
핵심 코드 분석
values.yaml에 fsGroupChangePolicy 추가
loki:
podSecurityContext:
fsGroup: 10001
fsGroupChangePolicy: "OnRootMismatch" # 신규 추가
runAsGroup: 10001
runAsNonRoot: true
runAsUser: 10001
Kubernetes 버전 호환 처리
{{- define "loki.podSecurityContext" -}}
{{- if semverCompare ">=1.23-0" $.Capabilities.KubeVersion.GitVersion }}
{{- toYaml .Values.loki.podSecurityContext }}
{{- else }}
{{- toYaml (omit .Values.loki.podSecurityContext "fsGroupChangePolicy") }}
{{- end }}
{{- end -}}
fsGroupChangePolicy는 Kubernetes 1.23부터 GA(General Availability)이므로, 이전 버전에서는 이 필드를 생략하여 호환성을 유지합니다.
모든 컴포넌트에 일괄 적용
기존에 각 StatefulSet과 Deployment에서 직접 .Values.loki.podSecurityContext를 참조하던 것을, 헬퍼 함수 loki.podSecurityContext를 통해 간접 참조하도록 변경했습니다.
# Before (각 컴포넌트)
securityContext:
{{- toYaml .Values.loki.podSecurityContext | nindent 8 }}
# After
securityContext:
{{- include "loki.podSecurityContext" . | nindent 8 }}
이 변경이 backend, bloom-builder, bloom-gateway, compactor, distributor, ingester 등 약 15개 템플릿에 적용되었습니다.
왜 이게 좋은가
- Pod 시작 시간 단축: 대량의 파일이 있는 볼륨에서 재귀적
chown을 건너뛰어, 시작 시간이 수 분에서 수 초로 줄어들 수 있습니다. - 롤링 업데이트 가속: StatefulSet의 각 Pod가 빠르게 시작되므로, 전체 롤링 업데이트 시간도 비례하여 줄어듭니다.
- 하위 호환성: Kubernetes 1.23 미만에서는 자동으로
fsGroupChangePolicy를 제거하여, 오류 없이 동작합니다. - Kubernetes 공식 권장 사항 적용: Kubernetes 문서에서도 대용량 볼륨에
OnRootMismatch를 권장합니다.
참고 자료
관련 포스트
PR Analysis 의 다른글
- 이전글 [Triton] gfx1250에서 async_copy multicast 지원
- 현재글 : [Loki] fsGroupChangePolicy=OnRootMismatch로 Pod 시작 속도 향상
- 다음글 [ultralytics] COCO Segmentation 검증 300% 속도 향상 — RLE 인코딩 벡터화
댓글