  Cloud-native applications are intentionally designed for the cloud in order
to leverage cloud platform features like horizontal scaling and elasticity -
benefits coming along with cloud platforms. In addition to classical (and very
often static) multi-tier deployment scenarios, cloud-native applications are
typically operated on much more complex but elastic infrastructures.
Furthermore, there is a trend to use elastic container platforms like
Kubernetes, Docker Swarm or Apache Mesos. However, especially multi-cloud use
cases are astonishingly complex to handle. In consequence, cloud-native
applications are prone to vendor lock-in. Very often TOSCA-based approaches are
used to tackle this aspect. But, these application topology defining approaches
are limited in supporting multi-cloud adaption of a cloud-native application at
runtime. In this paper, we analyzed several approaches to define cloud-native
applications being multi-cloud transferable at runtime. We have not found an
approach that fully satisfies all of our requirements. Therefore we introduce a
solution proposal that separates elastic platform definition from cloud
application definition. We present first considerations for a domain specific
language for application definition and demonstrate evaluation results on the
platform level showing that a cloud-native application can be transferred
between different cloud service providers like Azure and Google within minutes
and without downtime. The evaluation covers public and private cloud service
infrastructures provided by Amazon Web Services, Microsoft Azure, Google
Compute Engine and OpenStack.
