Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/tomevault-io/skills-registry --skill helm-chart-developer명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
SOC 직업 분류 기준
| name | helm-chart-developer |
| description | | Use when this capability is needed. |
Use this skill when:
helm template, helm lint, helm install --dry-runAlways use these API versions:
| Component | API Version | Notes |
|---|---|---|
| Helm Chart | apiVersion: v2 | Helm 3+ charts |
| Flux HelmRelease | helm.toolkit.fluxcd.io/v2 | Current stable |
| Flux HelmRepository | source.toolkit.fluxcd.io/v1 | Current stable |
| Flux Kustomization | kustomize.toolkit.fluxcd.io/v1 | Current stable |
| ExternalSecret | external-secrets.io/v1 | ESO v1 API |
| ClusterSecretStore | external-secrets.io/v1 | With spec.conditions[].namespaceSelector |
Target baseline: Kubernetes 1.29+, Helm 3.14+, Flux v2.3+, ESO 0.10+
Rule: If adding manifests, ALWAYS use these API versions. If CRD/apiVersion mismatch detected in repo, STOP and propose migration plan.
See VERSIONS.md for full compatibility matrix.
Before completing any Helm chart work:
helm lint . passeshelm template <release> . succeedshelm template . | kubeconform -stricthelm install <release> . --dry-run --debug works--set secrets.existingSecretName=<name>--set secrets.externalSecret.enabled=trueRun /helm-validate to execute all checks.
charts/app/
├── Chart.yaml
├── values.yaml
├── templates/
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ ├── service.yaml
│ ├── ingress.yaml
│ ├── externalsecret.yaml # optional, gated
│ ├── hpa.yaml
│ ├── pdb.yaml
│ └── serviceaccount.yaml
See reference-gitops-eso.md for full details.
Key sections:
image: repository, tag, pullPolicysecrets: existingSecretName, externalSecret.*, inject.envFromservice: enabled, type, portingress: enabled, className, hosts, tlsresources: requests, limitsautoscaling: enabled, minReplicas, maxReplicasMode A: ExternalSecret in Overlay (Recommended)
Chart only references secret by name:
# values.yaml
secrets:
existingSecretName: "app-secrets"
inject:
envFrom: true
ExternalSecret lives in GitOps overlay, not in chart.
Mode B: Chart-Managed ExternalSecret (Optional)
Chart renders ExternalSecret when enabled:
secrets:
externalSecret:
enabled: true
refreshInterval: 1h
refreshPolicy: OnChange
secretStoreRef:
kind: ClusterSecretStore
name: aws-secrets-manager
dataFrom:
extractKey: "fce/dev/app"
target:
name: "app-secrets"
creationPolicy: Owner
refreshPolicy options:
| Policy | Behavior | Use Case |
|---|---|---|
OnChange | Updates when ExternalSecret manifest changes | GitOps (default, recommended) |
CreatedOnce | Never updates after creation | Immutable credentials |
Periodic | Updates on interval (refreshInterval) | Legacy, auto-rotation |
Default rule: Use refreshPolicy: OnChange for predictable GitOps-driven updates.
Manual refresh (debug/runbook):
kubectl annotate es <name> force-sync=$(date +%s) --overwrite
Values Composition Order (important!):
charts/app/values.yaml)apps/dev/app/values.yaml)valuesFrom references ConfigMapspec.values patches (highest priority)See snippets:
Critical Kustomize settings:
generatorOptions:
disableNameSuffixHash: true # MUST have, otherwise names change on every apply
Use spec.dependsOn in HelmRelease when app depends on:
Example:
spec:
dependsOn:
- name: external-secrets
namespace: external-secrets
ClusterSecretStore (cluster-wide):
apiVersion: external-secrets.io/v1
kind: ClusterSecretStore
metadata:
name: aws-secrets-manager
spec:
conditions:
- namespaceSelector:
matchLabels:
eso.fce.global/enabled: "true"
provider:
aws:
service: SecretsManager
region: me-central-1
ExternalSecret (per app/env):
apiVersion: external-secrets.io/v1
kind: ExternalSecret
spec:
refreshPolicy: OnChange # GitOps-deterministic
secretStoreRef:
kind: ClusterSecretStore
name: aws-secrets-manager
dataFrom:
- extract:
key: fce/dev/app
target:
name: app-secrets
creationPolicy: Owner
dependsOn.install.disableOpenAPIValidation: true in HelmRelease if needed.Prompts that should activate this skill:
| ❌ Avoid | ✅ Instead |
|---|---|
| Hardcode secrets in values.yaml | Use ExternalSecret with secretStoreRef |
| Single values.yaml for all envs | Kustomize overlays per environment |
HelmRelease v2beta1 / v2beta2 API | Use helm.toolkit.fluxcd.io/v2 |
| Manual Secret creation | ESO with ClusterSecretStore |
| Inline helm values in HelmRelease | External values.yaml + patches via valuesFrom |
Skip helm lint / helm template | Always validate with /helm-validate |
refreshPolicy: Periodic for GitOps | Use refreshPolicy: OnChange for determinism |
Kustomize namesSuffixHash: true | Always disableNameSuffixHash: true for ConfigMaps |
| Put ExternalSecret in Helm chart | Put ExternalSecret in GitOps overlay (Mode A) |
Skip dependsOn for CRDs | Use spec.dependsOn for external-secrets, cert-manager |
Converted and distributed by TomeVault — claim your Tome and manage your conversions.