[PR #1] [CLOSED] Initial K8s Controller Implementation for Open Terminal Orchestration #37

Closed
opened 2026-10-18 21:13:41 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/open-webui/terminals/pull/1
Author: @james-westbrook
Created: 3/7/2026
Status: ❌ Closed

Base: main ← Head: kubernetes-controller


📝 Commits (1)

  • 127bb4f feat: initial k8s controller implementation for open terminal orchestration

📊 Changes

11 files changed (+1591 additions, -0 deletions)

View changed files

➕ Dockerfile.controller (+11 -0)
➕ Dockerfile.orchestrator (+14 -0)
📝 README.md (+143 -0)
➕ kubernetes-controller/__init__.py (+0 -0)
➕ kubernetes-controller/app.py (+391 -0)
➕ kubernetes-controller/config.py (+42 -0)
➕ kubernetes-controller/controller.py (+515 -0)
➕ kubernetes-controller/k8s.py (+228 -0)
➕ manifests/crd.yaml (+148 -0)
➕ manifests/rbac.yaml (+65 -0)
➕ pyproject.toml (+34 -0)

📄 Description

Description

Enables per-user terminal provisioning via Kubernetes Controller. Adds a Kubernetes Operator that automatically provisions isolated Open Terminal pods for each Open WebUI user on demand.

Features

  • Terminal CRD (terminals.open-webui.com/v1alpha1) — declares per-user terminal instances as native Kubernetes resources
  • kopf Controller — reconciles Pod, Service, Secret, and PVC for each Terminal CR; automatic idle culling after configurable timeout
  • FastAPI Orchestrator — single authenticated entry point that handles on-demand provisioning, readiness waiting, and HTTP/WebSocket proxying to per-user pods
  • OpenAPI spec passthrough — cached /openapi.json endpoint so Open WebUI discovers terminal tools without per-user auth
  • Helm sub-chart — optional dependency wired into the Open WebUI parent chart, toggle with terminals.enabled: true
  • Full RBAC & CRD manifests — ready-to-apply manifests for manual deployment
  • Configurable resources, persistence, and idle timeout via environment variables

Contributor License Agreement

Note

Deleting the CLA section will lead to immediate closure of your PR and it will not be merged in.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/open-webui/terminals/pull/1 **Author:** [@james-westbrook](https://github.com/james-westbrook) **Created:** 3/7/2026 **Status:** ❌ Closed **Base:** `main` ← **Head:** `kubernetes-controller` --- ### 📝 Commits (1) - [`127bb4f`](https://github.com/open-webui/terminals/commit/127bb4fb2d7642fa3178576ebe46b9a01ff46446) feat: initial k8s controller implementation for open terminal orchestration ### 📊 Changes **11 files changed** (+1591 additions, -0 deletions) <details> <summary>View changed files</summary> ➕ `Dockerfile.controller` (+11 -0) ➕ `Dockerfile.orchestrator` (+14 -0) 📝 `README.md` (+143 -0) ➕ `kubernetes-controller/__init__.py` (+0 -0) ➕ `kubernetes-controller/app.py` (+391 -0) ➕ `kubernetes-controller/config.py` (+42 -0) ➕ `kubernetes-controller/controller.py` (+515 -0) ➕ `kubernetes-controller/k8s.py` (+228 -0) ➕ `manifests/crd.yaml` (+148 -0) ➕ `manifests/rbac.yaml` (+65 -0) ➕ `pyproject.toml` (+34 -0) </details> ### 📄 Description ## Description Enables per-user terminal provisioning via Kubernetes Controller. Adds a Kubernetes Operator that automatically provisions isolated Open Terminal pods for each Open WebUI user on demand. ### Features - Terminal CRD (terminals.open-webui.com/v1alpha1) — declares per-user terminal instances as native Kubernetes resources - kopf Controller — reconciles Pod, Service, Secret, and PVC for each Terminal CR; automatic idle culling after configurable timeout - FastAPI Orchestrator — single authenticated entry point that handles on-demand provisioning, readiness waiting, and HTTP/WebSocket proxying to per-user pods - OpenAPI spec passthrough — cached /openapi.json endpoint so Open WebUI discovers terminal tools without per-user auth - Helm sub-chart — optional dependency wired into the Open WebUI parent chart, toggle with terminals.enabled: true - Full RBAC & CRD manifests — ready-to-apply manifests for manual deployment - Configurable resources, persistence, and idle timeout via environment variables ## Contributor License Agreement <!-- 🚨 DO NOT DELETE THE TEXT BELOW 🚨 Keep the "Contributor License Agreement" confirmation text intact. Deleting it will trigger the CLA-Bot to INVALIDATE your PR. Your PR will NOT be reviewed or merged until you check the box below confirming that you have read and agree to the terms of the CLA. --> - [x] By submitting this pull request, I confirm that I have read and fully agree to the [Contributor License Agreement (CLA)](./CLA.md), and I am providing my contributions under its terms. > [!NOTE] > Deleting the CLA section will lead to immediate closure of your PR and it will not be merged in. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-18 21:13:41 +00:00
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
open-webui/terminals#37
No description provided.