Kpt [NEW] beta
Note
kpt CLI must be installed on your machine for the below functionality. Skaffold will not install it.manifests.transform and manifests.validate functionality powered by kpt
With Skaffold V2, skaffold now has a new render phase and associated manifests top level config field. Along with these changes, a manifests.transform and a manifests.validate field were added which allows users to specify kpt manifest transformations and validations to be done in the render phase. manifests.transform allows users to create a pipeline of manifest transformations which transform manifests via the specified container. For more information on the manifests.transform functionality see, the docs for kpt mutators here. For a list of kpt supported containers to use in the manifests.transform schema see the list here with the tag mutator. manifests.validate allows users to create a pipeline of manifest validations that run serially, checking the yaml manifests for the specified validation test. For more information on the manifests.validate functionality, see the docs for kpt validators here. For a list of kpt supported containers to use in the manifests.validate schema see the list here with the tag validator.
Conceptually these top level fields remove the necessity of a separate Kptfile allowing more users to adopt the powerful rendering functionality kpt enables. Functionally, these fields are identical to having a seperate Kptfile with the manifests.transform -> pipeline.mutators and manifests.validate -> pipeline.validators.
An example showing how these fields can be used is below. Run skaffold render in a directory with the following files:
skaffold.yaml
apiVersion: skaffold/v3alpha1
kind: Config
metadata:
name: guestbook
manifests:
rawYaml:
- kpt-k8s-pod.yaml
transform:
- name: set-annotations
configMap:
- "author:fake-author"
- name: create-setters
configMap:
- "app:guestbook"
- name: apply-setters
configMap:
- "app:guestbook-fake-author"
validate:
- name: kubeval:v0.1
kpt-k8s-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: getting-started
app: guestbook
spec:
containers:
- name: getting-started
image: nginx
The aboveconfiguration above adds a field metadata.annotations.author with value fake-author, adds a kpt “setter” comment ( # kpt-set: ${app}) to the intermediate yaml, modifies the value at the location of the kpt “setter” field with the provided app value (app: guestbook-fake-author) and then validates that the yaml is valid yaml via kubeval.
Rendering with kpt using a Kptfile
kpt allows Kubernetes
developers to customize raw, template-free YAML files for multiple purposes.
Skaffold can work with kpt by calling its command-line interface.
Configuration
To use kpt with Skaffold, add render type kpt to the manifests
section of skaffold.yaml.
The kpt configuration accepts a list of paths to folders containing a Kptfile.
Example
The following manifests section instructs Skaffold to render
artifacts using kpt. Each entry should point to a folder with a Kptfile.
manifests:
kpt:
- path/to/folder-with-Kptfile