DEV Community

jasonmills94
jasonmills94

Posted on

EKS Rollouts Need a Preflight Checklist

EKS rollouts usually fail from small misses. This preflight checklist catches image, probe, config, and email-path issues before they reach prod.

If you run EKS in a busy team, failed deploys are rarely caused by one dramatic bug. Most of the time it is a stack of small misses: a stale image tag, a probe that looked fine in staging, or a secret rotation that did not land in every namespace. After a few rough evenings, I stopped trusting "it passed CI" as the only gate. A short preflight checklist has saved me more time than any clever rollback trick, and it keeps releases calm even when the week is messy.

Why a preflight list beats a heroic rollback

Rollback stories get attention, but most production pain comes from things we could have spotted ten minutes earlier. Google's SRE workbook makes the same point in a broader way: reduce toil and standardize repeatable operational work so incidents do not depend on memory alone. See the operational guidance here: https://sre.google/workbook/toil/.

For EKS, my goal is boring deploys. I want the release to feel almost uneventful, which is not glamorous but it is what scales. The checklist below is not fancy, and thats kind of the point.

The checks I run before every EKS rollout

  1. Confirm the image digest, not just the tag. Tags drift. Digests do not.
  2. Check the target namespace values after template rendering, not before.
  3. Verify every required secret and config map exists in the cluster you are about to touch.
  4. Review readiness and liveness probes against current app behavior, espescially after startup-path changes.
  5. Validate HPA and resource requests so the new version does not fight the scheduler.
  6. Make sure alert routing is known before release. If the rollout goes sideways, the on-call path should already be obvious.

I also verify rollout strategy settings. Kubernetes documents how maxUnavailable and maxSurge shape deployment behavior, and those defaults matter more than people think during a fragile release: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/. People occassionally skip this because the manifest "looks normal", but normal is not always safe.

Two related habits have paid off for me:

  • Keep a short note for expected log lines and health endpoints per service.
  • Keep release evidence in one place, including image digest, commit SHA, and any config diffs.

That second point sounds administrative, but it speeds up triage a lot. The same reason I like clear inbox correlation IDs in auth systems applies to deploys too: one identifier across tools saves your brain for the hard part. This post on inbox correlation IDs makes the pattern obvious in another domain.

Where temporary inbox testing actually helps

This part surprises some teams. Even in infrastructure-heavy rollouts, I still include one lightweight email-path check when the service touches invites, alerts, or account verification. I do not mean full end-to-end UI theatre. I mean a small proof that the app can emit the expected message, the worker can process it, and the content is roughly correct.

For that, a temp mailbox is useful because it lets me validate the side effect without polluting shared inboxes. If your pipeline triggers a notification on first-run bootstrap, or sends operator-facing alerts after a rollout, a disposable destination can catch obvious breakage fast. I have also used a dummy e mail target during release rehearsals when I only needed to confirm formatting and timing, and it was honestly easier then asking everyone to ignore test mail.

The trick is scope. This is not your whole quality strategy, just one targeted signal. If you automate it, keep the run isolated and clearly named. A temp mailid or temp inbox that gets reused across jobs will make the data noisy real quick. Ive seen teams reuse the same mailbox for weeks and then wonder why triage feels weird.

That is why I like reading patterns from adjacent automation work too. The idea behind inbox probes in automation maps well to cloud release checks: probe the critical side effect, record the result, move on.

A small rollout script that catches boring failures

Here is a stripped-down example I keep close to my CI/CD jobs:

#!/usr/bin/env bash
set -euo pipefail

kubectl config use-context "$EKS_CONTEXT"
kubectl -n "$NAMESPACE" get secret app-secrets >/dev/null
kubectl -n "$NAMESPACE" get configmap app-config >/dev/null
kubectl -n "$NAMESPACE" diff -f rendered/deployment.yaml || true
kubectl -n "$NAMESPACE" rollout status deploy/api --timeout=120s
Enter fullscreen mode Exit fullscreen mode

This does not replace richer validation, but it catches the dumb stuff early. In many teams, dumb stuff is the majority of failed deploys, so this is a good trade.

If your pipeline is on GitHub Actions, I also recommend recording preflight output as an artifact and printing the image digest directly in logs. AWS notes in its EKS best practices that observability and consistent release metadata are key to faster diagnosis, which matches what I have seen in the field: https://aws.github.io/aws-eks-best-practices/.

One more thing: run the checklist against the environment you will actually ship to. I know that sounds obvious, but I have seen people validate staging manifests and then push a production-only Helm value by mistake. That sort of failure feels silly after the fact, but in the moment it still burns an hour or two. If your tired and moving fast, this is exactly the step that gets skipped.

Quick Q&A before you ship

Do I need a long checklist?

No. Start with five to eight checks. If the list becomes a wall of text, no one will read it when things get tense, and the useful bits get burried.

Should every service use the same list?

Not exactly. Keep a shared base, then add a small service-specific section. Payment APIs, batch workers, and notification services fail in different ways.

When should I add email-path validation?

When the release can affect invites, alerts, verification, or onboarding mail. Skip it for services that never touch outbound mail.

What is the main outcome I want?

Fewer surprise deploys, faster triage, and fewer late-night "it worked in CI" conversations. That sounds simple, but it works.

Preflight discipline is not exciting work, and maybe that is why teams postpone it. Still, it is one of the cleanest reliability upgrades you can make in AWS and Kubernetes operations. Build the list once, trim it when it grows stale, and let the rollout be boring on purpose.

Top comments (0)