Project: One App — Three Probes — Real Failures

Source: Dev.to | Jan 09, 2026 (UTC)

Visual mental model (keep this in mind first)

Traffic rule (critical):

  • ❌ Startup probe FAIL → container is NOT checked by liveness/readiness
  • ❌ Readiness probe FAIL → pod gets NO traffic
  • ❌ Liveness probe FAIL → pod is RESTARTED

What you will demonstrate

You will run one app that:

  • Starts slowly (startup probe needed)
  • Can become temporarily unavailable (readiness probe needed)
  • Can become stuck (liveness probe needed)

This mirrors real production behavior.

Step 0 — Prerequisites

minikube start kubectl get nodes

Enter fullscreen mode

Exit fullscreen mode

Step 1 — Demo application (intentionally imperfect)

We’ll use a small HTTP app that:

deployment.yaml

apiVersion: apps/v1 kind: Deployment metadata: name: probe-demo spec: replicas: 1 selector: matchLabels: app: probe-demo template: metadata: labels: app: probe-demo spec: containers: - name: app image: ghcr.io/stefanprodan/podinfo:6.5.3 ports: - containerPort: 9898

Enter fullscreen mode

Exit fullscreen mode

Apply:

kubectl apply -f deployment.yaml kubectl get pods

Enter fullscreen mode

Exit fullscreen mode

At this point:

Step 2 — Expose the app

apiVersion: v1 kind: Service metadata: name: probe-demo-svc spec: selector: app: probe-demo ports: - port: 80 targetPort: 9898 type: NodePort

Enter fullscreen mode

Exit fullscreen mode

kubectl apply -f service.yaml minikube service probe-demo-svc

Enter fullscreen mode

Exit fullscreen mode

Now the REAL learning starts

STARTUP PROBE

What it is

“Don’t judge this container until it has fully started.”

Why DevOps needs it

Without startup probe:

Add startup probe

startupProbe: httpGet: path: /health port: 9898 failureThreshold: 30 periodSeconds: 1

Enter fullscreen mode

Exit fullscreen mode

Meaning:

Demonstrate failure (remove it)

kubectl delete pod -l app=probe-demo kubectl describe pod

Enter fullscreen mode

Exit fullscreen mode

What you’ll see:

READINESS PROBE

What it is

“Can this pod receive traffic RIGHT NOW?”

Why DevOps cares

Add readiness probe

readinessProbe: httpGet: path: /ready port: 9898 initialDelaySeconds: 5 periodSeconds: 3

Enter fullscreen mode

Exit fullscreen mode

Observe

kubectl get pods kubectl describe pod kubectl get endpoints probe-demo-svc

Enter fullscreen mode

Exit fullscreen mode

When readiness fails:

Demonstrate issue if missing

Remove readiness probe → deploy new version:

LIVENESS PROBE

What it is

“Is this container still healthy or stuck?”

Why DevOps needs it

Add liveness probe

livenessProbe: httpGet: path: /health port: 9898 initialDelaySeconds: 20 periodSeconds: 5

Enter fullscreen mode

Exit fullscreen mode

Demonstrate restart

Simulate failure:

kubectl exec -it pod-name -- kill 1

Enter fullscreen mode

Exit fullscreen mode

Observe:

kubectl get pods

Enter fullscreen mode

Exit fullscreen mode

You will see:

Without liveness probe

Final combined (production-correct)

startupProbe: httpGet: path: /health port: 9898 failureThreshold: 30 periodSeconds: 1 readinessProbe: httpGet: path: /ready port: 9898 periodSeconds: 3 livenessProbe: httpGet: path: /health port: 9898 initialDelaySeconds: 20 periodSeconds: 5

Enter fullscreen mode

Exit fullscreen mode

DevOps engineer checklist (this is interview-level)

You MUST know:

How to explain this in production terms

“Startup protects initialization, readiness protects users, liveness protects the platform.”

For further actions, you may consider blocking this person and/or reporting abuse

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Читайте також