Difference between revisions of "Kubernetes/Kustomize"

From Ever changing code
Jump to navigation Jump to search
Line 29: Line 29:
# emit yaml
# emit yaml


= Example 101 =
<source lang=bash>
.
├── base
│   ├── gateway.yaml
│   ├── kustomization.yaml
│   └── virtual-service.yaml
└── overlays
   ├── prod
   │   ├── gateway_patch.yaml
   │   ├── kustomization.yaml
   │   └── virtual-service_patch.yaml
   └── staging
      ├── gateway_patch.yaml
      ├── kustomization.yaml
      └── virtual-service_patch.yaml
# Run
kustomize version --short # -> {kustomize/v3.8.2  2020-08-29T17:44:01Z  }
kustomize build overlays/prod
</source>


= Known issues =
= Known issues =

Revision as of 00:35, 10 September 2020

Kustomize

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

Install

# Detects your OS and downloads kustomize binary to cwd
curl -s "https://raw.githubusercontent.com/\
kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"  | bash

# Install on Linux - option2
VERSION=v3.8.2
curl -L https://github.com/kubernetes-sigs/kustomize/releases/download/kustomize%2F${VERSION}/kustomize_${VERSION}_linux_amd64.tar.gz -o kustomize_${VERSION}_linux_amd64.tar.gz
tar xzvf kustomize_${VERSION}_linux_amd64.tar.gz
sudo install ./kustomize /usr/local/bin/kustomize

$ kustomize version --short
{kustomize/v3.8.2  2020-08-29T17:44:01Z  }


Kustomize build workflow

$ kustomize build ~/target
  1. load universal k8s object descriptions
  2. read kustomization.yaml from target
  3. kustomize bases (recurse 2-5)
  4. load and/or generate resources
  5. apply target's kustomization operations
  6. fix name references
  7. emit yaml

Example 101

.
├── base
│   ├── gateway.yaml
│   ├── kustomization.yaml
│   └── virtual-service.yaml
└── overlays
    ├── prod
    │   ├── gateway_patch.yaml
    │   ├── kustomization.yaml
    │   └── virtual-service_patch.yaml
    └── staging
        ├── gateway_patch.yaml
        ├── kustomization.yaml
        └── virtual-service_patch.yaml

# Run
kustomize version --short # -> {kustomize/v3.8.2  2020-08-29T17:44:01Z  }
kustomize build overlays/prod

Known issues

In some settings it makes sense for commonLabels to be included in selectors, and in some settings it doers not make sense to include them in selectors. Kustomize includes by default, and there is no way to opt out. As workaround, you can convert matchLabels to matchExpressions and Kustomize won't touch them. API docs

- podSelector:
      matchLabels:
        app: mongodb-backup


is equivalent with

- podSelector:
      matchExpressions:
        - key: app
        operator: In
        values:
          - mongodb-backup

and Kustomize will keep its hands off.


Resources