by the nodes with enforcing the standard rules that would be rejecting any transaction that is non-standard or has large OP_RETURN data (which is what you would use to push arbitrary data to the blockchain). and that is enforced per transaction basis since there is no other way.
somewhere around 1 to 2kb tops.
again, bitcoin blockchain is not for data storage. use an altcoin that is designed for that. there are actually a couple of them: SIA, storej, filecoin,...