Repository navigation
feat(app): replace Knative Serving with native Kubernetes Deployment and Service controller - #8228
Closed
chansoo-calico wants to merge 2 commits into
Closed
chansoo-calico wants to merge 2 commits into
chansoo-calico wants to merge 2 commits into
Conversation
…and Service controller
Replaces the Knative Serving (serving.knative.dev/v1 Service) dependency in app/internal/k8s with native Kubernetes apps/v1 Deployment and core/v1 ClusterIP Service resources so AppService / InternalAppService (app_env) runs on standard Kubernetes clusters without Knative or Istio/Kourier installed.
- Manages apps/v1 Deployment and core/v1 ClusterIP Service in AppK8sClient (Deploy, Stop, Delete, GetApp, List, GetReplicas, DeleteReplica, and Deployment informer watch).
- Preserves K8sPod metadata labels and annotations on the Deployment pod template (excluding Kueue job queue labels) and stamps flyte.org/managed and flyte.org/project on app replica pods so admission policies and the executor pod cache recognize them.
- Substitutes {{.rawOutputDataPrefix}} in fserve container command/args.
- Supports path-based BaseDomain URLs (e.g. https://<host>/apps/<service-name>/) in PublicIngress alongside subdomain routing.
Signed-off-by: Chansoo Lee <chansoo@calicolabs.com>
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Missing native-resource permissions and public routing block standard installations, while serving and rendering regressions remain unresolved.
9 open issues
Add native resource RBAC permissions to both charts · New Preserve or reject unsupported autoscaling settings · New Add default readiness probes to serving containers · New Preserve public routing for Deployment-backed apps · New Resolve duplicate environment variables with last-value-wins · New Deep-copy pod specs before placeholder substitution · New Preserve or reject unsupported request timeout settings · New Select Service port from the named primary container · New Gate ACTIVE and FAILED status on current rollout · New
What changed in this PR
Replaces the app controller’s Knative Serving resources with native Kubernetes Deployments and Services so app workloads can run on clusters without Knative.
Changes:
- Migrates resource lifecycle, watches, status mapping, and scheme registration to native Kubernetes types.
- Propagates pod metadata, renders raw-output placeholders, and adds path-based public URL formatting.
- Updates lifecycle tests and adds metadata, placeholder, and URL coverage.
| File | Description |
|---|---|
manager/cmd/components.go |
Registers Deployment types during manager setup. |
flytestdlib/app/app_scheme.go |
Registers native app and core Kubernetes types. |
app/internal/k8s/app_client.go |
Implements Deployment/Service management and updated pod and URL handling. |
app/internal/k8s/app_client_test.go |
Adapts tests to native resources and covers new behavior. |
Review effort: Balanced
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Existing apps lack a migration path, and listening-port changes can interrupt traffic during deployment updates.
6 open issues
Service port changes interrupt traffic during rollout · New Legacy Knative apps become undiscoverable after upgrade · New Preserve public routing for Deployment-backed apps Preserve or reject unsupported autoscaling settings Add native resource RBAC permissions to both charts Preserve or reject unsupported request timeout settings
5 resolved since last review
Review effort: Balanced
chansoo-calico
force-pushed
the
feat/native-k8s-app-controller
branch
from
October 22, 2026 19:47
83e08dd to
a5aab51
Compare
chansoo-calico
force-pushed
the
feat/native-k8s-app-controller
branch
from
October 22, 2026 22:00
a5aab51 to
ea2596e
Compare
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Legacy Service adoption, named-port rewriting, and path-based URL port handling introduce unresolved compatibility regressions.
3 open issues
6 resolved since last review
Legacy Knative apps become undiscoverable after upgrade Service port changes interrupt traffic during rollout Preserve public routing for Deployment-backed apps Preserve or reject unsupported autoscaling settings Add native resource RBAC permissions to both charts Preserve or reject unsupported request timeout settings
Review effort: Balanced
chansoo-calico
force-pushed
the
feat/native-k8s-app-controller
branch
from
October 22, 2026 22:17
ea2596e to
54d2d5d
Compare
…controller Signed-off-by: Chansoo Lee <chansoo@calicolabs.com>
chansoo-calico
force-pushed
the
feat/native-k8s-app-controller
branch
from
October 22, 2026 22:52
54d2d5d to
9cc3631
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Why are the changes needed?
app/internal/k8spreviously required Knative Serving (serving.knative.dev/v1Service) and a Knative ingress controller (Istio/Kourier) to deploy and manageAppService/InternalAppService(app_env) workloads. On standard Kubernetes clusters (such as GKE without Knative installed),AppServicecould not start or deploy apps because theserving.knative.dev/v1CRDs and controller were absent.What changes were proposed in this pull request?
serving.knative.dev/v1Servicemanagement inapp/internal/k8s,flytestdlib/app/app_scheme.go, andmanager/cmd/components.gowith native Kubernetesapps/v1Deploymentandcore/v1Service(ClusterIP) resources.K8sPodmetadata labels and annotations onto theDeploymentpod template (filtering out job-onlykueue.x-k8s.io/queue-namelabels) and stampflyte.org/managed=trueandflyte.org/projecton app replica pods forflyte-task-pod-identityadmission policies and the executor pod cache.{{.rawOutputDataPrefix}}in containerCommandandArgsforfserveapp containers.BaseDomainURLs (whenBaseDomaincontains/, e.g.https://<host>/apps/<service-name>/) inPublicIngressin addition to subdomain-based URLs.app/internal/k8s/app_client_test.goto testDeployment+Servicelifecycle, pod template metadata propagation,{{.rawOutputDataPrefix}}substitution, and path-basedPublicIngress.How was this patch tested?
Ran unit tests and built
./manager/cmd/:go test -v ./app/... ./flytestdlib/app/... go build ./manager/cmd/Check all the applicable boxes