Due to limitations with Zuul v2's scheduler, it can only only run freestyle Jenkins jobs. To work around this limitation, all pipeline jobs currently have a corresponding freestyle "trigger" job that passes along parameters and blocks, returning the result of the "real" pipeline job.
These trigger builds end up taking executors unnecessarily; They don't do any real work.
One solution for this issue might be to add a single node to Jenkins with a label (e.g. "trigger") that can be used to schedule trigger builds, keeping the other nodes free to do real work. This node might not even necessitate an additional instance as it won't incur substantial CPU usage. It could potentially be configured as a remote SSH node that logs in to an existing instance with a different user account for example.