You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: proposals/separate-standalone-driver/README.md
+13-5Lines changed: 13 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -72,7 +72,7 @@ It creates a pod that launches the driver container using the kfp-driver image.
72
72
73
73
## Alternative
74
74
75
-
Instead of launching a new driver using a container template, configure the system to send requests to an already running server.
75
+
Instead of launching a new driver's pod using a container template, configure the system to send requests to an already running server.
76
76
Something like this:
77
77
```yaml
78
78
templates:
@@ -112,13 +112,15 @@ The HTTP template [is not able](https://github.com/argoproj/argo-workflows/issue
112
112
There’s a trade-off between running a standalone driver service pod globally or single per workflow. This is a balance between better performance and avoiding a single point of failure.
113
113
Currently, Argo [supports](https://github.com/argoproj/argo-workflows/issues/7891) only one driver pod per workflow option. Both options are based on the Agent pod, which is currently started per workflow — this is a limitation of the current implementation.
114
114
115
-
### Implementation
115
+
### Implementation Based on the Executor Plugin
116
116
117
117
Instead of creating a driver pod for each task, we can reuse a single agent pod via a plugin template:
118
118
[Agent pod](https://github.com/argoproj/argo-workflows/issues/5544) is a unit designed for extension.
119
119
It can be extended by any server that implements the protocol.
120
120
This server(plugin in Executor plugin terminology) runs as a sidecar alongside the agent pod.
121
-

121
+
122
+
Below is a scheme where, instead of creating a pod for the driver's task, we reuse the Argo Workflow Agent via a plugin
123
+

122
124
123
125
124
126
To move from the container template to the Executor Plugin template:
@@ -183,6 +185,12 @@ plugin:
183
185
This proposal introduces an optimization for Kubeflow Pipelines (KFP) that replaces per-task driver pods with a lightweight standalone service based on Argo Workflows’ Executor Plugin mechanism. It significantly reduces pipeline task startup time by eliminating the overhead of scheduling a separate driver pod for each task — particularly beneficial for large pipelines with multiple steps and caching enabled.
184
186
Instead of launching a new driver pod per task, the driver logic is offloaded to a shared sidecar container (agent pod) within the workflow. This reduces latency in cache lookups and metadata initialization.
185
187
However, this approach does not fully eliminate pod scheduling issues: the standalone driver is not a global service, but is instantiated per workflow. Thus, a pod still needs to be scheduled for each workflow run.
186
-
A key limitation of this implementation is that it currently supports only the Argo Workflows backend.
187
188
188
-
Follow-up: file a task to support a global agent pod shared across workflows to fully remove driver pod scheduling overhead. The community is [open](https://github.com/argoproj/argo-workflows/issues/7891) to it.
189
+
## Disadvantages:
190
+
A key limitation of this implementation is that it currently supports only the Argo Workflows backend. The Executor plugin also adds some extra complexity to maintenance and deployment.
191
+
192
+
## Open Questions:
193
+
- Do we need a fallback mechanism to the per-task driver pods in case the Executor Plugin is not available in some installations? Should KFP continue supporting both execution flows (plugin-based and pod-based drivers) for compatibility?
194
+
195
+
## Follow-ups
196
+
- Implement a global agent pod. The community is [open](https://github.com/argoproj/argo-workflows/issues/7891) to it.
0 commit comments