I spent an evening sketching Kubernetes manifests for a static blog. Helm charts, Ingress controllers, cert-manager, PersistentVolumes for build artifacts.

It looked beautiful on paper. Then I asked myself: what problem does this actually solve?

This post is the honest answer — a decision framework for when to add infrastructure complexity and when to stay lean.


The Complexity Spectrum

Every deployment strategy sits on a spectrum from zero infrastructure to full orchestration:

The current blog sits at stage 2 — GitLab Pages with a CI/CD pipeline. The question is: should it move to stage 4?


What Kubernetes Actually Gives You

Kubernetes is a container orchestration platform:

Capability What It Does Does a Blog Need It?
Auto-scaling Add/remove pods based on load ❌ Static files don’t scale
Self-healing + rolling updates Restart crashed containers, zero-downtime deploys ❌ Static site = instant swap, no containers to heal
Service discovery + load balancing Find and route to services ❌ One service: the CDN handles routing
Secret management Inject secrets at runtime ⚠️ GitLab CI variables work fine
Config management Environment-specific configs ⚠️ One environment: production

For a static blog, Kubernetes solves problems that don’t exist. The site is pre-built HTML served from a CDN.


The Cost of Kubernetes

Adding Kubernetes to a static blog means adding:

Component What It Adds Maintenance Cost
K8s cluster 3+ nodes, control plane High — upgrades, networking, storage
Ingress + TLS HTTP routing, automatic certs Medium — TLS, rate limiting, cert rotation
Helm charts Package management Medium — templating, versioning
Monitoring + logging Prometheus, Grafana, log aggregation High — dashboards, alerts, retention, storage
CI/CD for K8s Build, push, deploy images High — registry, pipeline, rollback

The total: 7+ components instead of 1 YAML file.


The Decision Framework

Here’s the framework I use for infrastructure decisions:

For this blog:

Question Answer Why
Fails under load? No Static files from CDN handle any traffic
Multiple services? No One service: the static site
Team > 3? No Solo developer
Zero-downtime deploys? No Static site = instant swap

Four “No” answers. Kubernetes is not the right choice.


When Kubernetes DOES Make Sense

Kubernetes is the right choice when:

Scenario Why It Helps
Microservices architecture Service discovery, load balancing, rolling updates
Multiple teams deploying Namespace isolation, RBAC, CI/CD per team
Variable traffic patterns Auto-scaling saves cost during low traffic
Stateful services Persistent volumes, stateful sets for databases
Multi-cloud or hybrid Consistent API across providers
Compliance requirements Network policies, pod security, audit logging

None of these apply to a static blog with a solo developer.


The “Just for Fun” Argument

Kubernetes is worth learning. But there are better ways to learn it:

Approach Cost Learning Value Risk
Add K8s to the blog High Medium High (breaks production)
Local cluster (minikube/k3s) Zero High Zero
Cloud K8s tutorial (free tier) Zero High Low
K8s the hard way (from scratch) Zero Very High Zero

The best way to learn Kubernetes is to break it, not to break your production blog.


The Architecture Comparison

Current Architecture (GitLab Pages)

Components: 3. Maintenance: near-zero. Cost: $0.

Hypothetical Kubernetes Architecture

Components: 7+. Maintenance: high. Cost: $30-100/mo.


The Cost Comparison

Metric GitLab Pages Kubernetes
Monthly cost $0 $30-100 (min nodes)
Components 1 (.gitlab-ci.yml) 7+
Setup time 15 minutes 2-4 hours
Upgrade burden None Manual
Failure modes 2 10+

The Real Cost: Cognitive Load

The hidden cost of Kubernetes isn’t money — it’s cognitive load.

Every component you add is something you must understand, monitor, upgrade, debug, and document.

For a solo developer writing a blog, that cognitive load takes time away from writing. The blog exists to publish ideas, not to manage infrastructure.


The Alternative: Layer Up When You Need To

Instead of jumping to Kubernetes, layer complexity only when you need it:

Need Solution Complexity
Static hosting GitLab Pages (current) Zero
Dynamic features + data Serverless functions, SQLite/Turso Low
Authentication OAuth2 proxy or Cloudflare Access Low
Real-time WebSocket via serverless Medium
Full backend Single VPS + Docker Compose Medium
Microservices Kubernetes (only then) High

Don’t add Kubernetes until you’ve outgrown Docker Compose on a single VPS.


The Verdict

Stay on GitLab Pages. Don’t add Kubernetes.

Decision Rationale
Keep GitLab Pages $0, zero maintenance, reliable
Keep the CI/CD pipeline 2-minute deploys, architecture-agnostic
Learn K8s elsewhere minikube, k3s, or cloud free tier
Add complexity only when needed Dynamic features → serverless, not orchestration

The blog is a production environment — and in production, the best infrastructure is the one you don’t have to think about.


The Takeaway

Infrastructure complexity should solve problems, not create them. If your static site works on GitLab Pages, don’t add Kubernetes “just because.” Learn it elsewhere, break it there, and bring the knowledge back when you actually need orchestration.


This post was written, validated, built, and deployed through the exact pipeline it describes — without Kubernetes. The blog is the proof.