34 API Deprecations in Kubernetes

Kubernetes entwickelt sich stetig weiter, was regelmäßige Aktualisierungen und Verbesserungen mit sich bringt. Neue Versionen können Änderungen an APIs mit sich führen, wobei ältere Versionen als veraltet (deprecated) markiert und in späteren Releases entfernt werden. Diese Vorgehensweise dient der Plattformpflege, Sicherheitssteigerung und Code-Wartbarkeit.

Die Deprecation von APIs ist ein essentieller Bestandteil des Fortschritts von Kubernetes, um dessen Sicherheit, Effizienz und Langzeitbeständigkeit zu garantieren. Entwickler und Betreiber müssen sich dieser kontinuierlichen Veränderungen bewusst sein und proaktive Maßnahmen ergreifen, um ihre Anwendungen und Services up-to-date zu halten.

34.1 Warum APIs veraltet werden

34.1.1 Beispiel

Deprecated API

Die vollständige Liste der deprecated APIs für verschiedene Versionen und die entsprechenden Anleitungen zur Migration finden Sie in den offiziellen Release-Notes von Kubernetes.

34.2 Strategien für den Umgang mit API Deprecations

34.2.1 kubectl convert(Nur bis Version 1.18)

kubectl convert ist Teil des Kubernetes Command-Line Interface. Es ermöglicht Benutzern, ihre Ressourcen von einer Version einer API zu einer anderen zu konvertieren. Das ist also dann nützlich, wenn man mit der Deprecation und dem darauffolgenden Entfernen von API-Versionen konfrontiert ist.

Anwendung von kubectl convert:

  1. Konvertierung von Ressourcendefinitionen: Benutzer können ihre Ressourcendefinitionsdateien (z.B. YAML oder JSON) von einer veralteten API-Version zu einer unterstützten Version konvertieren.

  2. In-Place-Updates: Es ermöglicht die Konvertierung und das direkte Anwenden von Ressourcenänderungen auf einem laufenden Cluster.

  3. Vereinfachte Migration: Der Befehl unterstützt Entwickler und Administratoren bei der Migration ihrer Ressourcen, indem er manuelle Änderungen an den Ressourcendefinitionen vermeidet.

Funktionsweise:

34.2.1.1 Beispiel für die Verwendung von kubectl convert

kubectl convert -f ./meine-alte-definition.yaml --output-version v1 --output yaml > meine-neue-definition.yaml

Dieser Befehl konvertiert die Ressource in der Datei meine-alte-definition.yaml zur v1 API-Version und gibt das Ergebnis als YAML aus.

Wichtig zu beachten:

Angenommen, die ursprüngliche Datei meine-alte-definition.yaml sieht wie folgt aus:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mein-altes-deployment
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: meinApp
    spec:
      containers:
      - name: meinApp-container
        image: meinApp:1.0

Dieses Deployment verwendet die veraltete API-Version extensions/v1beta1. Um es auf die Version apps/v1 zu aktualisieren, verwenden Sie den folgenden kubectl convert Befehl:

kubectl convert -f ./meine-alte-definition.yaml --output-version apps/v1 --output yaml > meine-neue-definition.yaml

Der Befehl liest die Datei meine-alte-definition.yaml, konvertiert sie in die gewünschte API-Version apps/v1 und speichert das Ergebnis in der Datei meine-neue-definition.yaml.

Die meine-neue-definition.yaml könnte nach der Konvertierung so aussehen:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mein-altes-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: meinApp
  template:
    metadata:
      labels:
        app: meinApp
    spec:
      containers:
      - name: meinApp-container
        image: meinApp:1.0

Die wesentlichen Änderungen hier sind:

Bitte beachten Sie, dass zum Zeitpunkt der Verwendung von kubectl convert das entsprechende API-Schema im kubectl CLI bekannt sein muss und das Cluster die Ziel-API-Version unterstützen muss.

34.2.1.2 Hinweis

34.3 Zukünftige Herausforderungen

Empfehlungen für Entwickler und Betreiber: