Was dieser Validator macht
Kubernetes-Manifests sehen aus wie normales YAML, die echte Validierung lebt aber im Cluster: `kubectl apply` akzeptiert eine Datei, und erst spaeter, nachdem der API-Server sie gegen das Live-Schema und die Admission-Controller aufgeloest hat, merkst du, dass etwas nicht stimmt. Bis dahin laeuft moeglicherweise ein fehlkonfiguriertes Deployment in Produktion ohne Liveness-Probe, ohne Resource-Limits, mit einem Service, der nicht zu seinen Pods routet, weil der Label-Selector nicht passt.
Dieses Tool faengt die Top-30-Fehler vor dem Apply. Pastest ein K8s-Manifest, Multi-Dokument-Dateien mit `---`-Trennern inklusive. Der Validator parst jedes Dokument, erkennt die kind und fuehrt handgeschriebene Checks: fehlendes `apiVersion` oder `metadata.name`, Service-`targetPort`, der nicht am Pod existiert, Deployment-Selector, der nicht zu den Pod-Labels passt, `privileged: true`-Container, `:latest`-Tags, fehlende Resource-Limits und Probes, Ingress auf deprecated API-Version, PVCs ohne Storage-Groesse.
Alles laeuft im Browser. Kein Upload, kein kubectl, kein Cluster-Kontakt. Der Validator zieht keine Live-CRD-Schemas (die leben in deinem spezifischen Cluster), Custom Resources erscheinen also nur als Info.
So benutzt du es
- Ein Sample oben waehlen, um den Output zu sehen, oder dein eigenes YAML ins Input-Panel einfuegen. Der Validator handhabt Multi-Dokument-Dateien mit `---`-Trennern.
- Die Error-/Warning-/Info-Zaehler rechts lesen. Errors heissen, das Manifest wird vom API-Server abgelehnt oder verhaelt sich kaputt (fehlende Felder, Selector-Mismatches, ungueltige HPA). Warnings sind Best-Practice-Verstoesse (`:latest`-Tag, keine Resource-Limits, `privileged: true`). Info-Eintraege sind Vorschlaege.
- Jedes Issue listet die kind, den Ressourcen-Namen, den Dokument-Index (welches Manifest in einer Multi-Doc-Datei), die Nachricht und einen Fix-Hinweis.
- Typische Fixes: Liveness-/Readiness-Probes ergaenzen, Resource-Requests und -Limits setzen, hostPort entfernen, `:latest` durch gepinnten Tag ersetzen, Selector-matchLabels mit template metadata.labels ausrichten, HPA scaleTargetRef und eine gueltige Min-/Max-Replica-Range setzen.
- Bei Services prueft der Validator cross, dass der `targetPort` tatsaechlich als `containerPort` am vom `spec.selector` gewaehlten Pod existiert. Faengt den Klassiker eines Services, der still ins Nichts routet.
- Bei leerem Input oder YAML-Parse-Fehler bekommst du einen Parse-Fehler mit Zeilennummer aus js-yaml. Den zuerst fixen, dann leuchten die anderen Checks.
- Copy klickt das Manifest in die Zwischenablage, dann in `kubectl apply -f -` einwerfen zum echten Deployen. Der Validator sendet dein YAML nirgendwohin.
Wann das nuetzlich ist
Sieben konkrete Situationen, in denen K8s-Fehler vor kubectl apply zu faengen echten Downtime spart:
- Erstes Mal mit K8s. Die offiziellen Docs sind riesig, du hast noch keine Intuition fuer Pflichtfelder. Der Validator flaggt fehlendes `apiVersion`, `kind`, `metadata.name` sofort und gibt fuer jedes einen Fix-Hinweis.
- Service, der ins Nichts verbindet. Klassischer Fehler: Service-Selector sagt `app: web`, Deployment-Template-Labels sagen `app: api`. K8s erzeugt den Service, der Service hat keine Endpoints, Traffic 503t. Der Validator sagt genau, welche Keys nicht passen.
- Pre-Commit-Gate fuer K8s-Repos. Den Validator-Output-Check in deinen Review-Prozess stecken. PRs, die `privileged: true`, `:latest`, fehlende Limits, fehlende Probes einfuehren, werden vor dem Merge geflaggt.
- GitOps-Repo-Health-Check. Ein Repo mit hunderten Manifests ist per Auge schwer zu auditieren. Datei einfuegen, alle Issues auf einmal sehen. Pro Datei wiederholen oder per Hand in CI verdrahten.
- Migration von extensions/v1beta1-Ingress zu networking.k8s.io/v1. Der Validator flaggt die alte API-Version mit Einzeiler-Fix. Spart einen Deploy, der beim naechsten Cluster-Upgrade 404t.
- CronJob ohne Limits auf einem kleinen Node. Ein naechtliches Backup ohne Memory-Limit kann den Node OOMen. Der Validator warnt vor jedem Container ohne Limits.
- HPA fehlkonfiguriert, skaliert nur zwischen 1 und 1. Der Check faengt `minReplicas >= maxReplicas` (ungueltig) und fehlendes `scaleTargetRef` (macht HPA wirkungslos).