I have a DS and a Cluster Master running on the same host (a VM). I created them as separate Splunk installs (/opt/splunk_clustermaster and /opt/splunk_deploymentserver). As long as they don't conflict for ports and aren't in contention for CPU/RAM, there is no reason not to co-locate them for small to medium sized deployments.
When DS gets really busy, this may become a problem. Like jtrucks says, either back down the frequency of checkins for DS clients, or setup additional DS instances on other hosts.
Thanks for the response. Can you be more specific regarding the port conflicts ? Currently I tested it in my development environment with a single Splunk service acting both as a deployment server and master node with out any issues.
Really this is about performance, so this depends highly on your indexing volume on that machine, number of hosts calling home to the DS and how often they call in, and how many concurrent searches happen on that machine. Compare all this with the hardware you have and see if it works for you.
You can tune the DS by spreading out the calling home interval, as well, from the default 30 seconds to several minutes and it can drastically reduce your performance hit as a DS.
Additionally, Splunk recommends not doing this for Clustering. Read these first: