Deployers

This page discusses how to set up Skaffold to use the tool of your choice to deploy your app to a Kubernetes cluster.

When Skaffold deploys an application the following steps happen:

  • the Skaffold deployer renders the final kubernetes manifests: Skaffold replaces untagged image names in the kubernetes manifests with the final tagged image names. Also, in case of the more complicated deployers the rendering step involves expanding templates (in case of helm) or calculating overlays (in case of kustomize).
  • the Skaffold deployer deploys the final kubernetes manifests to the cluster

Supported deployers

Skaffold supports the following tools for deploying applications:

The deploy section in the Skaffold configuration file, skaffold.yaml, controls how Skaffold builds artifacts. To use a specific tool for deploying artifacts, add the value representing the tool and options for using the tool to the deploy section.

For a detailed discussion on Skaffold configuration, see Skaffold Concepts and skaffold.yaml References.

Deploying with kubectl

kubectl is Kubernetes command-line tool for deploying and managing applications on Kubernetes clusters.

Skaffold can work with kubectl to deploy artifacts on any Kubernetes cluster, including Google Kubernetes Engine clusters and local Minikube clusters.

Configuration

To use kubectl, add deploy type kubectl to the deploy section of skaffold.yaml.

The kubectl type offers the following options:

Option Description Default
manifests the Kubernetes yaml or json manifests. ["k8s/*.yaml"]
remoteManifests Kubernetes manifests in remote clusters. []
flags additional flags passed to kubectl.

flags section offers the following options:

Option Description Default
global additional flags passed on every command. []
apply additional flags passed on creations (kubectl apply). []
delete additional flags passed on deletions (kubectl delete). []

Example

The following deploy section instructs Skaffold to deploy artifacts using kubectl:

deploy:
  kubectl:
    manifests:
    - k8s-*

Deploying with Helm

Helm is a package manager for Kubernetes that helps you manage Kubernetes applications. Skaffold can work with Helm by calling its command-line interface.

Configuration

To use Helm with Skaffold, add deploy type helm to the deploy section of skaffold.yaml.

The helm type offers the following options:

Option Description
releases Required a list of Helm releases.
flags additional option flags that are passed on the command line to helm.

Each release includes the following fields:

Option Description Default
name Required name of the Helm release.
chartPath Required path to the Helm chart.
valuesFiles paths to the Helm values files. []
values key-value pairs supplementing the Helm values file. {}
namespace Kubernetes namespace.
version version of the chart.
setValues key-value pairs. If present, Skaffold will send --set flag to Helm CLI and append all pairs after the flag. {}
setValueTemplates key-value pairs. If present, Skaffold will try to parse the value part of each key-value pair using environment variables in the system, then send --set flag to Helm CLI and append all parsed pairs after the flag. {}
setFiles key-value pairs. If present, Skaffold will send --set-file flag to Helm CLI and append all pairs after the flag. {}
wait if true, Skaffold will send --wait flag to Helm CLI. false
recreatePods if true, Skaffold will send --recreate-pods flag to Helm CLI when upgrading a new version of a chart in subsequent dev loop deploy. false
skipBuildDependencies should build dependencies be skipped. false
useHelmSecrets instructs skaffold to use secrets plugin on deployment. false
remote specifies whether the chart path is remote, or exists on the host filesystem. remote: true implies skipBuildDependencies: true. false
overrides key-value pairs. If present, Skaffold will build a Helm values file that overrides the original and use it to call Helm CLI (--f flag).
packaged parameters for packaging helm chart (helm package).
imageStrategy adds image configurations to the Helm values file.

Helm Build Dependencies

The skipBuildDependencies flag toggles whether depenedencies of the Helm chart are built with the helm dep build command. This command manipulates files inside the charts subfolder of the specified Helm chart.

If skipBuildDependencies is false then skaffold dev does not watch the charts subfolder of the Helm chart, in order to prevent a build loop - the actions of helm dep build always trigger another build.

If skipBuildDependencies is true then skaffold dev watches all files inside the Helm chart.

Example

The following deploy section instructs Skaffold to deploy artifacts using helm:

deploy:
  helm:
    releases:
    - name: skaffold-helm
      chartPath: skaffold-helm
      values:
        image: gcr.io/k8s-skaffold/skaffold-helm

Deploying with kustomize

kustomize allows Kubernetes developers to customize raw, template-free YAML files for multiple purposes. Skaffold can work with kustomize by calling its command-line interface.

Configuration

To use kustomize with Skaffold, add deploy type kustomize to the deploy section of skaffold.yaml.

The kustomize type offers the following options:

Option Description Default
path path to Kustomization files. .
flags additional flags passed to kubectl.
buildArgs additional args passed to kustomize build. []

flags section offers the following options:

Option Description Default
global additional flags passed on every command. []
apply additional flags passed on creations (kubectl apply). []
delete additional flags passed on deletions (kubectl delete). []

Example

The following deploy section instructs Skaffold to deploy artifacts using kustomize:

deploy:
  kustomize: {}
# The deploy section above is equal to
# deploy:
#   kustomize:
#     path: "."