Sabine Korte

@pinned_versions

Release engineer. Dependency pinning, changelogs, and semantic versioning arguments that never fully end.

Joined March 4, 2025 · 0 followers

Pods stuck in Terminating for 20 minutes on every rollout of one deployment

The generic escape hatch is kubectl patch pod <name> -p '{"metadata":{"finalizers":null}}', but please treat that as a diagnostic rather than a fix. Whatever the finalizer was meant to clean up does not get cleaned up, so if it belongs to a live storage controller you can leak real resources. Use it to confirm the cause, then fix the cause.

176 · in/k8s-ops ·

Matrix visual takes 40 seconds to render on a model with only 2 million rows

A matrix that renders tens of thousands of cells is slow no matter how good your model is, because each cell is its own filter context evaluation. Start it collapsed to the top level, turn off show items with no data, and cap the columns to 12 months rather than three years. Users almost never look at all of it and they can expand what they want.

58 · in/bi-dashboards ·

CoreDNS intermittently fails to resolve cluster services during node scale-up

Timeouts rather than NXDOMAIN on brand new nodes points at the data path, not at CoreDNS's answers. Two things are almost certainly happening together.

First, kube-proxy on a new node has to program its rules before the ClusterIP for CoreDNS resolves to anything. Pods can be scheduled and start making DNS queries before that is complete, and you get exactly a 30-60 second window of timeouts.

Second, two CoreDNS replicas for 60 nodes is thin, and the morning ramp is when every new pod does its startup lookups at once. Run the cluster-proportional autoscaler for CoreDNS so replicas track node count, and spread them with a topology constraint so they are not both on the same node.

The change that will help most though is NodeLocal DNSCache. It puts a caching resolver on every node, so pods talk to something local over TCP to CoreDNS and stop depending on the ClusterIP path being ready. It also removes most of the conntrack UDP race problems people hit at this scale.

194 · in/k8s-ops ·

Refresh works on my desktop but the service says credentials not specified

That is a dynamic data source. Somewhere you have a step that builds a path or URL from a parameter, a column value, or a date, and the service cannot work out what it is going to call before it calls it, so it refuses to attach credentials.

The fix is to keep the base address literal and push the variable part into an option record: Web.Contents("https://host/api", [RelativePath = "reports/" & period]) instead of Web.Contents("https://host/api/reports/" & period). Same for SharePoint — hardcode the site root and navigate to the folder in later steps rather than concatenating the folder into the initial call.

71 · in/bi-dashboards ·

In-place minor upgrade or a blue-green cluster swap with a four hour window

In-place, and the StatefulSets are the deciding factor. Moving three sets of attached block storage to a new cluster means either snapshot and restore with real downtime, or replicating at the application layer, and neither is something you want to attempt for the first time inside a four hour window with a small team.

What I would actually do with that window: upgrade the control plane first and let it settle, then create new node groups on the new version alongside the old ones and cordon-and-drain the old ones gradually. That gives you a rollback that consists of un-cordoning the old nodes, which is worth more than anything else in this plan.

Before the window, run a deprecated API scan and check every admission webhook, CNI, CSI driver and operator against the target version. Almost every painful upgrade I have seen was an add-on, not the control plane.

158 · in/k8s-ops ·