# Kubectl Konfiguration

Das Tool
[`kubectl`](https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/) wird
für die direkte Kommunikation mit einer Kubernetes API benötigt.

Um mit der API kommunizieren zu können wird eine Konfigurationsdatei benötigt
(KUBECONFIG) in der die Informationen zur API, wie die Adresse, Benutzer,
Kennwort oder Zertifikate enthalten sind. Die Konfigurationdatei wird in der
Regel in der Datei `~/.kube/config` abgelegt. Alternativ kann die
Umgebungsvariable `KUBECONFIG` gesetzt werden um eine alternative
Konfigurationsdatei angeben zu können.

# KUBECONFIG Dateien zusammenfassen

Statt mehrere Konfigurationsdateien zu führen ist es Sinnvoll die
Konfigurationsdaten in eine Datei zusammen zu fassen.

Auf Grund des Formats können die Dateien nicht einfach zusammenkopiert werden.
Die einzelnen Daten müssen in die jeweiligen Sektionen der Konfigurationdatei
verteilt werden.

Mit dem folgenden Workflow ist es möglich dies teilweise zu automatisieren.

* Erstellen einer Kopie der aktuellen Konfigurationsdatei (es wird von
  `~/.kube/config` ausgegangen)
* Setzen der Variable `KUBECONFIG` auf die kopierte Datei und die neue Datei
  (`/tmp/kube_config`). Weitere Dateien können durch Doppelpunkt getrennt
  angegeben werden
* Ausgeben der Kopie und der zusätzlichen Datei, oder Dateien über `kubectl` in
  die Datei `~/.kube/config`.
* Löschen der temporären Dateien
* Löschen der Variable `KUBECONFIG`

```bash
user@linux # cp ~/.kube/config ~/.kube/config_temp
user@linux # export KUBECONFIG="~/.kube/config_temp:/tmp/kube_config"
user@linux # kubectl config view --flatten >~/.kube/config
user@linux # rm ~/.kube/config_temp /tmp/kube_config
user@linux # unset KUBECONFIG
```

# Auswählen des Context

Sobald die Konfigurationsdatei für `kubectl` mehr als einen Eintrag enthält,
kann der Context in dem gearbeitet werden soll gewechselt werden.

Dies geschieht entweder durch das Festlegen eines Default Context:

```bash
user@linux # kubectl config use-context meincontext
```

Oder durch die Nutzung des Parameters `--context` bei `kubectl` oder anderen
Befehlen wie z. B. `flux`, die dies unterstützen.

```bash
user@linux # kubectl get --context meincontext nodes
```

Über den Befehl `kubectl config get-contexts` lässt sich eine Liste der
verfügbaren Umgebungen anzeigen.
