튜토리얼: 포스트렌더러 플러그인 만들기
모든 쿠버네티스 리소스에 커스텀 라벨을 추가하는 플러그인을 만들어봅시다.
서브프로세스 런타임
서브프로세스 런타임으로 포스트 렌더러 플러그인을 만들어봅시다.
사전 요구 사항
- 최신 헬름4 릴리즈를 설치하세요: v4.3.1
- 터미널 세션에서 다운로드한 릴리즈에 관해서
helm을 별칭으로 설정하세요. 이제helm version --short를 실행하면 해당 터미널 세션에서 올바른 Helm 버전이 표시됩니다. mikefarah/yq를 설치하세요: https://github.com/mikefarah/yq/#install
1. 플러그인 디렉터리 생성
파일 시스템의 어디에서나 생성할 수 있습니다. 예를 들어:
mkdir -p $HOME/code/helm/plugins/label-injector
cd $HOME/code/helm/plugins/label-injector
2. 플러그인 매니페스트 생성
apiVersion: v1
type: postrenderer/v1
name: label-injector
version: 0.1.0
runtime: subprocess
runtimeConfig:
platformCommand:
- command: ${HELM_PLUGIN_DIR}/inject-labels.sh
3. 스크립트 생성
#!/usr/bin/env sh
# set -e
cat <&0 | yq '.metadata.labels.postrendered-by = "helm-label-injector-plugin"'
실행 가능하도록 설정합니다:
chmod +x inject-labels.sh
4. 개발 모드로 설치 및 테스트
파일 시스템에서 플러그인을 설치하면 로컬 개발 모드로 설치됩니다. 이 경우 출처 확인 및 검증을 건너뜁니다:
% helm plugin install $HOME/code/helm/plugins/label-injector
Installing plugin from local directory (development mode)
Installed plugin: label-injector
CLI 플러그인 및 Getter 플러그인 튜토리얼에서 살펴봤듯이 로컬 개발 모드 설치는 플러그인 소스 디렉터리에서 플러그인 디렉터리로 심볼릭 링크를 생성합니다. 이제 세 개의 플러그인이 설치되었습니다:
% ls -lah $(helm env HELM_PLUGINS)
total 0
drwxr-xr-x@ 5 r6by staff 160B Nov 10 04:04 .
drwxr-xr-x@ 3 r6by staff 96B Jan 21 2025 ..
lrwxr-xr-x 1 r6by staff 41B Nov 10 04:04 demo-getter -> /Users/r6by/code/helm/plugins/demo-getter
lrwxr-xr-x 1 r6by staff 44B Nov 10 03:02 label-injector -> /Users/r6by/code/helm/plugins/label-injector
lrwxr-xr-x 1 r6by staff 41B Nov 10 02:18 system-info -> /Users/r6by/code/helm/plugins/system-info
helm plugin list를 사용하여 설치된 CLI 및 Getter 플러그인과 함께 설치된 포스트 렌더러 플러그인 세부 정보를 확인할 수 있습니다:
% helm plugin list
NAME VERSION TYPE APIVERSION PROVENANCE SOURCE
demo-getter 0.1.0 getter/v1 v1 local dev unknown
label-injector 0.1.0 postrenderer/v1 v1 local dev unknown
system-info 0.1.0 cli/v1 v1 local dev unknown
실행해봅시다:
% helm create ../mychart
% helm template ../mychart --post-renderer label-injector
출력에서 다음과 같은 레이블을 확인할 수 있습니다:
metadata:
labels:
postrendered-by: helm-label-injector-plugin
만들었습니다. 서브프로세스 런타임을 사용한 포스트렌더러 플러그인을!
kustomize를 포스트렌더러로 사용하기
같은 패턴으로 기존 도구를 감쌀 수도 있습니다. 이 플러그인은 렌더링된 매니페스트에 대해 kustomize build를 실행합니다. PATH에 kustomize가 설치되어 있어야 합니다.
새 플러그인 디렉터리를 생성하세요:
mkdir -p $HOME/code/helm/plugins/kustomize-renderer
cd $HOME/code/helm/plugins/kustomize-renderer
apiVersion: v1
type: postrenderer/v1
name: kustomize-renderer
version: 0.1.0
runtime: subprocess
runtimeConfig:
platformCommand:
- command: ${HELM_PLUGIN_DIR}/kustomize.sh
kustomization은 렌더링된 매니페스트를 all.yaml에서 읽습니다. 이 예제는 모든 디플로이먼트의 레플리카를 3으로 설정합니다:
resources:
- all.yaml
patches:
- target:
kind: Deployment
patch: |-
- op: replace
path: /spec/replicas
value: 3
스크립트는 STDIN으로 받은 매니페스트를 kustomization 사본과 함께 임시 디렉터리에 쓴 다음 빌드합니다:
#!/usr/bin/env sh
set -e
dir=$(mktemp -d)
trap 'rm -rf "$dir"' EXIT
cp "${HELM_PLUGIN_DIR}/kustomization.yaml" "$dir/"
cat <&0 > "$dir/all.yaml"
kustomize build "$dir"
실행 권한을 부여하고, 플러그인을 설치한 다음 실행해 보세요:
% chmod +x kustomize.sh
% helm plugin install $HOME/code/helm/plugins/kustomize-renderer
% helm template ../mychart --post-renderer kustomize-renderer
이제 출력의 디플로이먼트에 replicas: 3이 설정됩니다. kustomize build가 실패하면 스크립트가 0이 아닌 코드로 종료되고 헬름이 오류를 보고합니다.
이번에는 Wasm 런타임으로도 만들어봅시다…
Wasm 런타임
사전 요구 사항
- 서브프로세스 런타임의 사전 요구 사항
- Go 1.25 설치
To-do: 섹션 추가 필요