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.
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.
$ 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.
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.