kubernetes/kops · error
failed to loadbalancer ACTIVE provisioning status %v: %v
Error message
failed to loadbalancer ACTIVE provisioning status %v: %v
What it means
When creating a new LBPool, RenderOpenstack first waits for the parent load balancer to reach ACTIVE provisioning status via waitLoadbalancerActiveProvisioningStatus. If the wait times out or the LB transitions to ERROR, the error is wrapped with the last observed provisioning status. Creating a pool against a non-ACTIVE LB would be rejected by Octavia anyway.
Source
Thrown at upup/pkg/fi/cloudup/openstacktasks/lbpool.go:132
}
} else {
if changes.ID != nil {
return fi.CannotChangeField("ID")
}
if changes.Name != nil {
return fi.CannotChangeField("Name")
}
}
return nil
}
func (_ *LBPool) RenderOpenstack(t *openstack.OpenstackAPITarget, a, e, changes *LBPool) error {
if a == nil {
// wait that lb is in ACTIVE state
provisioningStatus, err := waitLoadbalancerActiveProvisioningStatus(t.Cloud.LoadBalancerClient(), fi.ValueOf(e.Loadbalancer.ID))
if err != nil {
return fmt.Errorf("failed to loadbalancer ACTIVE provisioning status %v: %v", provisioningStatus, err)
}
LbMethod := v2pools.LBMethodRoundRobin
if fi.ValueOf(e.Loadbalancer.Provider) == "ovn" {
LbMethod = v2pools.LBMethodSourceIpPort
}
poolopts := v2pools.CreateOpts{
Name: fi.ValueOf(e.Name),
LBMethod: LbMethod,
Protocol: v2pools.ProtocolTCP,
LoadbalancerID: fi.ValueOf(e.Loadbalancer.ID),
}
pool, err := t.Cloud.CreatePool(poolopts)
if err != nil {
return fmt.Errorf("error creating LB pool: %v", err)
}
e.ID = new(pool.ID)
View on GitHub (pinned to 4c8573c808)
Solutions
- Inspect LB state: openstack loadbalancer status show <lb-id>; fix the fault that left it in ERROR (often a failed listener/member).
- Delete and let kops recreate an LB stuck in ERROR: openstack loadbalancer delete --wait, then re-run kops update.
- Retry later if it is transient PENDING_* — amphora capacity issues often resolve after minutes.
- Check octavia control-plane/amphora health (agent list, image availability) in the cloud.
Example fix
// before: LB stuck in ERROR after failed listener failed to loadbalancer ACTIVE provisioning status ERROR: timed out waiting // after $ openstack loadbalancer delete <lb-id> --wait $ kops update cluster --name mycluster --yes # recreates LB then pool
Defensive patterns
Strategy: retry
Validate before calling
lb := octaviaLBShow(lbID)
if lb.ProvisioningStatus == "ERROR" {
return fmt.Errorf("LB %s is in ERROR state; fix or delete it before pool creation", lbID)
} Try / catch
if err := kopsUpdate(); err != nil {
if strings.Contains(err.Error(), "ACTIVE provisioning status") {
// LB stuck in PENDING_*/ERROR: investigate, possibly delete and recreate
return inspectOrRecreateLoadBalancer()
}
return err
} Prevention
- Check `openstack loadbalancer status show` before updates to catch ERROR state early.
- Ensure amphora capacity/images are healthy in the cloud.
- Avoid overlapping kops runs that keep the LB in PENDING_* states.
When it happens
Trigger: The parent LB stays in PENDING_CREATE/PENDING_UPDATE beyond the polling timeout, or its provisioning_status becomes ERROR after a failed earlier operation (listener/member creation) — then pool creation is aborted.
Common situations: Octavia amphora stuck booting (capacity/network issues); a previous task failed leaving LB in ERROR; slow cloud with default wait timeout too short; provider ovn LBs taking long to activate.
Related errors
- failed to build load balancer client: %w
- cluster configured to use octavia, but router was not config
- error building lb client: %w
- loadbalancer API versions not found
- GetApiIngressStatus: Failed to list openstack loadbalancers:
AI-assisted analysis of kubernetes/kops@4c8573c808 (2026-09-05).
Data as JSON: /api/errors/0ccf4e944fa36312.
Report an issue: GitHub.