• +44(0)7855748256
  • bolaogun9@gmail.com
  • London

At 2:07 a.m., Kubernetes Locked Me Out of My Own System

They told me, in the beginning, that the system was designed to be resilient.

What they did not tell me, what no one ever tells you until you have lived through it, is that resilience has a temperament. It is not gentle. It does not negotiate. It endures by refusing to care whether you understand it or not.

I first encountered this temperament at 2:07 a.m., under the sterile glow of a government-issued terminal, somewhere between a failing deployment and the quiet dread that comes with knowing millions of citizens are about to feel the consequences of your ignorance.

Everything, on the surface, appeared… immaculate.

Green dashboards. Stable metrics. Pods aligned like disciplined soldiers, obedient, upright, alive.

And yet, nothing worked.

No data moved. No service spoke. It was as if an invisible hand had reached into the system and severed the very idea of communication.


The Manager in the Machine

It helped me, later, to imagine Kubernetes not as software, but as a man.

Not a kind man. Not even a reasonable one. But a meticulous, incorruptible building manager overseeing a high-rise of impossible scale.

Every tenant, every application, was granted a space. But only on one condition:

Absolute compliance.

Miss a single form? The locks change.

Mislabel your identity? You are erased.

Request access without clearance? You are denied, silently, efficiently, permanently.

There are no appeals. Only logs.


The First Lesson: Failure That Refuses to Die

The first real clue came not from what I saw, but from what kept happening.

The application would start.

It would die.

Then, after a pause, longer than before, it would try again.

And die again.

Over and over.

This was my introduction to what the system called backoff. A curious form of patience, almost philosophical in nature. The machine did not panic. It waited. Then it tried again, slower each time, as if contemplating its own failure.

At first, I mistook this for stubbornness.

Why persist in the face of certainty? Why resurrect a process doomed to collapse?

But the system was not trying to fix the application.

It was protecting itself.

You see, if the machine indulged every failure instantly, if it allowed chaos to retry at full speed, it would not be long before the entire structure collapsed under the weight of its own desperation.

So it slowed the world down.

Not for you.

For itself.

And in that moment, I realized something unsettling:

The system did not exist to serve the application.

The application existed to justify the system.


The Second Lesson: The Gate You Cannot See

When I finally traced the failure, it was not code.

It was absence.

A missing secret, something as trivial, as forgettable, as a password not mounted where it should be.

But in this environment, nothing is trivial.

The container did not fail loudly. It did not explain itself.

It simply died, over and over, because it could not see what it required to exist.

And here is where the game changes.

In a lesser environment, I would have reached inside the machine. Opened a shell. Inspected the wound directly.

But here… that instinct was forbidden.

To touch the system was to contaminate it.

To inspect it manually was to violate the very principles that allowed it to be trusted.

I was not an operator.

I was an observer.

And observers, I would learn, must be patient.


The Third Lesson: The Supply Chain of Trust

Just as I began to understand failure, the system introduced me to something more insidious:

Refusal.

The application did not even start this time.

No crash. No retry. No logs.

Just a quiet, clinical message: image cannot be pulled.

In another life, I would have assumed a typo.

But this was not that kind of place.

Here, every artifact, every container image, was treated as a potential weapon.

The system would not fetch code from the outside world. Not even from the most trusted repositories. Not even for convenience.

Especially not for convenience.

Because convenience, in this environment, is indistinguishable from vulnerability.

Instead, every image had to pass through internal gates, scanned, signed, verified.

Proven innocent before it was allowed to exist.

And if it failed, even slightly, it was not rejected loudly.

It was simply… not invited in.


The Fourth Lesson: A System That Says “No”

When the application finally cleared the gates, when it was deemed worthy of existence, it encountered a new kind of failure.

It had nowhere to go.

The system, in its infinite calculation, could not find a place for it.

Not because the cluster was broken.

But because the cluster was precise.

There were rules, affinities, taints, selectors, each one a quiet law governing where things were allowed to live.

And if your application did not meet those laws, it was not scheduled.

Not delayed.

Not retried.

Just… held in limbo.

A perfect artifact. With no home.

It struck me then that this system was not designed to maximize usage.

It was designed to enforce boundaries.

And boundaries, when misunderstood, feel indistinguishable from failure.


The Fifth Lesson: The Forbidden Door

By the time the application finally ran, I believed I had won.

But the system, as it often does, saved its most elegant cruelty for last.

The application was alive.

But it was… wrong.

Requests failed. Data vanished. Connections dissolved into silence.

And once again, instinct took over.

I reached for the door every engineer knows.

The door that leads inside.

The command that grants you godlike access to a running process.

The ability to see, to test, to fix.

And the system… refused.

Not with an error of failure.

But with an error of policy.

I was not allowed inside.

Because inside, I could change things.

And if I changed things, the system could no longer trust what it was.

So the door remained closed.


The Sixth Lesson: The Bubble

It was only then that I discovered the workaround.

Not a bypass. Not a hack.

But a concession.

A sanctioned way to observe without touching.

They called it an ephemeral container.

I called it a bubble.

You do not enter the system.

You attach yourself to it.

You observe its processes, its network, its behavior,

, but you never alter it.

You remain separate.

Sterile.

Temporary.

And when you are done, you disappear.

As if you were never there at all.


The Invisible War

By dawn, the system was stable again.

The logs were clean. The services spoke. The citizens would never know how close it had come.

But I knew.

And what I knew changed how I saw everything.

This was not a platform for convenience.

It was a system built on distrust.

Not distrust of people, but of assumptions.

It assumed networks would fail.

It assumed code would break.

It assumed attackers would come.

And so it forced every component, every engineer, to operate within constraints so rigid they felt suffocating.

Until you realized what they were protecting.


A Final Thought

There is a question that lingers with me still.

The system retries endlessly.

It waits. It persists. It assumes failure is temporary.

But what if it isn’t?

What if the application is not misunderstood, but fundamentally flawed?

At what point does resilience become denial?

At what point does a system’s determination to recover become the very thing that prevents it from evolving?

I have no answer.

Only this:

In a world where systems refuse to break, it becomes dangerously easy for engineers to stop asking why they fail.

And that, more than any outage, is the failure that truly scales.

Leave a Reply

Your email address will not be published. Required fields are marked *