Neuigkeiten von trion.
Immer gut informiert.

Kubernetes Feature Gates konfigurieren

In Kubernetes sind Features in unterschiedlichen Reifegraden enthalten. Einige Features sind im Stadium beta oder auch bereits stabil. Diese Features sind automatisch aktiviert und allgemein nutzbar. Anders ist dies bei den Features im Stadium alpha, diese müssen explizit durch den Administrator aktiviert werden.
Je nach Kubernetes-Version ist die Menge der verfügbaren und automatisch aktivierten Features unterschiedlich.

Die vorhergehenden Beiträge befassten sich mit dem TTL Controller Feature als Beispiel für Admission Controller:

Passend dazu wird nun gezeigt, wie das Feature des TTL-Controllers im Kubernetes-Cluster aktiviert werden kann.

Der TTL-Controller wird hier im Detail beschrieben. Seit Kubernetes 1.12 ist er als alpha-Feature verfügbar und damit nicht automatisch aktiviert.

Die konkrete Konfiguration der Feature-Gates hängt auch davon ab, wie Kubernetes installiert wurde, bzw. welche Kubernetes-Distribution verwendet wurde. Im folgenden wird das relativ häufig anzutreffende Setup mit kubeadm (was auch durch kubespray unter der Haube verwendet wird) zugrunde gelegt.

Bei kubeadm wird die Control-Plane, also controller-manager, scheduler und api-server, durch sogenannte statische Pods bereitgestellt. Die Pod-Definitionen werden in YAML-Manifesten beschrieben, die dann jedoch im Dateisystem liegen und durch den kubelet-Dienst unmittelbar ausgewertet werden.

Die Manifeste werden durch kubeadm zum Zeitpunkt der Cluster-Installation erzeugt. Bereits zu diesem frühen Zeitpunkt kann auf die Ausgestaltung Einfluss genommen werden und somit die gewünschten Features aktiviert werden.

Damit ein Feature aktiviert ist, muss es bei den jeweils beteiligten Komponenten separat konfiguriert werden. Die Konfigurationsdatei im YAML-Format wird beim Aufruf von kubeadm dann durch den Parameter --config kubeadm.yaml angegeben.

Feature-Gate Konfiguration für kubeadm
apiServerExtraArgs:
  feature-gates: TTLAfterFinished=true
controllerManagerExtraArgs:
  feature-gates: TTLAfterFinished=true
schedulerExtraArgs:
  feature-gates: TTLAfterFinished=true

Ist der Kubernetes Cluster bereits aufgesetzt, so kann wiederum kubeadm eingesetzt werden, um die Feature-Gate Konfiguration umzusetzen. Dazu wird dann der Upgrade Task von kubeadm verwendet.

Nachträgliche Konfiguration durch kubeadm
$ kubeadm upgrade apply --force --config kubeadm.yaml

Alternativ können die statischen Pod Definitionen im Dateisystem angepasst werden. Typischerweise befinden sich die Definitionen im Verzeichnis /etc/kubernetes/manifests. Werden Änderungen an den Dateien vorgenommen, so startet kubelet die betreffende Komponente mit den neuen Werten automatisch neu.

Feature Gates werden als zusätzliche Parameter im command Abschnitt mit dem Schalter --feature-gates spezifiziert.

Konfiguration Feature-Gate für kube-apiserver
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    component: kube-apiserver
    tier: control-plane
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - command:
    - kube-apiserver
    - --feature-gates=TTLAfterFinished=true
...

Nachdem die entsprechenden Komponenten (apiserver, controller-manager, scheduler) konfiguriert wurden, stehen die Features im Cluster zur Verfügung.




Zu den Themen Kubernetes, Docker und Cloud Architektur bieten wir sowohl Beratung, Entwicklungsunterstützung als auch passende Schulungen an:

Auch für Ihren individuellen Bedarf können wir Workshops und Schulungen anbieten. Sprechen Sie uns gerne an.

Feedback oder Fragen zu einem Artikel - per Twitter @triondevelop oder E-Mail freuen wir uns auf eine Kontaktaufnahme!

Zur Desktop Version des Artikels