Services

What you'll find in the log

Buckingham Cloud is an independent technical log, with no sponsorship. We publish notes on cloud infrastructure, DevOps, and deployment automation based on what actually works in production. There are no commercial services behind these pages: the content is the resource, and each entry can be read separately depending on the problem you're facing.

Kubernetes and containers in production

Notes on CPU and memory limits, poorly calibrated requests, unexpected restarts, and tuning readiness and liveness probes. The focus is on reading scheduler and kubelet events before touching numbers, and on distinguishing memory shortage from real throttling. This is usually the starting point when a pod restarts for no apparent reason.

Terraform and remote state

When the local backend stops working, how locking works in remote backends, and what precautions to take before moving the state file. We cover plans that collide between two people, orphaned resources, and pre-change checks so the plan remains the expected one after the migration.

Observability without noise

Criteria for deciding which metrics, logs, and traces to keep when volume starts to outweigh usefulness. Includes examples of dashboards with a few well-chosen series, a discussion of trace sampling, and retention decisions that platform teams often make.

Message queues and retries

Comparisons of backoff strategies, dead-letter queues, and deduplication by idempotency key. We explain why infinite retries hide design flaws and how to measure the age of pending messages to detect buildup before it becomes an incident.

Cloud instance costs

A review of oversized resources, orphaned disks, and test environments that nobody shuts down. We propose periodic audits, tagging to attribute spend to teams, and warnings about usage commitments signed without measuring actual demand. No promises of magical savings.

Legacy service migration

Failure patterns observed when containerizing services that took absolute paths, on-disk state, or network dependencies for granted. We collect verification sequences before exposing traffic and per-environment configuration adjustments without rebuilding the image.

How each note is approved, reviewed, and closed before it is published

At Buckingham Cloud, no entry goes live without going through the same journey. First, the scope is agreed with the author: what specific problem will be documented, in which cluster or account it was observed, and which version of the tool was used. If the topic is a resource limit in Kubernetes or a remote Terraform backend, the scope is noted down before touching the keyboard. This way we avoid entries that promise more than they show.

This is an internal editorial process for the blog. It is not a consulting, auditing, or technical support service. If you want to suggest a topic or point out an error in a published note, write to us and we will review it.

Write to the editorial team
Prior agreement on scope Before writing, the problem, the environment where it was reproduced, and the versions involved are defined. If there is no way to verify it, the topic does not move forward.
Verification of each fragment Configuration blocks are copied from real environments and reviewed line by line. When something is simplified for the example, it is clarified in the text itself.
Dashboard screenshots and console output Dashboard images and logs are taken from the same environment described. Metrics are not retouched, and axes are not cropped to make a chart look better.
Comparisons without sponsorship When tools are compared, criteria are listed and the results obtained are shown. There are no commercial agreements with vendors or paid links within the articles.
Corrections after publication If a reader spots an error or a version has become outdated, the entry is corrected and the change is noted in the text itself, without rewriting the history.
Stages and delivery Each article is finalized in three steps: reviewed draft, technical verification of the content, and final editing. Only then is it published and announced in the weekly newsletter.

What you'll find in the log

This is not a service catalog or a sales showcase. These are four areas of work we cover with hands-on notes: each topic is documented with configuration snippets, dashboard screenshots, and unsponsored comparisons, written for those who have to make decisions about a real cluster rather than a presentation diagram.

Kubernetes and containers in production

Notes on resource limits, liveness and readiness probes, restarts that appear without a visible cause, and adjustments that sustain variable workloads. We review manifests, scheduler and kubelet events, and the typical mistakes made when copying values from a test environment to a cluster with real traffic.

Read the entry on resource limits

Terraform and infrastructure as code

When local state stops working, how locking works in remote backends, and what to check before moving a state file. We also cover plans that collide between two people, orphaned resources, and post-migration verification to confirm the plan is still what was expected.

See the topics we cover

Observability and cloud costs

A criterion for classifying metrics, logs, and traces by their operational value, instead of accumulating signals that nobody consults during an incident. On the spending side, we review oversized instances, orphaned disks, test environments that nobody shuts down, and tagging to attribute costs to each team.

Read the observability notes

Message queues and legacy service migration

Retry policies with backoff, dead-letter queues, and deduplication by idempotency key, with configuration examples for well-known brokers. In migrations, we collect the assumptions that break the first version: absolute paths, state on disk, network dependencies, and startups that the liveness probe does not tolerate.

Check out or subscribe to the newsletter

The content can be followed by tags such as networking, storage, or CI/CD, or through the weekly newsletter. There are no paid services associated: what we publish is documentation of what works in production.

A case without names: from a monolithic service to containers in a shared cluster

What follows is a work scenario, not a real client. It serves to show how a migration is organized when the service carries years of decisions and no one wants to take production down to test.

Context and starting point

A backend with moderate traffic, written several years ago, ran on a virtual machine that no one remembered configuring. The platform team wanted to move it to the same cluster where the other services lived, but the code assumed absolute paths, wrote temporary files to the local disk, and started up in about forty seconds. In the scenario, the task was not to rewrite the service, but to move it without breaking what already worked.

Constraints that could not be negotiated

The service had to keep responding during the migration window, with the same network configuration and without touching the database. There was also no room to add new dependencies to the image, so any adjustment had to be handled with environment variables and mounted volumes. The container's liveness probe could not wait longer than the actual startup took, and that number can only be known by measuring, not by copying.

Approach applied, step by step

First, the service was brought up in a local container using the same base image, and the assumptions that failed were noted: paths, permissions, ports, and startup times. Then the environment configuration was separated into variables, temporary files were moved to a volume, and readiness and liveness were tuned with the measured values. Traffic was shifted gradually, comparing metrics from the old and new services before retiring the original machine.

Scenario outcome

The service ended up running in the cluster with the same logic, without a rewrite and without changes to the database. The useful part of the exercise was not the container itself, but the list of assumptions that ended up documented: it is useful for the next migration and prevents repeating the same diagnosis from scratch. There are no improvement figures to show because the scenario is illustrative, and presenting them would be inventing results.

Cookie settings

We use cookies to keep the site stable, remember basic options, and understand which pages are useful. You can accept, reject, or review the settings before continuing.