{"record":{"id":"43cddf02e1acf864","repo":"cilium/cilium","slug":"deployment-s-is-updated-but-rollout-has-not-start","errorCode":null,"errorMessage":"deployment %s is updated but rollout has not started","messagePattern":"deployment (.+?) is updated but rollout has not started","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cilium-cli/status/k8s.go","lineNumber":184,"sourceCode":"\tstateCount.Unavailable = int(d.Status.UnavailableReplicas)\n\n\tstatus.mutex.Lock()\n\tdefer status.mutex.Unlock()\n\n\tstatus.PodState[name] = stateCount\n\n\tnotReady := stateCount.Desired - stateCount.Ready\n\tif notReady > 0 {\n\t\tstatus.AddAggregatedError(name, name, fmt.Errorf(\"%d pods of Deployment %s are not ready\", notReady, name))\n\t}\n\n\tif unavailable := stateCount.Unavailable - notReady; unavailable > 0 {\n\t\tstatus.AddAggregatedWarning(name, name, fmt.Errorf(\"%d pods of Deployment %s are not available\", unavailable, name))\n\t}\n\n\t// ObservedGeneration behind: DeploymentController has not yet noticed the latest change\n\tif d.Generation != d.Status.ObservedGeneration {\n\t\tstatus.AddAggregatedError(name, name, fmt.Errorf(\"deployment %s is updated but rollout has not started\", name))\n\t}\n\n\t// Deployment change is not fully rolled out\n\tif d.Status.UpdatedReplicas < d.Status.Replicas {\n\t\tstatus.AddAggregatedError(name, name, fmt.Errorf(\"deployment %s is rolling out - %d out of %d pods updated\", name, d.Status.UpdatedReplicas, d.Status.Replicas))\n\t}\n\n\treturn false, nil\n}\n\nfunc (k *K8sStatusCollector) podCount(ctx context.Context, status *Status) error {\n\tvar numberAllPod, numberCiliumPod int\n\n\tpods, err := k.client.ListPods(ctx, \"\", metav1.ListOptions{})\n\tif err != nil {\n\t\treturn err\n\t}\n","sourceCodeStart":166,"sourceCodeEnd":202,"githubUrl":"https://github.com/cilium/cilium/blob/ac7b90affa4baf0642e6685319d56907b3a73a6d/cilium-cli/status/k8s.go#L166-L202","documentation":"cilium-cli compares the Deployment's metadata.Generation with status.ObservedGeneration. When they differ, the Kubernetes DeploymentController has not yet processed the latest spec change, so the collector raises this aggregated error. It is a transient controller-lag signal rather than a pod health problem.","triggerScenarios":"deploymentStatus read a Deployment immediately after its spec changed (d.Generation != d.Status.ObservedGeneration), e.g. `cilium upgrade`/config change moments before `cilium status` ran.","commonSituations":"Running `cilium status` immediately after `cilium install`/`upgrade`; a slow or wedged kube-controller-manager; API server/controller backpressure on busy clusters.","solutions":["Wait a few seconds and re-run `cilium status`; the controller usually catches up quickly.","Check the controller is healthy: `kubectl get pods -n kube-system | grep kube-controller-manager` and its logs.","Verify the Deployment's annotations/status with `kubectl get deployment <name> -o yaml` to see ObservedGeneration vs metadata.generation.","If it persists across minutes, investigate kube-controller-manager connectivity to the API server."],"exampleFix":"// before\ncilium upgrade && cilium status   # races the controller\n// after\ncilium upgrade\nkubectl rollout status deployment/cilium -n kube-system\ncilium status","handlingStrategy":"retry","validationCode":"d, _ := clientset.AppsV1().Deployments(ns).Get(ctx, \"cilium\", metav1.GetOptions{})\nif d != nil && d.Generation != d.Status.ObservedGeneration {\n    // controller lag; retry shortly\n}","typeGuard":null,"tryCatchPattern":"if err := status.Check(ctx); err != nil && strings.Contains(err.Error(), \"rollout has not started\") {\n    time.Sleep(10 * time.Second) // let DeploymentController observe the change\n    err = status.Check(ctx)\n}","preventionTips":["Insert a delay between install/upgrade and status checks.","Ensure kube-controller-manager is healthy in the cluster.","Don't interpret a single early status run as a failed install."],"tags":["kubernetes","deployment","rollout","cilium-cli"],"backgroundTag":"rollout-not-started","analyzedSha":"ac7b90affa4baf0642e6685319d56907b3a73a6d","analyzedAt":"2026-08-31T18:27:15.868Z","schemaVersion":2},"datasetVersion":"2026-08-31T19:17:28.585Z"}