Skip to content

Versionen und Standardwerte

Kubernetes

Der Cluster läuft auf Kubernetes 1.34. Alles aus der API dieser Version steht dir zur Verfügung, im Rahmen dessen, was dein Namespace anlegen darf, siehe Berechtigungen und Richtlinien.

API-Versionen, die du schreibst

Das hier sind die Versionen, die du schreiben solltest. Manche älteren Versionen derselben Kinds werden noch ausgeliefert und still umgewandelt. Ein veraltetes Manifest geht also unter Umständen durch und verhält sich dann anders, als seine Dokumentation beschreibt. Nimm die Werte unten.

Was du anlegstapiVersion
Deployments, StatefulSetsapps/v1
Jobs, CronJobsbatch/v1
Services, ConfigMaps, Secrets, PVCsv1
Horizontal Pod Autoscalerautoscaling/v2
Vertical Pod Autoscalerautoscaling.k8s.io/v1
Pod Disruption Budgetspolicy/v1
HTTPRoutes, GRPCRoutesgateway.networking.k8s.io/v1
ClientSettingsPoliciesgateway.nginx.org/v1alpha1
PostgreSQL-Cluster und -Backupspostgresql.cnpg.io/v1
MariaDB und zugehörige Ressourcenk8s.mariadb.com/v1alpha1
Dragonflydragonflydb.io/v1alpha1
KEDA ScaledObjects und ScaledJobskeda.sh/v1alpha1

Die Gateway API liegt in v1.6.1, Standard-Channel vor. Funktionen aus dem Experimental-Channel sind nicht installiert. Was upstream als experimentell dokumentiert ist, wird hier also nicht erkannt.

Was dein Namespace für dich einsetzt

Drei Dinge werden auf deine Workloads angewendet, ob du sie angibst oder nicht, und alle drei überraschen regelmäßig.

Requests und Limits, wenn du keine angibst

Ein Container ohne resources bekommt das hier:

CPUSpeicher
Request50m64Mi
Limit200m256Mi

Abgerechnet wird der Request in jedem Fall. Resources wegzulassen macht einen Pod also nicht kostenlos, es heißt nur, dass jemand anderes seine Größe gewählt hat. Das Limit ist außerdem niedrig genug, dass eine echte Anwendung gedrosselt oder beendet wird. Setz eigene Werte, siehe Abrechnung und Kontingente.

Eine Sandbox-Runtime

Deine Pods laufen sandboxed. Das wird automatisch gesetzt und lässt sich nicht abschalten. Für deine eigenen Workloads gibt es dabei nichts anders zu machen.

Sichtbar wird es an genau einer Stelle: Verwaltete PostgreSQL-Pods sind davon ausgenommen, und weil eine Shell nur in sandboxed Pods erlaubt ist, kommst du dort nicht per kubectl exec hinein. Siehe Datenbanken.

Eine Scheduling-Priorität

Pods bekommen die PriorityClass des Namespace. Eine andere zu setzen wird abgelehnt.

Pod Security

Namespaces erzwingen den Pod-Security-Standard baseline und warnen gegen restricted.

Praktisch heißt das: Ein Manifest ohne securityContext geht durch, gibt aber Warnungen aus:

text
Warning: would violate PodSecurity "restricted:latest":
allowPrivilegeEscalation != false, unrestricted capabilities,
runAsNonRoot != true, seccompProfile

Das sind Warnungen, keine Ablehnungen. Die vier Felder zu setzen bringt sie zum Schweigen und ist ohnehin sinnvoll:

yaml
securityContext:
  allowPrivilegeEscalation: false
  runAsNonRoot: true
  seccompProfile:
    type: RuntimeDefault
  capabilities:
    drop: ["ALL"]

runAsNonRoot: true braucht ein Image, das als Nicht-Root läuft. Wenn deins das nicht tut, lass die Zeile weg und behalte die anderen drei.

Wie es weitergeht