istio/istio · error
failed to wait for resource: %v
Error message
failed to wait for resource: %v
What it means
After applying a component's manifests, WaitForResources (skipped only when SkipWait is set) failed within i.WaitTimeout and the installer wraps it as "failed to wait for resource" and reports it to the progress logger. The underlying wait error identifies resources that never reached ready, such as deployments whose pods stay pending.
Source
Thrown at operator/pkg/install/install.go:185
manifests := manifestSet.Manifests
plog := i.ProgressLogger.NewComponent(cname)
for _, obj := range manifests {
obj, err := i.applyLabelsAndAnnotations(obj, cname)
if err != nil {
return err
}
if err := i.serverSideApply(obj); err != nil {
plog.ReportError(err.Error())
return err
}
plog.ReportProgress()
}
if !i.SkipWait {
if err := WaitForResources(manifests, i.Kube, i.WaitTimeout, i.DryRun, plog); err != nil {
werr := fmt.Errorf("failed to wait for resource: %v", err)
plog.ReportError(werr.Error())
return werr
}
}
plog.ReportFinished()
return nil
}
// serverSideApply creates or updates an object in the API server depending on whether it already exists.
func (i Installer) serverSideApply(obj manifest.Manifest) error {
const fieldOwnerOperator = "istio-operator"
dc, err := i.Kube.DynamicClientFor(obj.GroupVersionKind(), obj.Unstructured, "")
if err != nil {
return err
}
objectStr := fmt.Sprintf("%s/%s/%s", obj.GetKind(), obj.GetNamespace(), obj.GetName())
var dryRun []string
// TODO: can we do this a server-side dry run? it doesn't work well if the namespace is not already createdView on GitHub (pinned to 8dc789c5cf)
Solutions
- Inspect the unready resources from the error and their pods' events with kubectl describe
- Fix the root cause: quotas, image refs, tolerations, resource requests
- Increase the wait timeout for slow clusters
- Re-run the install after remediation
Defensive patterns
Strategy: retry
Try / catch
for attempt := 0; attempt < 2; attempt++ {
err := installer.InstallManifests(manifestSets)
if err == nil {
break
}
if !strings.Contains(err.Error(), "failed to wait for resource") {
return err
}
// inspect pods, fix quota/image/scheduling, then retry with a longer timeout
installer.WaitTimeout *= 2
} Prevention
- Set generous wait timeouts on slow clusters
- Pre-pull istiod and proxyv2 images on nodes
- Check ResourceQuota and LimitRange before install
- Watch the progress log to catch slow components early
When it happens
Trigger: Pods unschedulable (insufficient CPU/memory, taints), image pull failures, crashlooping containers, or a WaitTimeout shorter than the cluster needs to roll everything out.
Common situations: Resource-constrained clusters; wrong image registry or credentials; slow CI clusters against default timeouts.
Related errors
- resources not ready after %v: %v %s
- failed to install manifests: %v
- pruning: %v
- detected Cilium CNI with 'bpf-lb-sock=true'; this requires '
- cannot delete root element
AI-assisted analysis of istio/istio@8dc789c5cf (2026-08-15).
Data as JSON: /api/errors/14f41d03ce33f894.
Report an issue: GitHub.