<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Eugene Romancenko: blog</title><description>Notes on DevOps, platform engineering, Kubernetes and sovereign cloud infrastructure.</description><link>https://romancenko.com/</link><item><title>Uptime Monitoring as Code: Site24x7, Terraform, and Zoho&apos;s OAuth</title><link>https://romancenko.com/blog/uptime-monitoring-as-code-site24x7/</link><guid isPermaLink="true">https://romancenko.com/blog/uptime-monitoring-as-code-site24x7/</guid><description>An external uptime check, defined in Terraform, on a free plan. It took a data-center mix-up, a trial-versus-free-plan question nobody documents, and a provider whose defaults pointed at Asia Pacific. The journey, the Terraform, and the Zoho OAuth flow underneath it.</description><pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate><category>Infrastructure as Code</category><category>Terraform</category><category>Site24x7</category><category>OAuth</category><category>Monitoring</category></item><item><title>Watching It: Golden Signals, a Region Quirk, and Logs on a Timer</title><link>https://romancenko.com/blog/monitoring-alerting-logging-on-a-budget/</link><guid isPermaLink="true">https://romancenko.com/blog/monitoring-alerting-logging-on-a-budget/</guid><description>Part three of the CI/CD series: once the pipeline could be trusted to ship, the next question was whether the site itself could be trusted to say so. Golden signals on a static site, why two alarms had to live in us-east-1, an uptime check from outside AWS, and why every log here expires in three days.</description><pubDate>Sun, 20 Sep 2026 00:00:00 GMT</pubDate><category>Platform Engineering</category><category>Monitoring</category><category>CloudWatch</category><category>AWS</category><category>Observability</category></item><item><title>Building the Pipeline: GitLab, Two Jobs, Zero Dollars</title><link>https://romancenko.com/blog/building-the-free-gitlab-pipeline/</link><guid isPermaLink="true">https://romancenko.com/blog/building-the-free-gitlab-pipeline/</guid><description>The follow-up to the CI/CD decision post, covering what actually got built: why GitLab won, how the pipeline is wired, what it costs, and the security choices that turned out to matter more than the vendor pick.</description><pubDate>Sat, 19 Sep 2026 00:00:00 GMT</pubDate><category>CI/CD</category><category>CI/CD</category><category>GitLab</category><category>AWS</category><category>IAM</category></item><item><title>Cheap CI/CD: What &apos;Free&apos; Actually Means</title><link>https://romancenko.com/blog/cheap-cicd-what-free-actually-means/</link><guid isPermaLink="true">https://romancenko.com/blog/cheap-cicd-what-free-actually-means/</guid><description>A side project with a genuine $0 budget forces a question most teams never ask: does this pipeline need a server at all? Real free-tier numbers, one real OIDC failure, and the one question that actually predicts the bill.</description><pubDate>Fri, 18 Sep 2026 00:00:00 GMT</pubDate><category>CI/CD</category><category>CI/CD</category><category>AWS</category><category>GitHub Actions</category><category>Serverless</category></item><item><title>The NetworkPolicy Drop That Looked Like Three Different Bugs</title><link>https://romancenko.com/blog/networkpolicy-drop-three-bugs/</link><guid isPermaLink="true">https://romancenko.com/blog/networkpolicy-drop-three-bugs/</guid><description>A missing egress port, a flawed debug test, and a live patch that kept silently reverting: how one dropped Kafka connection sent an investigation down three wrong paths first.</description><pubDate>Wed, 16 Sep 2026 00:00:00 GMT</pubDate><category>Kubernetes</category><category>Kubernetes</category><category>Networking</category><category>Incident Response</category></item><item><title>Zero-Downtime Kubernetes Deploys: The Checklist I Actually Use</title><link>https://romancenko.com/blog/zero-downtime-kubernetes-deploys/</link><guid isPermaLink="true">https://romancenko.com/blog/zero-downtime-kubernetes-deploys/</guid><description>Rolling updates, readiness probes, PodDisruptionBudgets and the CI/CD gates that turn &apos;it should be fine&apos; into a guarantee.</description><pubDate>Wed, 12 Aug 2026 00:00:00 GMT</pubDate><category>Kubernetes</category><category>Kubernetes</category><category>CI/CD</category><category>Reliability</category></item><item><title>Governing a Sovereign Cloud Platform Without Slowing Teams Down</title><link>https://romancenko.com/blog/sovereign-cloud-platform-governance/</link><guid isPermaLink="true">https://romancenko.com/blog/sovereign-cloud-platform-governance/</guid><description>Notes from building an operational delivery function for a regulated, national-infrastructure cloud platform, where governance has to be an enabler, not a gate.</description><pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate><category>Platform Engineering</category><category>Platform Engineering</category><category>Governance</category><category>Sovereign Cloud</category></item><item><title>Terraform at Scale: From One Landing Zone to Twenty Teams</title><link>https://romancenko.com/blog/terraform-at-scale-lessons/</link><guid isPermaLink="true">https://romancenko.com/blog/terraform-at-scale-lessons/</guid><description>What actually breaks when Terraform grows from a single account to a shared platform: state, modules, and the boring conventions that save you.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate><category>Infrastructure as Code</category><category>Terraform</category><category>IaC</category><category>AWS</category><category>GCP</category></item><item><title>Why &apos;No Errors Found&apos; Can Mean Your Tooling Couldn&apos;t Check</title><link>https://romancenko.com/blog/no-errors-found-tooling-gotcha/</link><guid isPermaLink="true">https://romancenko.com/blog/no-errors-found-tooling-gotcha/</guid><description>A short-lived cluster credential expired mid-investigation and quietly turned every log sweep into a false all-clear. The failure mode that should worry you most is the one that looks like success.</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate><category>Kubernetes</category><category>Kubernetes</category><category>Observability</category><category>Tooling</category></item><item><title>Leading a Platform Team Is Mostly a People Problem</title><link>https://romancenko.com/blog/leading-a-platform-team/</link><guid isPermaLink="true">https://romancenko.com/blog/leading-a-platform-team/</guid><description>Eight engineers, one 24/7 production platform, and a constant stream of requests that are rarely just technical. Notes on rotas, upskilling and the parts of the job nobody puts in the job description.</description><pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate><category>Team</category><category>Team Leadership</category><category>On-Call</category><category>People</category></item><item><title>When the Backend Recovers but the App Still Can&apos;t Reach It</title><link>https://romancenko.com/blog/backend-healthy-app-still-down/</link><guid isPermaLink="true">https://romancenko.com/blog/backend-healthy-app-still-down/</guid><description>A message broker&apos;s HA failover completed cleanly in three minutes. Client apps kept failing for fifteen more. The gap between those two numbers is where the real bug was hiding.</description><pubDate>Sat, 14 Feb 2026 00:00:00 GMT</pubDate><category>Cloud Foundry</category><category>Cloud Foundry</category><category>Networking</category><category>Kubernetes</category></item><item><title>The Leader Election That Was Looking for a Sidecar That Wasn&apos;t There</title><link>https://romancenko.com/blog/leader-election-looking-for-sidecar/</link><guid isPermaLink="true">https://romancenko.com/blog/leader-election-looking-for-sidecar/</guid><description>A Cloud Foundry app kept failing to connect to localhost:80 for something it never should have been talking to localhost about. It had brought a Kubernetes assumption with it that didn&apos;t survive the move.</description><pubDate>Mon, 05 Jan 2026 00:00:00 GMT</pubDate><category>Cloud Foundry</category><category>Cloud Foundry</category><category>Kubernetes</category><category>Platform Engineering</category></item><item><title>Anatomy of a Cluster-Wide Outage: When One Component&apos;s Bad Luck Breaks Every Node</title><link>https://romancenko.com/blog/cluster-wide-outage-single-component/</link><guid isPermaLink="true">https://romancenko.com/blog/cluster-wide-outage-single-component/</guid><description>A CNI sync component lost both replicas to a run of bad scheduling luck, and for about an hour, no node in the cluster could route Service traffic, including nodes that never stopped reporting healthy.</description><pubDate>Mon, 24 Nov 2025 00:00:00 GMT</pubDate><category>Kubernetes</category><category>Kubernetes</category><category>Incident Response</category><category>Reliability</category></item><item><title>Two Boring Pipeline Bugs That Teach a Bigger Lesson</title><link>https://romancenko.com/blog/two-boring-pipeline-bugs/</link><guid isPermaLink="true">https://romancenko.com/blog/two-boring-pipeline-bugs/</guid><description>A blank config default that silently meant &apos;no image pinned,&apos; and a deploy stage for a component that no longer existed. Neither is exciting. Both should have been impossible.</description><pubDate>Sat, 30 Aug 2025 00:00:00 GMT</pubDate><category>CI/CD</category><category>CI/CD</category><category>Platform Engineering</category><category>Automation</category></item><item><title>The Pipeline That Didn&apos;t Fail, It Just Waited Forever</title><link>https://romancenko.com/blog/pipeline-hang-git-credential-prompt/</link><guid isPermaLink="true">https://romancenko.com/blog/pipeline-hang-git-credential-prompt/</guid><description>A submodule clone inside a CI task hit a credential prompt no human would ever see, and instead of failing, it just sat there. A hang is a worse failure mode than an error, and it&apos;s usually self-inflicted.</description><pubDate>Tue, 17 Jun 2025 00:00:00 GMT</pubDate><category>CI/CD</category><category>CI/CD</category><category>Concourse</category><category>Git</category></item></channel></rss>