ConfigMap 마운트 시 심볼릭 링크(..data/..) 구조와 리눅스 파일 시스템 권한, etcd 페이로드 한계로 인해 Headlamp 백엔드 로더가 플러그인을 온전히 읽지 못해 에러가 지속되는 현상입니다.
엔터프라이즈 환경에서 Headlamp 플러그인을 가장 안정적이고 영구적으로 마운트하는 2가지 정석적인 방법입니다.
ConfigMap의 심볼릭 링크를 사용하지 않고, 기동 시 실제 일반 파일(Plain File)로 /headlamp/plugins/ 경로에 완벽하게 복사해 넣는 패턴입니다.
kubectl create configmap headlamp-lakehouse-plugin \
--from-file=main.js=./dist/main.js \
--from-literal=package.json='{
"name": "lakehouse-monitor",
"version": "0.1.0",
"main": "main.js",
"description": "Lakehouse Monitoring Plugin",
"headlamp": {
"name": "lakehouse-monitor",
"version": "0.1.0",
"description": "Lakehouse Monitoring Plugin"
}
}' \
-n headlamp \
--dry-run=client -o yaml | kubectl apply -f -
values.yaml 설정Init Container가 ConfigMap 원본을 읽어 emptyDir 볼륨에 실제 디렉토리와 파일 구조로 생성합니다.
# values.yaml
config:
pluginsDir: /headlamp/plugins
initContainers:
- name: init-lakehouse-plugin
image: busybox:latest # 또는 사내 폐쇄망 busybox/alpine 이미지
command:
- sh
- -c
- |
mkdir -p /target/lakehouse-monitor
cp /src/main.js /target/lakehouse-monitor/main.js
cp /src/package.json /target/lakehouse-monitor/package.json
chmod -R 755 /target/lakehouse-monitor
volumeMounts:
- name: plugin-src
mountPath: /src
- name: plugin-storage
mountPath: /target
# Headlamp 메인 컨테이너에 emptyDir 마운트
volumeMounts:
- name: plugin-storage
mountPath: /headlamp/plugins
# 볼륨 정의
volumes:
- name: plugin-src
configMap:
name: headlamp-lakehouse-plugin
- name: plugin-storage
emptyDir: {}
helm upgrade --install headlamp headlamp/headlamp -n headlamp -f values.yaml
..data)가 아닌 순수 파일로 복사되므로 Headlamp의 백엔드 파일 스캐너가 100% 정상 인식합니다.ConfigMap 크기 제한이나 볼륨 마운트 의존성을 아예 제거하고, 사내 레지스트리에 플러그인이 내장된 커스텀 Headlamp 이미지를 빌드해 올리는 방식입니다.
FROM ghcr.io/headlamp-k8s/headlamp:latest # 또는 사내 베이스 이미지
# 플러그인 디렉토리에 직접 복사
RUN mkdir -p /headlamp/plugins/lakehouse-monitor
COPY dist/main.js /headlamp/plugins/lakehouse-monitor/main.js
COPY package.json /headlamp/plugins/lakehouse-monitor/package.json
USER headlamp
docker build -t registry.internal.example.com/headlamp:with-lakehouse-plugin .
docker push registry.internal.example.com/headlamp:with-lakehouse-plugin
values.yaml에 커스텀 이미지 지정# values.yaml (볼륨 마운트 설정 불필요)
image:
repository: registry.internal.example.com/headlamp
tag: with-lakehouse-plugin
pullPolicy: IfNotPresent
config:
pluginsDir: /headlamp/plugins