fix: add /healthz endpoint to prevent K8s crash loop

- Added dedicated /healthz route returning 200 OK
- Skip API health check in hooks.server.ts for /healthz path
- Updated K8s liveness/readiness probes to use /healthz instead of /login
- The /login probe was returning 503 when the API was unreachable, causing
  Kubernetes to kill and restart the pod in a loop
This commit is contained in:
2026-02-27 18:07:26 -06:00
parent cb8c6b3958
commit 3b43393e5d
3 changed files with 17 additions and 2 deletions
+4 -2
View File
@@ -35,15 +35,17 @@ spec:
- containerPort: 3000
livenessProbe:
httpGet:
path: /login
path: /healthz
port: 3000
initialDelaySeconds: 5
periodSeconds: 15
failureThreshold: 3
readinessProbe:
httpGet:
path: /login
path: /healthz
port: 3000
initialDelaySeconds: 3
periodSeconds: 5
failureThreshold: 2
imagePullSecrets:
- name: github-container-registry
+5
View File
@@ -101,6 +101,11 @@ function apiUnreachablePage(): Response {
}
export const handle: Handle = async ({ event, resolve }) => {
// Let Kubernetes health probes pass without hitting the external API
if (event.url.pathname === "/healthz") {
return await resolve(event);
}
// Health-check the API before doing anything else.
// /v1/teapot returns 418 when the API is alive.
try {
+8
View File
@@ -0,0 +1,8 @@
import type { RequestHandler } from "./$types";
export const GET: RequestHandler = async () => {
return new Response(JSON.stringify({ status: "ok" }), {
status: 200,
headers: { "Content-Type": "application/json" },
});
};