Kubernetes¶
Polycrate bietet native Kubernetes-Integration für die Verwaltung von Clustern und das Debugging.
Kubeconfig¶
Polycrate ist in Kubernetes integriert und kann sich über eine Kubeconfig-Datei mit einem Cluster verbinden.
Kubeconfig-Suchpfade¶
Polycrate sucht nach einer Kubeconfig in folgender Reihenfolge:
- Workspace Secrets:
artifacts/secrets/kubeconfig.yml(empfohlen für verschlüsselte Workspaces) - Workspace-Konfiguration: In
workspace.polydefinierter Pfad (kubeconfig.filename) - Workspace-Root:
kubeconfig.ymlim Workspace-Verzeichnis - Block-Artifacts:
artifacts/blocks/k8s/kubeconfig.yml(Legacy) - Globale Kubeconfig:
~/.kube/config(Fallback)
Kubeconfig in workspace.poly¶
Die Kubeconfig kann in der workspace.poly konfiguriert werden:
# workspace.poly
name: my-workspace
kubeconfig:
filename: kubeconfig.yml # Pfad relativ zum Workspace
Kubeconfig von anderem Block erben¶
In der workspace.poly kann ein Block die Kubeconfig von einem anderen Block erben:
# workspace.poly
name: my-workspace
blocks:
# Der k8s-Block generiert die Kubeconfig
- name: k8s
from: registry.my-org.com/blocks/k8s/cluster:1.0.0
config:
# ...
# Der my-app Block erbt die Kubeconfig vom k8s-Block
- name: my-app
from: registry.my-org.com/blocks/k8s/my-app:1.0.0
kubeconfig:
from: k8s # Erbt Kubeconfig von Block "k8s"
Dies fügt automatisch eine Umgebungsvariable (KUBECONFIG=pfad/zur/kubeconfig/von/k8s) zum Container hinzu, sodass kubectl, helm und andere Tools die richtige Kubeconfig verwenden.
Konfiguration in workspace.poly
Die kubeconfig.from Konfiguration wird immer in der workspace.poly bei der Block-Instanz definiert, nicht in der block.poly des Blocks selbst.
Empfohlene Struktur¶
Für verschlüsselte Workspaces empfehlen wir:
my-workspace/
├── workspace.poly # kubeconfig.from wird hier pro Block-Instanz definiert
├── artifacts/
│ └── secrets/
│ └── kubeconfig.yml # Wird verschlüsselt als kubeconfig.yml.age
└── blocks/
└── my-app/
└── block.poly # Block-Definition (keine kubeconfig.from hier)
Verschlüsselung
Speichern Sie die Kubeconfig in artifacts/secrets/ und verschlüsseln Sie den Workspace mit polycrate workspace encrypt. Siehe Workspace-Verschlüsselung.
Debug-Pod¶
Mit polycrate k8s debug können Sie einen temporären Debug-Pod im Cluster starten, um direkt im Cluster-Kontext zu arbeiten.
Verwendung¶
Was passiert?¶
- ServiceAccount erstellen: Ein ServiceAccount
polycrate-adminwird im Ziel-Namespace erstellt (falls nicht vorhanden) - ClusterRoleBinding: Der ServiceAccount erhält
cluster-adminRechte - Pod starten: Ein Pod mit dem Polycrate-Image wird gestartet
- Attach: Polycrate verbindet sich automatisch mit der Shell im Pod
- Cleanup: Nach Beenden der Session wird der Pod automatisch gelöscht
Optionen¶
| Flag | Standard | Beschreibung |
|---|---|---|
-n, --namespace | kube-system | Namespace für den Debug-Pod |
Beispiele¶
# Debug-Pod im Standard-Namespace (kube-system)
polycrate k8s debug
# Debug-Pod in einem anderen Namespace
polycrate k8s debug -n default
# Mit explizitem Workspace-Pfad
polycrate k8s debug -w /path/to/workspace
Beispiel-Session¶
$ polycrate k8s debug
INFO Starting debug pod polycrate-debug-1701234567 in namespace kube-system
INFO Creating service account polycrate-admin in namespace kube-system
INFO Creating cluster role binding polycrate-admin-cluster-admin
INFO Pod created, waiting for it to be ready...
INFO Pod is running, attaching...
# Jetzt im Pod:
bash-5.1# kubectl get nodes
NAME STATUS ROLES AGE VERSION
master-1 Ready control-plane 30d v1.28.2
worker-1 Ready <none> 30d v1.28.2
worker-2 Ready <none> 30d v1.28.2
bash-5.1# helm list -A
NAME NAMESPACE REVISION STATUS CHART
ingress-nginx ingress 1 deployed ingress-nginx-4.8.0
cert-manager cert-manager 1 deployed cert-manager-1.13.0
bash-5.1# exit
INFO Debug session ended
INFO Cleaning up debug pod polycrate-debug-1701234567...
INFO Debug pod deleted
Use Cases¶
| Szenario | Beschreibung |
|---|---|
| Cluster-Debugging | Direkt im Cluster mit allen Polycrate-Tools arbeiten |
| Netzwerk-Tests | Service-Konnektivität innerhalb des Clusters testen |
| Helm-Operationen | Helm-Charts installieren, upgraden oder debuggen |
| Log-Analyse | Pod-Logs und Events analysieren |
| Secret-Inspection | Secrets und ConfigMaps einsehen |
Im Pod verfügbare Tools¶
Der Debug-Pod enthält alle Tools aus dem Polycrate-Image:
Kubernetes & Container:
kubectl- Kubernetes CLIhelm- Helm Package Manager (+ helm-diff Plugin)kustomize- Kubernetes Konfigurationcilium- Cilium CNI CLIargocd- Argo CD CLIvelero- Kubernetes Backup Tooldocker- Docker CLIskopeo- Container Image Management
Backup & Encryption:
restic- Backup Toolkopia- Backup Toolage- Moderne Verschlüsselung
Utilities:
ansible- Configuration Managementgit,curl,wget,rsyncjq,yq- JSON/YAML Processingpsql,mysql- Datenbank-Clientsdig,nslookup,telnet- Netzwerk-Tools
Siehe Der Polycrate Container für die vollständige Tool-Liste.
Sicherheitshinweis
Der Debug-Pod hat cluster-admin Rechte. Verwenden Sie diesen Befehl nur in vertrauenswürdigen Umgebungen und löschen Sie den ServiceAccount nach dem Debugging falls nötig:
Kubeconfig-Synchronisation¶
polycrate k8s sync-kubeconfigs lädt alle Kubernetes-Cluster aus der Polycrate API und schreibt ihre Kubeconfigs in die lokale Kubeconfig-Datei (Standard: ~/.kube/config). Vorhandene Einträge mit demselben Cluster-Namen werden überschrieben — der Befehl ist idempotent.
Voraussetzung: Polycrate API
Der Befehl benötigt eine konfigurierte API-Verbindung (~/.polycrate/polycrate.yml mit api.enabled: true und api.api_key). Cluster ohne hinterlegte Credential werden übersprungen. → API-Integration
Verwendung¶
Was passiert?¶
- Cluster abrufen: Alle
K8sCluster-Objekte werden von der Polycrate API geladen. - Credential laden: Für jeden Cluster wird die zugehörige Credential (inkl. Kubeconfig-Inhalt) abgerufen.
- Mergen: Cluster, AuthInfo und Context aus der jeweiligen Kubeconfig werden unter dem Cluster-Namen (
cluster.name) in die lokale Kubeconfig eingetragen. - Schreiben: Die aktualisierte Kubeconfig wird in
~/.kube/configgespeichert (Verzeichnis wird ggf. angelegt).
Cluster ohne Credential oder mit leerem Kubeconfig-Inhalt werden übersprungen und protokolliert.
Beispiel¶
$ polycrate k8s sync-kubeconfigs
● Fetching K8s clusters from API...
● Found 3 cluster(s)
✓ archenemy
✓ laser24
● skipped: tank-3 (no credential)
● Wrote 2 context(s) to /home/user/.kube/config (1 skipped)
Nach der Synchronisation können die Kontexte direkt mit kubectl genutzt werden:
Kontext wechseln¶
Mit polycrate k8s set-context wird der aktive Kontext in ~/.kube/config gesetzt:
# Kontext explizit angeben
polycrate k8s set-context archenemy
# Workspace-Namen als Kontext verwenden (kein Argument)
polycrate k8s set-context -w /pfad/zum/workspace
Workflow: sync + set-context
Ziel-Kubeconfig anpassen¶
Standardmäßig wird ~/.kube/config verwendet. Das Ziel kann in ~/.polycrate/polycrate.yml geändert werden:
Loopback-Kubeconfig-Sync¶
Bei Workspaces mit einem K8sCluster vom Typ loopback rotiert die Kubeconfig serverseitig über die Polycrate API (Loopback-Integration). Die lokale Datei im Workspace — typischerweise artifacts/secrets/kubeconfig.yml — wird nicht automatisch aktualisiert, wenn die API eine neuere Version bereitstellt.
Ab CLI 0.46.0 prüft die CLI vor jedem Action-Run (polycrate run, polycrate blocks run), ob eine neuere Kubeconfig verfügbar ist, und bietet interaktiv einen Download an.
Voraussetzungen¶
- API konfiguriert (
api.enabled: true,api.api_key) → API-Integration - Workspace nutzt eine workspace-lokale Kubeconfig (nicht den globalen Fallback
~/.kube/config) - Ein Loopback-
K8sClusterist dem Workspace in der API zugeordnet - Interaktive Session (in CI wird der Check übersprungen)
Ablauf¶
- Workspace und lokale Kubeconfig laden (wie bei jedem Run)
- Loopback-Cluster für diesen Workspace in der API suchen
- Credential-Kubeconfig mit lokalem Dateiinhalt vergleichen
- Bei Unterschied: Prompt — „A newer kubeconfig for loopback cluster '…' is available — download and overwrite?"
- Bei Bestätigung: Datei mit Modus
0600überschreiben; der Action-Run läuft danach normal weiter
Bei Ablehnung oder API-Fehler wird der Run nicht abgebrochen (im Gegensatz zu Wartungsfenster- oder Git-Stale-Checks).
Konfiguration¶
| Schlüssel | Flag | Standard |
|---|---|---|
sync_loopback_kubeconfig | --sync-loopback-kubeconfig | true |
→ Konfiguration — Update- und Prüf-Checks
Abgrenzung zu k8s sync-kubeconfigs
polycrate k8s sync-kubeconfigs merged Cluster-Kontexte in ~/.kube/config. Der Loopback-Sync aktualisiert dagegen die Workspace-Kubeconfig — der Pfad, den Actions im Container über KUBECONFIG nutzen.
Siehe also¶
- CLI-Referenz - Vollständige Command-Referenz
- Der Polycrate Container - Verfügbare Tools im Container
- API-Integration - Polycrate API konfigurieren