{
  "id": "kubernetes/deployment-rollout-stuck-image-pull-back-off",
  "signature": "Error: Deployment rollout status is stuck: waiting for deployment spec update to be observed...",
  "signature_zh": "错误：部署回滚状态卡住：等待部署规范更新被观察...",
  "regex": "Deployment rollout status is stuck: waiting for deployment spec update to be observed",
  "domain": "kubernetes",
  "category": "runtime_error",
  "subcategory": null,
  "root_cause": "Deployment's image pull back-off prevents new pods from starting, so rollout never completes.",
  "root_cause_type": "generic",
  "root_cause_zh": "部署的镜像拉取回退阻止新 Pod 启动，因此回滚无法完成。",
  "versions": [
    {
      "version": "kubectl v1.28",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "kubectl v1.29",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "kubectl v1.30",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    }
  ],
  "os_specific": {},
  "dead_ends": [
    {
      "action": "Force rollout restart with `kubectl rollout restart deployment`",
      "why_fails": "Restart does not fix the underlying image pull issue; new pods will still fail.",
      "fail_rate": 0.9,
      "condition": "",
      "sources": []
    },
    {
      "action": "Delete and recreate the deployment",
      "why_fails": "Recreating deployment uses same image spec; problem persists unless image is fixed.",
      "fail_rate": 0.85,
      "condition": "",
      "sources": []
    },
    {
      "action": "Wait longer (timeout >10 minutes)",
      "why_fails": "Back-off is exponential; waiting alone won't resolve if image doesn't exist or auth fails.",
      "fail_rate": 0.8,
      "condition": "",
      "sources": []
    }
  ],
  "workarounds": [
    {
      "action": "Check image pull error: `kubectl describe pod <pod-name> | grep -A5 'Back-off'` to see exact reason (e.g., 'ImagePullBackOff'). Then fix image tag or registry credentials.",
      "success_rate": 0.85,
      "how": "Check image pull error: `kubectl describe pod <pod-name> | grep -A5 'Back-off'` to see exact reason (e.g., 'ImagePullBackOff'). Then fix image tag or registry credentials.",
      "condition": "",
      "sources": []
    },
    {
      "action": "Update deployment with correct image: `kubectl set image deployment/<name> <container>=<correct-image>:<tag>` and watch rollout.",
      "success_rate": 0.9,
      "how": "Update deployment with correct image: `kubectl set image deployment/<name> <container>=<correct-image>:<tag>` and watch rollout.",
      "condition": "",
      "sources": []
    },
    {
      "action": "If private registry, create image pull secret: `kubectl create secret docker-registry regcred --docker-server=<registry> --docker-username=<user> --docker-password=<pass> --docker-email=<email>` then patch service account.",
      "success_rate": 0.8,
      "how": "If private registry, create image pull secret: `kubectl create secret docker-registry regcred --docker-server=<registry> --docker-username=<user> --docker-password=<pass> --docker-email=<email>` then patch service account.",
      "condition": "",
      "sources": []
    }
  ],
  "workarounds_zh": [
    "Check image pull error: `kubectl describe pod <pod-name> | grep -A5 'Back-off'` to see exact reason (e.g., 'ImagePullBackOff'). Then fix image tag or registry credentials.",
    "Update deployment with correct image: `kubectl set image deployment/<name> <container>=<correct-image>:<tag>` and watch rollout.",
    "If private registry, create image pull secret: `kubectl create secret docker-registry regcred --docker-server=<registry> --docker-username=<user> --docker-password=<pass> --docker-email=<email>` then patch service account."
  ],
  "transition_graph": {
    "leads_to": [],
    "preceded_by": [],
    "frequently_confused_with": []
  },
  "official_doc_url": "https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#rolling-back-a-deployment",
  "official_doc_section": null,
  "error_code": null,
  "verification_tier": "ai_generated",
  "confidence": 0.82,
  "fix_success_rate": 0.75,
  "resolvable": "true",
  "first_seen": "2024-01-10",
  "last_confirmed": "2024-06-01",
  "last_updated": "2024-06-01",
  "evidence_count": 1,
  "tags": [],
  "locale": "en",
  "aliases": []
}