Cases4 cases
1 to 4 of 4
IL-0464IONOS Managed Kubernetes control planes went unreachable for minutes at a time as their shared etcd grew and fragmentedIONOS Cloud2026- Symptoms
From 14 to 16 March 2026 a subset of customer control planes on IONOS Managed Kubernetes (MK8s) became unavailable again and again, each time for several minutes. While a cluster was unreachable, operations that depend on the Kubernetes API, such as deployments, scaling and health checks, did not work reliably.
- Root cause
- Component
- Contributing factor
- Remediation
- Defragmented the affected database instances, reclaiming about 3–4 GiB per instance
- Shortened the database compaction intervals on the affected instances
- Deployed a fix for the affected AI Model Hub database services
- Applied final changes to all affected clusters
- Action items
- Expand monitoring dashboards to show control plane health per database instance
- Move the highest-volume clusters to dedicated database backends
- Make incidents of this kind trigger immediate paging
- Roll the updated compaction interval out to all shared control plane database instances
- Run automated, scheduled defragmentation jobs on all instances
- Rebalance clusters across database instances to reduce concentration
- Contact customers whose clusters write disproportionate data, for example to store large security scan reports outside the control plane database
- Introduce per-tenant resource quotas and key-count limits on the shared control plane database
- Re-architect the shared control plane for stronger isolation, with dedicated database instances and better vertical scaling
- Evaluate full database sharding for customers with consistently high data volumes
- Hold regular drills on database resource exhaustion and recovery
IL-0465IONOS Container Registry image pushes and pulls failed with 504 Gateway TimeoutIONOS Cloud2026- Symptoms
On 4 March 2026 customers of the IONOS Container Registry got 504 Gateway Timeout errors when pushing or pulling container images, and deployments that relied on the registry were blocked. The status page first reported an increased error count on the registry at 09:23 UTC, saying customers might be unable to pull images.
- Trigger
A migration combined with a temporary capacity constraint placed two critical control plane components on the same proxy instance, despite anti-affinity rules; the shared proxy then reached its concurrent connection limit.
- Root cause
- Component
- Contributing factor
- Remediation
- Rolled back a component of the Kubernetes control plane to an earlier version
- Provisioned additional proxy capacity
- Moved the affected control plane components onto separate proxy instances
- Action items
- Redesign registry-to-API connectivity so each node uses its own local proxy
- Adjust alert thresholds to warn before proxy connection use approaches capacity
- Deploy more infrastructure clusters and redistribute registries so no cluster exceeds safe capacity, with automation that keeps balancing load
IL-0037Image registry rate-limited a whole region after a crash-looping DaemonSet with imagePullPolicy Always pulled through three NAT instancesDatadog2019- Symptoms
Users reported that their jobs were not starting, with some sign that image pulls were involved. Many pods across the cluster were in error states related to image pulls, while applications that were already running were not affected.
- Trigger
A change to the permissions on a storage bucket that one application needed to read. The application could no longer start, and its DaemonSet, running on roughly a thousand nodes of the cluster, went into a crash loop with imagePullPolicy: Always, so every restart pulled the image again although it was already on the node.
- Root cause
- Component
- Contributing factor
- Detection
Users reported that their jobs were not starting; monitoring had not caught it first.
- Remediation
- replaced the affected NAT instances so registry traffic came from new source IPs
- reconfigured the static IPs and firewall rules so applications could reach the Cloud SQL database again
- Action items
- Add an admission webhook that rejects floating image tags, starting with latest
- Apply the image tag webhook to workload objects only, not to pods, after it blocked pods created by in-cluster controllers
- Lessons
The speakers' takeaway is to be very careful with DaemonSets in large clusters: they say they had broken everything DaemonSets depend on, including DNS, Vault and the image repository, and that it is very easy to break things when managing them by the thousand. imagePullPolicy: Always made every crash-loop restart pull the image again. Sending all registry traffic through three NAT instances put the whole region behind three source IPs, which the registry rate-limited, and changing those IPs cut the connections to a critical database reached over the internet through them. An admission webhook on pods rejects the pods that controllers in the cluster create, where no user sees the error.
IL-0040Parallel Helm installs saturated small gp2 root volumes on a kops cluster and left all three workers NotReady with the kubelet or Docker downSaltside2017- Symptoms
While running the CI process on a local machine to test an application Helm chart, the SRE lead watched the pods with watch kubectl get pods. All pods reached Running, and then some went back to Pending. Two hours later the problem had grown and some pods showed the phase Unknown.
- Trigger
A CI run installed the application's Helm charts for all four markets (Efritin.com, Tonaton.com, Ikman.lk and Bikroy.com) on the nonproduction cluster at the same time.
- Root cause
- Component
- Contributing factor
- Detection
The SRE lead saw pods go from Running back to Pending while watching kubectl get pods during the CI run; no monitoring raised an alert, even when all three workers were not ready.
- Remediation
- terminated the three worker nodes and let the auto scaling group replace them
- Action items
- Fix the Datadog integration for the nonproduction AWS account and repeat the installs with telemetry
- Increase the worker root EBS volumes from 20GB to 120GB
- Keep common base images pulled on every node with a DaemonSet until kops supports user hooks
- Configure different allocation limits for the different layers in Kubernetes
- Discuss a highly available Tiller with the Helm team
- Find a way to throttle the number of newly created pods
- Lessons
An ordinary deploy of the application could collapse the cluster, because the default 20GB gp2 root volumes could not keep up with parallel image pulls and container starts. Without node metrics and pod phase metrics, three NotReady workers raised no alert. A single Tiller replica can block the deploy that would fix an outage.
These 4 cases involve Managed Kubernetes control plane and provider API and Container registry and its credentials. 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
Capacity exhaustion4 cases
- Component
- Contributing factor
- Organisation
IL-0464IONOS Managed Kubernetes control planes went unreachable for minutes at a time as their shared etcd grew and fragmentedIONOS Cloud2026IL-0465IONOS Container Registry image pushes and pulls failed with 504 Gateway TimeoutIONOS Cloud2026IL-0037Image registry rate-limited a whole region after a crash-looping DaemonSet with imagePullPolicy Always pulled through three NAT instancesDatadog2019IL-0040Parallel Helm installs saturated small gp2 root volumes on a kops cluster and left all three workers NotReady with the kubelet or Docker downSaltside2017