QSVC is really the sklearn SVC passing the quantum kernel to the SVC. Now I see SVC has a 'random_state' argument on its constructor to control any randomness of the SVC within sklearn - see https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html and https://scikit-learn.org/stable/common_pitfalls.html#controlling-randomness
Since QSVC accepts kwargs, so any of these SVC params can be set via the QSVC constructor, you should be able to add a random_state=someseed parameter when you create the QSVC. Try that and see if it helps. I note the unit tests we have in qiskit optimization do not set this and pass each time - i.e. are reproducible despite that, maybe since the data it uses is way simpler.
Now perhaps internally QSVC ought to automatically pass on up the algorithm_globals as the random_state. If that works out for you perhaps you would like to raise an issue on qiskit-optimization repo in this regard.
Update: I think I mistakenly answered in respect to the wrong algorithm! You were asking about VQC not QSVC.
For VQC an initial_point was setting has been added recently to allow the starting point for the optiimzation it to be set. In what is released it uses a random initial point which may explain the variability you are seeing. Also I see (even in the updated code when it uses a random initial point) it uses the numpy random directly rather than algorithm global random generator. So seeding the numpy random generator could help avoid the randomness.