
Kustomize
- 110 installs
- 44 repo stars
- Updated May 22, 2026
- bagelhole/devops-security-agent-skills
kustomize is a Claude skill for customizing Kubernetes manifests declaratively with bases and overlays, avoiding templating engines like Helm.
About
kustomize is a skill that customizes Kubernetes manifests declaratively without templating. It shows how to build a base configuration with per-environment overlays, patch resources with strategic-merge and JSON patches, generate ConfigMaps and Secrets, and transform images. A developer uses it to manage Kubernetes config across multiple environments without Helm.
- Base + overlay structure for dev, staging and production variants
- Strategic-merge, JSON and inline patch examples
- ConfigMap/Secret generators, image transforms and remote resources
Kustomize by the numbers
- 110 all-time installs (skills.sh)
- Ranked #529 of 1,435 DevOps & CI/CD skills by installs in the Skillselion catalog
- Data as of Jul 28, 2026 (Skillselion catalog sync)
kustomize capabilities & compatibility
- Capabilities
- kubernetes ops · load balancing · loki logging
- Works with
- kubernetes
- Use cases
- devops · ci cd
- Runs
- Runs locally
- Pricing
- Free
What kustomize says it does
Customize Kubernetes resources declaratively without templating.
Create base configurations with environment overlays, manage configuration variants, and patch resources declaratively.
npx skills add https://github.com/bagelhole/devops-security-agent-skills --skill kustomizeAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 110 |
|---|---|
| repo stars | ★ 44 |
| Last updated | May 22, 2026 |
| Repository | bagelhole/devops-security-agent-skills ↗ |
What it does
Manage Kubernetes configuration across dev, staging and production with base configs and overlays instead of templating.
Who is it for?
Developers managing Kubernetes configs across environments who prefer declarative patching over templating
Skip if: Teams that want templated variables and packaged charts (Helm's model)
When should I use this skill?
Managing Kubernetes configs across environments or patching manifests without modifying them
What you get
A base plus overlay layout that produces per-environment manifests from shared config
- Base and overlay kustomization.yaml files
- Environment patches
- ConfigMap/Secret generators
By the numbers
- Shows overlays for 3 environments (development, staging, production)
- Covers 3 patch types (strategic merge, JSON, inline)
Files
Kustomize
Customize Kubernetes resources declaratively without templating.
When to Use This Skill
Use this skill when:
- Managing Kubernetes configs across environments
- Patching existing manifests without modification
- Creating configuration variants from bases
- Customizing third-party manifests
- Preferring declarative over templating approach
Prerequisites
- kubectl 1.14+ (includes kustomize)
- Or standalone kustomize CLI
- Basic Kubernetes manifest knowledge
Directory Structure
myapp/
├── base/
│ ├── kustomization.yaml
│ ├── deployment.yaml
│ ├── service.yaml
│ └── configmap.yaml
└── overlays/
├── development/
│ ├── kustomization.yaml
│ └── replica-patch.yaml
├── staging/
│ ├── kustomization.yaml
│ └── namespace.yaml
└── production/
├── kustomization.yaml
├── replica-patch.yaml
└── resource-patch.yamlBase Configuration
kustomization.yaml
# base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
- configmap.yaml
commonLabels:
app: myapp
commonAnnotations:
managed-by: kustomizeBase Resources
# base/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 1
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:latest
ports:
- containerPort: 8080
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "200m"Overlays
Development Overlay
# overlays/development/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
namespace: myapp-dev
namePrefix: dev-
commonLabels:
environment: development
images:
- name: myapp
newTag: dev-latestProduction Overlay
# overlays/production/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ../../base
namespace: myapp-prod
namePrefix: prod-
commonLabels:
environment: production
replicas:
- name: myapp
count: 5
images:
- name: myapp
newName: registry.example.com/myapp
newTag: v2.0.0
patches:
- path: resource-patch.yamlPatching
Strategic Merge Patch
# overlays/production/resource-patch.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
template:
spec:
containers:
- name: myapp
resources:
requests:
memory: "256Mi"
cpu: "500m"
limits:
memory: "512Mi"
cpu: "1000m"JSON Patch
# kustomization.yaml
patches:
- target:
kind: Deployment
name: myapp
patch: |-
- op: replace
path: /spec/replicas
value: 5
- op: add
path: /spec/template/spec/containers/0/env
value:
- name: LOG_LEVEL
value: infoInline Patches
# kustomization.yaml
patches:
- patch: |-
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3
target:
kind: Deployment
name: myappConfiguration Generation
ConfigMap Generator
# kustomization.yaml
configMapGenerator:
- name: myapp-config
literals:
- APP_ENV=production
- LOG_LEVEL=info
files:
- config.yaml
envs:
- config.env
options:
disableNameSuffixHash: falseSecret Generator
# kustomization.yaml
secretGenerator:
- name: myapp-secrets
literals:
- api-key=secret123
files:
- tls.crt
- tls.key
type: kubernetes.io/tlsImage Transformations
# kustomization.yaml
images:
# Change tag
- name: myapp
newTag: v2.0.0
# Change registry
- name: myapp
newName: registry.example.com/myapp
newTag: v2.0.0
# Use digest
- name: myapp
digest: sha256:abc123...Resource Transformations
Name Prefix/Suffix
# kustomization.yaml
namePrefix: prod-
nameSuffix: -v2Namespace
# kustomization.yaml
namespace: productionLabels and Annotations
# kustomization.yaml
commonLabels:
app.kubernetes.io/name: myapp
app.kubernetes.io/environment: production
commonAnnotations:
example.com/owner: team-aReplicas
# kustomization.yaml
replicas:
- name: myapp
count: 5
- name: worker
count: 3Components
# components/monitoring/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1alpha1
kind: Component
resources:
- servicemonitor.yaml
patches:
- patch: |-
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
template:
metadata:
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "8080"# overlays/production/kustomization.yaml
components:
- ../../components/monitoringRemote Resources
# kustomization.yaml
resources:
# Remote Git repository
- https://github.com/org/manifests//base?ref=v1.0.0
# Remote URL
- https://raw.githubusercontent.com/org/repo/main/deployment.yamlCommands
# Build and view output
kubectl kustomize overlays/production
# Apply to cluster
kubectl apply -k overlays/production
# Delete resources
kubectl delete -k overlays/production
# View diff
kubectl diff -k overlays/production
# Build with standalone kustomize
kustomize build overlays/production
# Build and apply
kustomize build overlays/production | kubectl apply -f -Helm Chart Integration
# kustomization.yaml
helmCharts:
- name: prometheus
repo: https://prometheus-community.github.io/helm-charts
version: 25.0.0
releaseName: prometheus
namespace: monitoring
valuesFile: values.yaml
includeCRDs: trueVariable Substitution
# kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
replacements:
- source:
kind: ConfigMap
name: myapp-config
fieldPath: data.APP_VERSION
targets:
- select:
kind: Deployment
name: myapp
fieldPaths:
- spec.template.spec.containers.[name=myapp].image
options:
delimiter: ':'
index: 1Common Issues
Issue: Name Hash Conflicts
Problem: Resources not updating when ConfigMap changes Solution: Enable name suffix hash (default) or use replacement
Issue: Patch Not Applying
Problem: Strategic merge patch doesn't work Solution: Verify resource names match, use JSON patch for complex changes
Issue: Remote Resource Fails
Problem: Cannot fetch remote resources Solution: Check URL, verify ref/tag exists, ensure network access
Issue: Label Selector Mismatch
Problem: commonLabels breaks selectors Solution: Use includeSelectors: false or exclude specific resources
commonLabels:
app: myapp
configurations:
- labelExclusions.yamlBest Practices
- Keep base manifests environment-agnostic
- Use overlays for environment-specific config
- Prefer strategic merge patches for simple changes
- Use components for optional features
- Pin remote resource versions
- Enable ConfigMap/Secret hash suffixes
- Document overlay structure in README
- Test builds before applying
Related Skills
- kubernetes-ops - K8s fundamentals
- helm-charts - Helm alternative
- argocd-gitops - GitOps deployment
Related skills
FAQ
Does kustomize replace Helm?
It is a declarative, template-free alternative for customizing manifests across environments; the skill positions it for teams managing configs without Helm.
What patch types are covered?
Strategic merge patches, JSON patches and inline patches.