Generating 3D noise (Perlin or Simplex) on a sphere is easy since it's a 3D object. You feed it the surface coordinates, and you get out a number from (roughly) from -1.0 to 1.0. You can mix and match octaves, magnitudes and so forth and get something that looks pretty good. The problem people often have is precision. If you are actually doing a planet sized object you will start to lose millimeter precision at maybe 10 to 20 kilometers. On the CPU you can use double precision and that solves the problem to as big as you'll probably ever want it (say the orbit of Neptune or something), larger than any planet you'll make. On the GPU it's not so easy since even on modern GPUs doubles are painstakingly slow.
However, you have some options. You can tile noise on the GPU and when you mix it with other tiled noise you will eliminate any repetition. For Perlin noise this is easy since you can mod your input values into a repeating box. You can do this with simplex noise too, but you have to put the mod in the noise function itself, after the “skew” operation. It's really not that hard however.
All this is great for shading, but it doesn't solve the vertex coordinate precision issue. They will still lose precision and if you are down on the surface with say meter sized triangles, they are going to be all twisted and stuff. There are a couple methods of solving this, but most involve moving your data around the camera instead of the other way around.
I use doubles on the CPU and basically set up my matrix to go straight to view coordinates. My planet is in chunks and each chunk is sent down to the GPU in float but with an offset, so that the coordinates are now in a chunk local system. Then each chunk has a transformation matrix (and this is the important part) that goes straight to “view” coordinates. In view coordinates the camera is always at the origin, so everything close to it will be in high precision. Stuff far away will lose precision but that won't matter since it's far away. Realistically you need a good LOD system to make this work.
There are also other methods of dealing with this without using doubles. They use origin rebasing and offsets and stuff, but this is how I do it and it works for me. There are some pros and cons to each system. It kind of depends on the specifics.