Skip to content
Customization of kubernetes YAML configurations
Go Shell TypeScript Makefile Dockerfile PowerShell
Branch: master
Clone or download
k8s-ci-robot Merge pull request #1893 from artmello/enable_linters
kyaml: Enable Go linters (lll, stylecheck, unparam, whitespace)
Latest commit 3703450 Dec 6, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
api Merge pull request #1892 from monopole/getRidOfFakeLoader Dec 5, 2019
cmd Merge pull request #1893 from artmello/enable_linters Dec 6, 2019
docs Update Dec 6, 2019
examples Update Nov 29, 2019
functions/examples rename `run-fns` to `run` Nov 27, 2019
hack Tweak install. Dec 5, 2019
kstatus Fix dependencies for kstatus Dec 5, 2019
kustomize Fix some nits in the crawler and elsewhere. Dec 3, 2019
kyaml Remove leading/trailing newlines following whitespace linter recommen… Dec 6, 2019
plugin add replacement type and an example transformer Dec 4, 2019
pluginator Improve builtin generation rules. Nov 21, 2019
pseudo fix typo in pseudo/ Nov 14, 2019
releasing Fix docs broken links as Github relative links Nov 22, 2019
travis Rename cmd/kyaml to cmd/config in travis scripts Nov 20, 2019
.gitignore Update .gitignore to ignore Intellij metadata files Nov 7, 2019
.golangci-kustomize.yml Activate lint typecheck Nov 18, 2019
.travis.yml Drive kustomize repo verification from make. Nov 14, 2019 Fix broken redirect for contributor cheatsheet Nov 12, 2019
LICENSE add license May 8, 2018
Makefile Simplify and document plugin test harness. Nov 29, 2019
OWNERS owner mods May 11, 2018
OWNERS_ALIASES remove myself from maintainers Jan 14, 2019 Fix docs broken links as Github relative links Nov 22, 2019
SECURITY_CONTACTS Move template files from docs/ to root Sep 1, 2018 Move template files from docs/ to root Sep 1, 2018


kustomize lets you customize raw, template-free YAML files for multiple purposes, leaving the original YAML untouched and usable as is.

kustomize targets kubernetes; it understands and can patch kubernetes style API objects. It's like make, in that what it does is declared in a file, and it's like sed, in that it emits edited text.

This tool is sponsored by sig-cli (KEP), and inspired by DAM.

Build Status Go Report Card

Download a binary from the release page, or see these instructions.

Browse the docs or jump right into the tested examples.

kubectl integration

Since v1.14 the kustomize build system has been included in kubectl.

kubectl version kustomize version
v1.16.0 v2.0.3
v1.15.x v2.0.3
v1.14.x v2.0.3

For examples and guides for using the kubectl integration please see the kubectl book or the kubernetes documentation.


1) Make a kustomization file

In some directory containing your YAML resource files (deployments, services, configmaps, etc.), create a kustomization file.

This file should declare those resources, and any customization to apply to them, e.g. add a common label.

base image

File structure:

├── deployment.yaml
├── kustomization.yaml
└── service.yaml

The resources in this directory could be a fork of someone else's configuration. If so, you can easily rebase from the source material to capture improvements, because you don't modify the resources directly.

Generate customized YAML with:

kustomize build ~/someApp

The YAML can be directly applied to a cluster:

kustomize build ~/someApp | kubectl apply -f -

2) Create variants using overlays

Manage traditional variants of a configuration - like development, staging and production - using overlays that modify a common base.

overlay image

File structure:

├── base
│   ├── deployment.yaml
│   ├── kustomization.yaml
│   └── service.yaml
└── overlays
    ├── development
    │   ├── cpu_count.yaml
    │   ├── kustomization.yaml
    │   └── replica_count.yaml
    └── production
        ├── cpu_count.yaml
        ├── kustomization.yaml
        └── replica_count.yaml

Take the work from step (1) above, move it into a someApp subdirectory called base, then place overlays in a sibling directory.

An overlay is just another kustomization, refering to the base, and referring to patches to apply to that base.

This arrangement makes it easy to manage your configuration with git. The base could have files from an upstream repository managed by someone else. The overlays could be in a repository you own. Arranging the repo clones as siblings on disk avoids the need for git submodules (though that works fine, if you are a submodule fan).

Generate YAML with

kustomize build ~/someApp/overlays/production

The YAML can be directly applied to a cluster:

kustomize build ~/someApp/overlays/production | kubectl apply -f -


To file bugs please read this.

Before working on an implementation, please

Other communication channels

Code of conduct

Participation in the Kubernetes community is governed by the Kubernetes Code of Conduct.

You can’t perform that action at this time.