kubernetes/kubernetes · error
concurrent-job-syncs must be greater than 0, but got %d
Error message
concurrent-job-syncs must be greater than 0, but got %d
What it means
Thrown by JobControllerOptions.Validate() when --concurrent-job-syncs (Int32) is less than 1. The job controller reconciles Job objects (and their tracked Pods) across N workers; zero means batch Jobs never get processed for completion/failure handling. Returned in the validation error slice aggregated by KubeControllerManagerOptions.Validate().
Source
Thrown at cmd/kube-controller-manager/app/options/jobcontroller.go:60
func (o *JobControllerOptions) ApplyTo(cfg *jobconfig.JobControllerConfiguration) error {
if o == nil {
return nil
}
cfg.ConcurrentJobSyncs = o.ConcurrentJobSyncs
return nil
}
// Validate checks validation of JobControllerOptions.
func (o *JobControllerOptions) Validate() []error {
if o == nil {
return nil
}
errs := []error{}
if o.ConcurrentJobSyncs < 1 {
errs = append(errs, fmt.Errorf("concurrent-job-syncs must be greater than 0, but got %d", o.ConcurrentJobSyncs))
}
return errs
}
View on GitHub (pinned to b882c60b40)
Solutions
- Set --concurrent-job-syncs to >=1 (default is 5) or remove the flag.
- Disable the controller properly with --controllers=-job if batch processing is unwanted.
- Clamp any programmatically computed value to a minimum of 1.
Example fix
// before --concurrent-job-syncs=0 // after --concurrent-job-syncs=5
Defensive patterns
Strategy: validation
Validate before calling
if opts.JobController.ConcurrentJobSyncs < 1 {
return fmt.Errorf("concurrent-job-syncs must be >= 1")
} Prevention
- Disable the job controller via --controllers=-job instead of setting syncs to 0.
- Clamp formula-derived worker counts to >=1.
- Validate component-config YAML in CI before applying.
When it happens
Trigger: Starting KCM with --concurrent-job-syncs=0 or negative. Equivalently a JobControllerConfiguration component-config with concurrentJobSyncs: 0.
Common situations: Clusters derived from autoscaled node counts where a concurrency formula yields 0; disabling the job controller by zeroing syncs instead of using --controllers=-job; stale config maps left over from a cluster restore.
Related errors
- concurrent-ephemeralvolume-syncs must be greater than 0, but
- concurrent-horizontal-pod-autoscaler-syncs must be greater t
- --service-cluster-ip-range can not contain more than two ent
- built-in cloud providers are disabled. The ipam %s is not av
- concurrent-resourceclaim-syncs must be larger than 0, got %d
AI-assisted analysis of kubernetes/kubernetes@b882c60b40 (2026-08-07).
Data as JSON: /api/errors/f0f27bb0cafbe46d.
Report an issue: GitHub.