Echoing cutrightjm's answer, here is the ipa-client-install command I used to join Ubuntu linux hosts to a FreeIPA cluster (of CentOS 7.6 machines), where the client hostnames existed and were different from the realm/domain name used by the FreeIPA servers:
ipa-client-install --unattended --no-ntp \
  --principal=ipa-principal-name --password=ipa-principal-pass \
  --domain=ipa.domain.name \
  --server=fqdn.of.an.ipa.server
This worked when the client already had its short hostname and "full" hostname (FQDN) set up in its kernel and was resolvable in the LAN's DNS servers.  FreeIPA was only used for authenticating user access via ssh and controlling access to cron and sudo on the client machines, not service discovery or DNS resolving or NTP.
Without the --hostname option, the ipa-client-install command (a Python script) does not try to set the client machine's hostname.  It makes Python calls to learn the client's FQDN and passes it to the FreeIPA servers during registration.  For Ubuntu, it found the correct FQDN as long as the local host config would return the right hostnames from hostname -s and hostname -f, and both the client machine and the FreeIPA servers were able to resolve forward lookups of the client's FQDN in DNS.  After the command was done, the hostname on the client was not changed, and the FreeIPA servers knew the client by its FQDN, not its "short" hostname.
Both the local kernel config and the DNS records needed to be set up before invoking ipa-client-install.
Again, this is an echo of cutrightjm's answer to include the --domain and exclude the --hostname option in your ipa-client-install command, based on my experience with a very similar use case.  I've included the preconditions that I needed to make it succeed with my clients and FreeIPA servers.