Incident Library
Applied filters SymptomStale or inconsistent API readsOrganisationBinder ProjectClear allEvery case under the filters, with no sentence; newest first.
Suggested filters Search, and the values found in your words appear here.

Graph

  • Root cause
  • Component
  • Symptom
  • Contributing factor
  • Case

Cases1 case

1 to 1 of 1

  1. Symptoms

    On Saturday 8 July 2018 at about 18:30 CEST, the launch success rate of mybinder.org dropped to zero and stayed there. Suspicious behaviour was first reported on Gitter at 22:48, more than four hours later.

    Root cause
    Component
    Contributing factor
    Detection

    Suspicious behaviour was reported on Gitter at 22:48 CEST, more than four hours after launch success dropped to zero; no downtime notifications were set up.

    Remediation
    • Deleted user pods older than four hours with the delete-pods.py script
    • Culled pods of the most-used images, such as ipython-in-depth, more aggressively
    • Restarted the Hub pod after about 600 pods were culled, which brought launches back to normal
    • Cordoned some of the extra nodes so the autoscaler could reclaim them
    • Ran manual max-age culling the next morning, letting the cluster scale back to 3 nodes
    Action items
    • Set up notifications of downtime
    • Automate cluster scale-down
    • Document the downtime recovery steps so every team member knows them
    • Fix KubeSpawner's failure to delete pods when the pod reflector fails
    • Make KubeSpawner more robust to pod reflector failure
    • Refactor the event reflector into a single reflector instead of one per pod
    • Detect a likely unhealthy Hub state and restart the Hub without manual intervention
    Lessons

    The delete-pods.py script was useful for bulk-deleting old pods, and once the problem was noticed the cluster was healthy within a few minutes. The outage lasted five hours before anyone noticed because no downtime notifications existed, and scaling the cluster back down still took several manual steps of cordoning and draining nodes.

Check your cluster for this

This case involves JupyterHub. kubegap audits a Kubernetes cluster for gaps like these, read-only, from Claude Code or Codex; its checks cite public reports like the ones in this library.

By root cause1