kustomize – skill DevOps & Hạ tầng cho agent AI
Tùy chỉnh manifest Kubernetes mà không cần templating bằng Kustomize.
Cài skill kustomize bằng một lệnh
Chọn công cụ bạn đang dùng, copy lệnh và dán vào terminal. Skill sẽ nằm trong thư mục skills của công cụ đó và sẵn sàng dùng ở phiên làm việc tiếp theo.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/kustomize-b0769.tgz | tar xz -C ~/.claude/skills
Gọi trong Claude Code: /kustomize – rồi mô tả công việc bạn muốn làm.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/kustomize-b0769.tgz | tar xz -C ~/.codex/skills
Gọi trong Codex: $kustomize – rồi mô tả công việc bạn muốn làm.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/kustomize-b0769.tgz | tar xz -C ~/.hermes/skills
Gọi trong Hermes Agent: /kustomize – rồi mô tả công việc bạn muốn làm.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/kustomize-b0769.tgz | tar xz -C ~/.deepcode/skills
Gọi trong DeepSeek: /kustomize – rồi mô tả công việc bạn muốn làm.
Nội dung SKILL.md
Nội dung SKILL.md gốc bằng tiếng Anh.
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
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.yamlRender and secret boundaries
Do not commit real TLS keys or generated Secret YAML: base64 is not encryption. Use an approved secret delivery/encryption mechanism and private temporary output. A namespace transform does not create that namespace; supply an explicit Namespace resource where needed. Remote bases must use reviewed immutable refs; do not enable plugins/exec or remote resources from untrusted input. Helm inflation needs the installed tool’s explicit supported Helm enablement. Select the authorized cluster/context/namespace, render/validate/diff first and run only the requested apply or delete; the command list is alternatives, not a sequence.
Commands
# 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: For versions supporting the labels transformer, use explicit selector behavior and inspect the rendered diff; do not mutate immutable Deployment selectors unintentionally.
labels:
- pairs:
app: myapp
includeSelectors: falseBest 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 (
kubernetes-ops) - K8s fundamentals - helm-charts (
helm-charts) - Helm alternative - argocd-gitops (
argocd-gitops) - GitOps deployment
Limitations
- Guidance executes against real environments: confirm target, blast radius, and rollback plan before applying anything.
- Never deploy to production without explicit approval. Docs-only import: upstream scripts and templates not bundled.
Example
git status && git diff --stat
kubectl diff -f manifest.yaml> Adapted from [BagelHole/DevOps-Security-Agen
… (nội dung đầy đủ có trong gói tải về)
Skill liên quan
- langfuse – Chuyên gia về Langfuse - nền tảng observability LLM mã nguồn mở. Bao gồm tracing, quản…
- linux-administration – Quản trị hệ thống cho máy chủ Linux. Quản lý gói phần mềm, dịch vụ và cấu hình hệ thống…
- linux-hardening – Áp dụng benchmark CIS và bảo mật máy chủ Linux.
- linux-privilege-escalation – Thực hiện đánh giá leo thang đặc quyền có hệ thống trên Linux để tìm và khai thác cấu…
- linux-shell-scripting – Cung cấp mẫu shell script sẵn sàng cho môi trường production cho các tác vụ quản trị…
- linux-troubleshooting – Quy trình xử lý sự cố Linux để chẩn đoán và khắc phục lỗi hệ thống, vấn đề hiệu năng và…
- llm-cost-optimization – Giảm chi phí API LLM và hạ tầng thông qua chọn mô hình, prompt caching, xử lý theo lô…
- llm-fine-tuning – Thiết lập hạ tầng để fine-tune LLM với QLoRA, LoRA và full fine-tuning, sử dụng Hugging…