There several ways to do this, Ansible has an authorized_keys module that can do the copying, the user module can also generate keys. But it does need to log onto the servers, the first time it can use user/password as part of a bootstrapping play.
As for root vs shared user with sudo vs individual users with sudo ... it does not matter to Ansible, do what fits your policy and worfklow better. FYI, sudo is not the only privilege escalation method supported, just used as example.