A multi-level K-cut graph partitioning algorithm is proposed to minimize data transfer across cloud datacenters while satisfying constraints for load balancing and fixed data locations. The algorithm contracts fixed input datasets and tasks within each datacenter, coarsens the graph level-by-level, performs K-cut partitioning to minimize cut size, and projects the partitioned graph back to the original workflow while maintaining load balancing. Evaluation on three real-world workflows shows the algorithm outperforms other state-of-the-art methods.