Mini Cloud Platform β Bare-Metal Infrastructure
Private datacenter-equivalent infrastructure β built from scratch with MAAS, k3s, ArgoCD, and GitOps.
What This Project Isβ
This documentation covers a complete bare-metal infrastructure built locally using MAAS (Metal as a Service), provisioning a 5-node cluster ready for Kubernetes and production workloads.
Equivalent to: AWS EC2 + VPC + Auto Provisioning β but local.
Infrastructure at a Glanceβ
| Node | IP | Role | Hardware |
|---|---|---|---|
| set-hog | 10.0.0.2 | Control Plane | ThinkPad T15 Gen 1 |
| fast-skunk | 10.0.0.4 | Worker | ThinkPad T490 |
| fast-heron | 10.0.0.7 | Worker | ThinkPad T490 |
| star-kitten | 10.0.0.8 | Worker | ThinkPad T490 |
| swift-mac | 10.0.0.10 | Worker | MacBook Pro 13" 2012 |
MAAS Controller: Ubuntu + dual NIC (WiFi β internet, Ethernet β 10.0.0.1)
Complete Roadmapβ
Each phase builds directly on the previous one β nothing requires something that hasn't been set up yet.
| Phase | Topic | Key Technology | Status |
|---|---|---|---|
| 0 | MAAS + bare-metal provisioning (4Γ ThinkPad via PXE + 1Γ MacBook Pro via USB) | MAAS, PXE, cloud-init | β Done |
| 1 | Kubernetes cluster | k3s | β Done |
| 2 | kubectl local access | kubeconfig | β Done |
| 3 | Remote access from anywhere | Tailscale, Cloudflare Tunnel, Homer | β Done |
| 4 | Load balancer IPs on bare-metal | MetalLB | β Done |
| 5 | Persistent storage | Longhorn, NFS | β Done |
| 6 | Expose apps to the network | F5 NGINX Ingress | β Done |
| 7 | Private container registry | Harbor + Trivy | β Done |
| 8 | Cluster monitoring | Prometheus, Grafana | β Done |
| 9 | First real workload | podinfo, HPA, ServiceMonitor | β Done |
| 10 | Infrastructure automation | Ansible | β Done |
| 11 | Infrastructure as Code | OpenTofu (MAAS) β Crossplane deferred | β Done |
| 12 | GitOps deployment | ArgoCD (App-of-Apps) | β Done |
| 13 | CI/CD pipelines | GitHub Actions + ghcr.io + ArgoCD image promotion | β Done |
| 14 | Backup & disaster recovery | Velero + MinIO on controller + hourly k3s SQLite pull | β Done |
| 15 | TLS / cert-manager (internal PKI) β Vault + RBAC deferred | cert-manager, self-signed root CA | β Done |
| 16 | Harbor as Sovereign Registry β 4 proxy-cache projects, mirror+fallback, supply-chain control point. Original n8n/Temporal/Airflow plan deferred. | Harbor proxy cache | β Done |
| 17 | Event-driven autoscaling β KEDA + NATS JetStream HA, scale-to-zero verified end-to-end | KEDA, NATS | β Done |
| 18 | Backstage minimal IDP β catalog-only, off-the-shelf image, Vault/plugins/templates deferred | Backstage | β Done |
| 19 | Self-hosted AI β Ollama (CPU, llama3.2:3b, ~13 TPS) + Open WebUI chat. MLflow + Kubeflow deferred. | Ollama, Open WebUI | β Done |
| 20 | Reliability & chaos engineering β 3 validation experiments on podinfo: PodChaos (0 ms downtime under 5 pod kills), NetworkChaos (200 ms latency injection + clean recovery), StressChaos (contained cgroup OOM, 0 node-mate restarts). NodeChaos / dashboard Ingress / automated GameDays deferred. | Chaos Mesh | β Done |
| 21 | Logs (Loki single-binary, Promtail DaemonSet, Grafana datasource) + Alertmanager 3-tier routing tree + in-cluster webhook receiver + custom PodinfoAvailabilityLost rule. End-to-end alert validated via Chaos Mesh kill-both-replicas β webhook receives FIRING JSON. Jaeger / distributed tracing deferred β no multi-service topology to trace. | Loki, Promtail, Alertmanager | β Done |
| 22 | eBPF networking β migration runbook authored, execution deferred to fresh-cluster rebuild. cilium CLI installed on controller; dry-run helm values captured. Senior scope-reduction call: 111 live pods + 22 phases of validated infrastructure on top of Flannel make hot CNI swap not worth it at our cluster scale. | Cilium, Hubble | β Done |
| 23 | Enterprise SSO β Authentik as IdP; 11/13 apps on SSO. 5 via native OIDC (ArgoCD, Grafana, Harbor, MinIO, Open WebUI), 5 via forward-auth Outpost (Homer, podinfo, platform-demo, whoami, NATS). Backstage + MAAS deferred. | Authentik, OIDC, forward-auth | β Done |
| 24 | Backstage custom image β org-owned build (bcec03f); Authentik OIDC SSO; Kubernetes, ArgoCD, TechDocs, Grafana plugins; published to Harbor. | Backstage, crane, Harbor, Authentik | β Done |
| 25 | Public access via Cloudflare Tunnel β *.devandre.sbs live (10/10 apps, no Tailscale). Authentik OIDC issuers migrated to auth.devandre.sbs. Forward-auth extended to devandre.sbs cookie domain. originServerName per cloudflared rule to fix TLS SNI on IP origin. UFW host firewall on controller. All smoke tests green. | Cloudflare Tunnel, cloudflared, Authentik forward-auth, UFW | β Done |
| 26 | Secrets management β Vault 2.0.2 with Raft on Longhorn. KV v2 (5 platform credentials + demo secret). Kubernetes auth backend. Agent Injector verified on platform-demo (2/2 pods, /vault/secrets/config injected). ArgoCD proxy fix (MAAS Squid) as bonus fix. | HashiCorp Vault, Raft, Vault Agent Injector | β Done |
| 27 | Policy as code β OPA/Gatekeeper 3.22.2 admission controller. 3 enforced policies: block :latest tags, no privileged containers, require resource limits. Audit cycle confirmed 0 violations across all platform namespaces. All 3 rejection demos verified live. | OPA, Gatekeeper, Rego | β Done |
| 28 | Runtime threat detection β Falco 0.44.1 DaemonSet (3/3 nodes) via modern_ebpf driver (BPF CO-RE, kernel 6.8, no headers). 2 live detections: Contact K8S API Server From Container (Vault pod, MITRE T1565) + Read sensitive file untrusted (cat /etc/shadow). Two install gotchas: Squid proxy for falcoctl + inotify exhaustion on control-plane. | Falco, eBPF, BPF CO-RE | β Done |
| 29 | CIS Kubernetes Benchmark β kube-bench v0.9.4 scored against k3s-cis-1.8. Control-plane: 49 PASS / 6 FAIL / 55 WARN. All 6 FAILs are k3s false positives (kube-bench scans kubelet CLI args; k3s configures these through config file + auto-provisioned certs). Verified: anonymous-auth disabled (401), read-only-port closed. Gatekeeper + Vault already satisfy 4 of the WARN items. | kube-bench, CIS Benchmark | β Done |
| 30 | Supply chain security β Cosign keyless signing (GitHub OIDC β Sigstore Fulcio CA, no key management) + syft CycloneDX SBOM generation integrated into platform-demo GHA CI. Signatures and SBOM attached as OCI referrers on ghcr.io. Gatekeeper K8sAllowedRegistries policy (warn): 116 violations audited across Helm workloads; platform-demo compliant (Harbor proxy prefix). Full chain: GHAS β Cosign/SBOM β Harbor Trivy β Gatekeeper β Falco. | Cosign, syft, Sigstore, OCI referrers | β Done |
| 56 | Multi-environment namespaces β namespace-based isolation ({team}-{env} convention) for insurance and collab teams across dev/staging/prod. ArgoCD ApplicationSet matrix generator creates 6 apps automatically. Per-env ResourceQuota (dev: 500m/1Gi, staging: 1/2Gi, prod: none) + LimitRange defaults. 15 Cloudflare Tunnel routes for env-prefixed public subdomains. CI pipeline yq bug fixed (Deployment-only targeting) + Harbor push via crane. | ArgoCD ApplicationSet, Kustomize, ResourceQuota, LimitRange | β Done |
| 57 | Nextcloud 33 + Authentik OIDC β on-cluster document collaboration; user_oidc 8.10.1 auto-provisions users from Authentik; available at cloud.devandre.sbs. | Nextcloud, user_oidc, Authentik | β Done |
| 58 | Vault GitOps migration + CoreDNS completions β Vault adopted into ArgoCD app-of-apps (multi-source Helm); all 12 *.devandre.sbs hostnames resolve in-cluster via CoreDNS coredns-custom ConfigMap. | ArgoCD multi-source, CoreDNS | β Done |
| 59 | External Secrets Operator + Vault KV β ESO 0.10.7, ClusterSecretStore vault-backend (Kubernetes auth), 9 ExternalSecrets (all platform credentials pulled from Vault KV v2 into cluster Secrets). | ESO, Vault KV v2 | β Done |
| 60 | Cert observability β cert-manager ServiceMonitor scraped by Prometheus, Grafana dashboard 20842, 3 PrometheusRule alerts (expiring within 14 d warning, 3 d critical, not-ready). | cert-manager, Prometheus, Grafana | β Done |
| 62 | IAM hardening β k3s OIDC flags on API server, kubelogin installed (int128/kubelogin), minicloud-oidc kubeconfig for daily use, ClusterRoleBindings per Authentik group (Direction IT β cluster-admin, CybersΓ©curitΓ©/Audit β view), anonymous-auth disabled. | kubelogin, OIDC, RBAC | β Done |
| 63 | Cluster hardening β SSH hardened on all 4 nodes (PasswordAuthentication no, PermitRootLogin no), UFW default-deny on all nodes, k3s audit policy + AES-CBC-256 secrets encryption at rest, k3s upgraded to v1.36.1. | UFW, k3s audit, encryption-at-rest | β Done |
| 64 | Namespace isolation β default-deny NetworkPolicy ingress on all 23 platform namespaces, ResourceQuota + LimitRange on 8 namespaces, flannel VTEP fix (10.42.0.0/24 in webhook allowlists). | NetworkPolicy, ResourceQuota, flannel | β Done |
| 65 | Vault auto-unseal via AWS KMS β KMS key vault-auto-unseal (eu-west-1), IAM user vault-kms-unseal scoped to kms:Encrypt/Decrypt/DescribeKey, seal migration verified (delete pod β 1/1 Ready in ~30 s, zero human input). | Vault, AWS KMS | β Done |
| 66 | Ollama local-path migration β both Ollama instances (fast-heron + star-kitten) pinned via nodeSelector, PVCs migrated Longhorn β local-path NVMe (model weights are re-downloadable). 4 models: phi3-financial, phi3.5, llama3.2:3b, llama3.2:1b. | Ollama, local-path, nodeSelector | β Done |
| 67 | Pod security hardening β PSA warn:restricted on all 23 namespaces, enforce:restricted on homer/podinfo/collab/insurance, 9 Gatekeeper admission policies in deny mode with 0 violations (no-root, no-privileged, approved-registry, resource-limits, TLS-only ingress, no-LB-in-dev, no-hostPath, no-latest-tag, no-privilege-escalation). | PSA, Gatekeeper, Rego | β Done |
| AI Gateway | Enterprise LLM gateway β LiteLLM 1.90.3 proxy with 7 cloud providers (Groq, OpenAI, Gemini, DeepSeek, Mistral, Anthropic Claude, HuggingFace featherless-ai) + 2 local Ollama nodes. Cloud fallback chain (Ollama β Groq β DeepSeek). Circuit breaker (3 failures β 60 s cooldown). 3-tier dept key governance β 15 virtual keys with $5/$30/$100 monthly budget caps and 50k/100k/200k TPM limits. Valkey exact-match prompt cache (10 min TTL). Presidio PII/DLP pre-call guardrail. detect_secrets credential scanner. Langfuse tracing on every call. Grafana cost dashboard (8 SQL panels against LiteLLM PostgreSQL). | LiteLLM, Ollama, Valkey, Presidio, Langfuse | β Done |
| LLM Observability | Langfuse 3.201.1 β traces every LiteLLM call with token counts, cost, model, department metadata, and latency. ClickHouse columnar store + Valkey + PostgreSQL + MinIO (S3 blobs). Authentik OIDC SSO; pre-provisioned org minicloud-platform + project ai-gateway via init env vars. | Langfuse, ClickHouse, Valkey | β Done |
| Security gaps | Full security hardening β supply chain (Cosign + SBOM on both CIs, Dependabot on 4 repos, GPG-signed commits + branch protection on main), ingress & edge (HSTS globally, rate limiting, Authentik forward-auth on Prometheus/Alertmanager/Polaris), ArgoCD hardening (admin disabled, AppProject with explicit source/destination/resource whitelist). Regression check #19: 42 PASS / 0 FAIL / 0 WARN. | Cosign, GPG, AppProject, NGINX | β Done |
| Observability gaps | Full observability β Falco Sidekick β Alertmanager pipeline (failed logins, new cluster-admin, privileged pod alerts), Polaris workload quality scorer at polaris.10.0.0.200.nip.io, DB backup scripts (pg_dump β MinIO nightly), Vault raft snapshots (nightly), backup DR PrometheusRules (VeleroBackupFailed, MinioDiskFull), DR runbook (7 scenarios). | Falco Sidekick, Polaris, Alertmanager | β Done |
| Monitoring audit | Full k8s monitoring gap analysis β PodStuckPending + ContainerOOMKilled PrometheusRules, 9-panel Workload Health Grafana dashboard, Alertmanager SMTP receiver (Phase 78 Stalwart), socat DaemonSet proxy for scheduler + controller-manager (hostNetwork: true on set-hog). Kine/SQLite discovery: cluster has no embedded etcd β kine_sql_* metrics already flow via kps-apiserver. Verdict: 6/6 data sources β
Β· 9/9 important metrics β
Β· 3/3 tools β
| PrometheusRule, Grafana ConfigMap, socat, kube-state-metrics | β Done |
| App monitoring | Application-level RED metrics (Rate Β· Errors Β· Duration) β platform-demo + minicloud-plane instrumented with prometheus/client_golang, ServiceMonitors wired per overlay, NGINX Ingress PodMonitor + enableLatencyMetrics, CI bump-gitops via gh pr merge --admin. Three blocking fixes: wrong Prometheus service name in AnalysisTemplate (kube-prometheus-stack-prometheus β kps-prometheus), NetworkPolicy blocking Argo Rollouts β Prometheus, kubectl-argo-rollouts plugin missing. Canary AnalysisRuns now pass. | prometheus/client_golang, ServiceMonitor, PodMonitor, Argo Rollouts | β Done |
| 68β69 | minicloud-plane β Go microservice: Plane CE API client + webhookβNATS bridge + Backstage plugin (EntityPlaneIssuesContent) | Go, NATS JetStream, Plane CE, Backstage plugin | β Done |
| 70 | Backstage Software Templates β go-service golden-path scaffold (service + gitops + catalog auto-generated, CI skeleton, PR workflow) | Backstage scaffolder, Nunjucks | β Done |
| 71 | Backstage TechDocs β MkDocs local builder + publisher, mkdocs-techdocs-core, docs scaffolded into every new service | TechDocs, MkDocs | β Done |
| 73 | Argo Rollouts β canary deployment for platform-demo (50 % β Prometheus AnalysisTemplate β 100 %) | Argo Rollouts v1.9, canary, Prometheus | β Done |
| 74 | VPA updateMode:Auto β backstage, langfuse-web, litellm; ClickHouse + Prometheus stay Off | VPA Fairwinds v4, vertical autoscaling | β Done |
| 75 | Stakater Reloader + ArgoCD controller memory fix (OOMKill at 1 Gi / 183 restarts) | Reloader v1.4, ArgoCD 2 Gi controller | β Done |
| 76 | Matrix Synapse + Element Web β federated instant messaging, Authentik OIDC SSO, 9 installation gotchas resolved | Matrix Synapse v1.156, Element Web v1.11 | β Done |
| 77 | Jitsi Meet β self-hosted video conferencing, JVB hostNetwork on star-kitten, Authentik forward-auth | Jitsi Meet v2.21, JVB, WebRTC | β Done |
| 78 | Stalwart Mail Server β SMTP/IMAP/IMAPS, JMAP management API, Alertmanager STARTTLS integration, Onboard Employee template | Stalwart v0.16.13, JMAP | β Done |
| 79 | ERPNext / Frappe HR β HR source of truth, Authentik OIDC SSO, employee-created webhook triggers Backstage scaffolder | ERPNext v16.28, Frappe, MariaDB | β Done |
| 80 | Amazon SES outbound relay β STARTTLS relay via Stalwart, SPF / DKIM / DMARC, production access submitted | Amazon SES eu-west-1, SMTP relay | β Done |
| β | Data Layer | Kafka/Redpanda, ClickHouse, dbt, Superset, OpenMetadata | π |
Current Stack (Live)β
ββ INFRASTRUCTURE ββββββββββββββββββββββββββββββββββββββββββββββββββ
MAAS β bare-metal provisioning (4 ThinkPads, PXE)
k3s v1.36.2+k3s1 β Kubernetes cluster (1 control-plane + 4 workers, upgraded via system-upgrade-controller)
MetalLB β load balancer IPs (10.0.0.200)
Longhorn β distributed block storage
local-path β NVMe-backed storage (Ollama model weights)
Harbor β private container registry (Trivy scanning)
ββ AUTOMATION & DELIVERY βββββββββββββββββββββββββββββββββββββββββββ
Ansible β infrastructure automation
OpenTofu β IaC for MAAS resources
ArgoCD β GitOps app-of-apps (AppProject with explicit whitelist)
GitHub Actionsβ CI/CD (cosign-signed, GPG-signed bump commits)
ESO β External Secrets Operator (9 ExternalSecrets β Vault)
ββ PLATFORM SERVICES βββββββββββββββββββββββββββββββββββββββββββββββ
Velero + MinIO β backup & disaster recovery (daily + k3s snapshots)
Vault β secrets management (AWS KMS auto-unseal, Raft)
KEDA β event-driven autoscaling (NATS JetStream)
NATS β message broker (JetStream HA)
Backstage β developer portal (Authentik OIDC, TechDocs, Software Templates, K8s + ArgoCD + Grafana plugins)
Argo Rollouts β canary progressive delivery (platform-demo, analysis via Prometheus)
VPA β vertical pod autoscaler (Auto mode: backstage, litellm, langfuse-web)
Reloader β zero-downtime ConfigMap/Secret hot-reload (homer, backstage, litellm, searxng)
Plane CE β project management (plane.devandre.sbs)
minicloud-plane β Go Level 4 API: Plane β NATS β Backstage integration
ERPNext v16 β HR source of truth + employee onboarding webhook (erp.devandre.sbs)
ββ COLLABORATION ββββββββββββββββββββββββββββββββββββββββββββββββββββ
Stalwart v0.16 β self-hosted mail (SMTP/IMAP, Amazon SES relay, JMAP API)
Matrix Synapseβ federated chat server (Authentik OIDC, PostgreSQL, Redis)
Element Web β Matrix client (element.devandre.sbs)
Jitsi Meet β video conferencing (JVB hostNetwork on star-kitten, Tailscale-only ICE)
Nextcloud β file collaboration + OnlyOffice .docx editing (Authentik SSO)
ββ OBSERVABILITY βββββββββββββββββββββββββββββββββββββββββββββββββββ
Prometheus β metrics (kube-prometheus-stack)
Grafana β dashboards (LiteLLM cost dashboard, cert expiry, backup DR)
Loki + Promtail β logs
Alertmanager β 3-tier alert routing + Falco Sidekick webhook
Chaos Mesh β reliability testing
Falco β runtime threat detection (eBPF, modern_ebpf driver)
Falco Sidekickβ Falco β Alertmanager pipeline
Polaris β workload quality scorer
Langfuse β LLM observability (ClickHouse + Valkey, traces every AI call)
Tailscale β remote access VPN
Cloudflare Tunnel β public access (*.devandre.sbs, no Tailscale)
ββ SECURITY LAYER ββββββββββββββββββββββββββββββββββββββββββββββββββ
Authentik β SSO / OIDC (16 dept groups, 16 demo personas, MFA enforced)
OPA/Gatekeeperβ 9 admission policies, deny mode, 0 violations
cert-manager β internal PKI + cert observability PrometheusRules
Cosign + syft β keyless image signing + CycloneDX SBOM in CI
ESO + Vault KVβ all platform secrets in Vault (no plaintext in git)
NetworkPolicy β default-deny ingress/egress on all 23 namespaces
PSA β enforce:restricted on 8 namespaces
GPG commits β signed commits + branch protection on critical repos
UFW β host firewall on controller + all cluster nodes
HSTS + rate-limit β global HSTS, 20r/s public, 5r/s auth (NGINX ConfigMap)
ββ AI / ML βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
LiteLLM β OpenAI-compatible gateway (7 cloud providers + 2 local Ollama)
Ollama β local LLMs on NVMe (phi3-financial, llama3.2:3b/1b, phi3.5)
Valkey β exact-match prompt cache (10 min TTL, ~80ms cache hit)
Presidio β PII/DLP pre-call guardrail (anonymizes before cloud APIs)
detect_secretsβ credential scanner on all prompts
Open WebUI β chat interface (Authentik OIDC, CA bundle init container)
Langfuse β per-call traces with cost, model, department, latency
ββ DATA LAYER (future) ββββββββββββββββββββββββββββββββββββββββββββββ
Redpanda β event streaming (Kafka-compatible)
ClickHouse β columnar analytics warehouse
dbt β SQL transformation layer
Superset β self-hosted BI dashboards
OpenMetadata β data catalog, lineage, governance
CV / LinkedIn Summaryβ
- Designed and deployed a 5-node bare-metal Kubernetes platform (4Γ Lenovo ThinkPad + 1Γ MacBook Pro 2012, 36 cores / 68 GiB RAM / 2.3 TB) using MAAS (Metal as a Service), PXE provisioning for ThinkPads, and USB install for Apple hardware incompatible with standard PXE
- Achieved ~$15,000β$17,000 / year in cloud cost avoidance by running equivalent capacity on owned hardware at ~$20β35/mo electricity, versus $1,300β$1,430/mo for compute-optimized cloud equivalents (AWS 9Γ c6i.xlarge / Azure F32s_v2 + F4s_v2 / GCP N2 Custom 36 vCPU β On-Demand pricing, US regions)
- Implemented full GitOps delivery pipeline: ArgoCD app-of-apps, GitHub Actions CI/CD, Cosign keyless image signing, CycloneDX SBOM, GPG-signed commits, and branch protection on critical repos
- Built enterprise AI gateway (LiteLLM 1.90.3) routing across 7 cloud providers and 2 local Ollama nodes β with cloud fallback chain, circuit breaker (3 failures β 60 s cooldown), 3-tier department budget governance ($5/$30/$100 / 30 d), Valkey prompt cache, and Grafana cost dashboard backed by PostgreSQL SQL
- Deployed PII/DLP and credential guardrails: Microsoft Presidio anonymizes prompts before any cloud API receives them; detect_secrets blocks credential leakage at inference time
- Implemented Langfuse LLM observability (ClickHouse + Valkey + PostgreSQL) tracing every AI Gateway call with token counts, cost, model, and department metadata
- Enforced 9 OPA/Gatekeeper admission control policies in deny mode with 0 violations: no-root containers, no-privileged pods, approved registry only, resource limits required, TLS-only ingress, no LoadBalancer in dev, no hostPath, no latest tag, no privilege escalation
- Applied defence-in-depth: default-deny NetworkPolicy on all 23 namespaces, PSA enforce:restricted on 8 namespaces, AES-CBC-256 secrets encryption at rest, k3s audit logs, SSH hardening + UFW default-deny on all 5 cluster nodes, HSTS globally, rate limiting, and Authentik forward-auth on internal dashboards
- Achieved zero-touch Vault auto-unseal via AWS KMS (scoped IAM policy, seal migration verified β pod deletion β 1/1 Ready in ~30 s with no human input)
- Deployed External Secrets Operator with Vault KV v2 backend (9 ExternalSecrets β all platform credentials pulled from Vault; no plaintext secrets in git)
- Implemented full backup & DR: Velero + MinIO (daily cluster backup), nightly DB dumps (pg_dump β MinIO), Vault raft snapshots, PrometheusRule alerts (VeleroBackupFailed, MinioDiskFull), and validated restore test
- Built Authentik-based department RBAC: 16 groups, 16 demo personas with group-based policy bindings across ArgoCD, Grafana, Harbor, Open WebUI, and Nextcloud; MFA enforced on all accounts
- Established full platform health suite: regression check script covering cluster, security, observability, AI Gateway, and backups β Regression check #40: 22 PASS / 0 FAIL / 0 WARN (all drifts resolved)
- Implemented remote access via Tailscale VPN and Cloudflare Tunnel (
*.devandre.sbspublic edge, no Tailscale required) - Applied chaos engineering with Chaos Mesh: PodChaos (0 ms downtime under 5 simultaneous kills), NetworkChaos (200 ms latency injection + clean recovery), StressChaos (contained cgroup OOM)