Skip to content

feat(kube): backend Kubernetes phase 1 + chart Helm + wiki - #298

Merged
bobdivx merged 5 commits into
mainfrom
feat/kubernetes-phase1
Nov 2, 2026
Merged

bobdivx merged 5 commits into
mainfrom
feat/kubernetes-phase1

Conversation

@bobdivx

@bobdivx bobdivx commented Nov 2, 2026

Copy link
Copy Markdown
Owner

Kubernetes — phase 1 (expérimental)

Docker reste le backend par défaut : sans DEVFORGE_RUNTIME=kubernetes, aucun changement de comportement.

Contenu

  • crates/kube (nouveau) : client REST minimal (SA in-cluster, server-side apply), KubeRuntime (trait ImageRuntime) : Deployment (rolling update), Service, Ingress (host, TLS cert-manager optionnel), Secret d'env, probes, statut (absent/stopped/progressing/running/degraded + raison par pod), logs (API Pod, masqués), stop/start/restart, suppression, prune Ingress/Secret, refus de toucher aux ressources non gérées. Pods durcis (PodSecurity restricted).
  • Serveur : RuntimeBackend (crates/shared), routes /api/v1/kube/* (instance_admin, 409 en mode Docker ; render dispo partout). En mode k8s : pas de Traefik Docker, GC Docker ni auto-update Docker (helm upgrade).
  • Chart Helm deploy/helm/devforge : 1 réplica, PVC /data, Postgres intégré (StatefulSet non-root) ou externe, ServiceAccount + Role/RoleBinding limités au namespace des apps, Service, Ingress, namespace d'apps avec labels PSA.
  • Docs : deploy/kubernetes/README.md, exemple CI deploy/kubernetes/examples/github-actions-build-push.yml (build → GHCR → POST /kube/apps?wait=true), wiki Kubernetes.md (tuto Talos) + FAQ/Home/Sidebar/Installation.

Tests

  • cargo test -p devforge-kube -p devforge-shared -p devforge-update ✅, snapshots de manifests, clippy -D warnings sur devforge-kube ✅.
  • helm lint / helm template ✅ (défaut, base externe + ingress TLS, erreur attendue sans base).
  • Contre un vrai kube-apiserver 1.31 (envtest, sans nœuds) : chart appliqué, pods DevForge/Postgres admis en PodSecurity restricted ; test live crates/kube/tests/live_cluster.rs (DEVFORGE_KUBE_IT=1) avec le jeton du ServiceAccount du chart : deploy, rolling update, prune, stop/start/restart, logs, list, remove, refus des ressources étrangères, 403 hors namespace ✅.
  • Non testé sur un cluster Talos/kind réel (exécution des pods, Ingress, TLS).

Hors périmètre (P2)

Build dans le cluster (Kaniko), intégration UI/projets, adaptateur Docker du trait.

⚠️ Ne pas fusionner sans l'accord de Mathieu.

- crate devforge-kube : déploiement d'images (Deployment/Service/Ingress/Secret),
  probes, statut, logs, stop/start/restart, rolling update, prune (server-side apply)
- DEVFORGE_RUNTIME=kubernetes (Docker reste le défaut) ; routes /api/v1/kube/*
  (instance_admin) ; Traefik/GC/auto-update Docker désactivés en mode k8s
- chart Helm deploy/helm/devforge (PVC /data, Postgres intégré ou externe,
  RBAC limité au namespace des apps, PodSecurity restricted)
- exemple GitHub Actions build → GHCR → déploiement ; wiki Kubernetes (Talos)
- tests : snapshots de manifests, test live (DEVFORGE_KUBE_IT=1)
…son waitFor (rouge sur main)"

This reverts commit d01ad8b.
@bobdivx
bobdivx merged commit 62a3ed0 into main Nov 2, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant