1) a strong Virtualization software (ie Xen Essentials or VMWare)
2) redundant networking - preferably 10G or fiber - at the very least, multiple bonded gig (ideally, a combination of all of the above). You should look at separating out services via the network (management, WAN, LAN) with redundant connections for each service to respective switches - each of our nodes for example have 6 gig ports, 2 10G ports and 2 fiber ports..
3) a real enterprise grade SAN - it makes all the difference - again, redundant, high throughput capable, preferably SAS based (think NetApp, EMC, etc) - building your own SAN will put you 5 years (at least) behind the capabilities of enterprise grade SANs and will end up costing you more in the long run - as this technology evolves, homegrown SANs will likely become more feasible..
4) some sort of interface that is able to perform at least basic resizing functions, billing, etc..

If you cannot build this right, do not bother - you will end up with a "beta" cloud that will have less uptime and poorer performance then traditional hosting (especially once it gets loaded with users)

Alternatively, work a deal out with a very good cloud provider on a wholesale rate for CPU, RAM, Disk - and allocate your users that want cloud hosting onto someone elses infrastructure - at least until you can build up the revenue streams required to do this yourself properly

1) a strong Virtualization software (ie Xen Essentials or VMWare)
2) redundant networking - preferably 10G or fiber - at the very least, multiple bonded gig (ideally, a combination of all of the above). You should look at separating out services via the network (management, WAN, LAN) with redundant connections for each service to respective switches - each of our nodes for example have 6 gig ports, 2 10G ports and 2 fiber ports..
3) a real enterprise grade SAN - it makes all the difference - again, redundant, high throughput capable, preferably SAS based (think NetApp, EMC, etc) - building your own SAN will put you 5 years (at least) behind the capabilities of enterprise grade SANs and will end up costing you more in the long run - as this technology evolves, homegrown SANs will likely become more feasible..
4) some sort of interface that is able to perform at least basic resizing functions, billing, etc..

If you cannot build this right, do not bother - you will end up with a "beta" cloud that will have less uptime and poorer performance then traditional hosting (especially once it gets loaded with users)

Alternatively, work a deal out with a very good cloud provider on a wholesale rate for CPU, RAM, Disk - and allocate your users that want cloud hosting onto someone elses infrastructure - at least until you can build up the revenue streams required to do this yourself properly

Go with a platform that does all that for you - building this from scratch is not trivial.

Yeah, interesting you mentioned KVM - I debated whether to include it or not. I "think" they will play a more significant role in the future - as obviously it is now going to be native in Linux. My issue with KVM is I dont think its quite ready yet, nor nearly evolved enough. Still though, I can see version2 of our cloud using KVM in place of Xen essentials (which is simply what we chose to use over VMware for various reasons). You are right though, KVM is a very interesting conversation point - and likely will be mentioned in the same breath as Xen and VMWare in the not too distant future. So, if you are willing to invest more significantly in development to start - this is probably a very good option as well..