Currently services do not take into account the client mode flag during deployment, so cluster singleton will be deployed on a client node. However, if you want to skip client nodes for service deployment, you can use CacheConfiguration#SERVER_NODES as the node predicate in service configuration.
I'm sorry, I don't understand how that would be configured. I see that ServiceConfiguration has a method, setNodeFilter.
So calling setNodeFilter with an IgnitePredicate<ClusterNode> p = n -> !n.isLocal() looks like it would do the trick in code.