GoogleContainerTools/skaffold · error
kpt deployer mixed in with other deployers not supported yet
Error message
kpt deployer mixed in with other deployers not supported yet. Please use only kpt deployer
What it means
GetDeployer builds the deployer set from the skaffold.yaml `deploy:` configs. The kpt deployer cannot be combined with any other deployer, so if a kpt deployer was just created and any other deployer is already present in the list, this error is returned.
Source
Thrown at pkg/skaffold/runner/deployer.go:200
deployer, err := kubectl.NewDeployer(dCtx, labeller, d.KubectlDeploy, runCtx.Artifacts(), configName, gks)
if err != nil {
return nil, err
}
deployers = append(deployers, deployer)
}
if d.KptDeploy != nil {
if d.KptDeploy.Dir == "" {
log.Entry(context.TODO()).Infof("manifests are deployed from render path %v\n", hydrationDir)
d.KptDeploy.Dir = hydrationDir
}
deployer, err := kptV2.NewDeployer(dCtx, labeller, d.KptDeploy, runCtx.Opts, configName, gks)
if err != nil {
return nil, err
}
if len(deployers) > 0 {
return nil, fmt.Errorf("kpt deployer mixed in with other deployers not supported yet. Please use only kpt deployer")
}
deployers = append(deployers, deployer)
}
if d.CloudRunDeploy != nil {
deployer, err := getCloudRunDeployer(dCtx.RunContext, labeller, runCtx.DeployConfigs(), configName)
if err != nil {
return nil, err
}
deployers = append(deployers, deployer)
}
}
if localDeploy && remoteDeploy {
return nil, errors.New("docker deployment not supported alongside cluster deployments")
}
return deploy.NewDeployerMux(deployers, runCtx.IterativeStatusCheck()), nil
}View on GitHub (pinned to a1189de023)
Solutions
- Keep only the `kpt` deployer in the `deploy:` section when using kpt
- Move the kubectl/helm deployments into a separate profile or separate skaffold run
- If kpt is only needed for some manifests, restructure configs so kpt is used exclusively per invocation
Example fix
// before (skaffold.yaml)
deploy:
kubectl: {}
kpt: {}
// after
deploy:
kpt: {} Defensive patterns
Strategy: validation
Validate before calling
const deployers = ['kubectl','helm','kustomize','kpt'].filter(k => cfg.deploy?.[k])
if (deployers.includes('kpt') && deployers.length > 1) {
throw new Error('kpt deployer cannot be combined with: ' + deployers.filter(d => d !== 'kpt').join(','))
} Prevention
- Use exactly one deployer per skaffold invocation
- Isolate kpt-based deployments in a dedicated profile
- Review merged configs from dependencies/profiles for stray deployer sections
When it happens
Trigger: A skaffold.yaml (or multi-config run) whose `deploy:` section defines `kptDeploy` alongside another deployer such as `kubectlDeploy`, `helmDeploy`, or `kustomizeDeploy`.
Common situations: Merging deploy configs from multiple profiles or `requires:` dependencies where one config uses kpt and another uses kubectl/helm.
Related errors
- found multiple status check timeouts in skaffold.yaml (not s
- found multiple log prefixes in skaffold.yaml (not supported
- found multiple namespaces in skaffold.yaml (not supported in
- creating renderer: %w
- creating deployer: %w
AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05).
Data as JSON: /api/errors/587757493b238bee.
Report an issue: GitHub.