I’m not aware of any real efforts to implement multitenancy in OpenMRS. However, you can always define arbitrary Hibernate properties via the runtime properties using the same syntax, so if you had, e.g.,
hibernate.multi_tenant_connection_provider=# your provider class
And you caused your class to be available on the classpath (e.g., by packaging it in a JAR in the /WEB-INF/lib directory of the OpenMRS WAR), you could leverage the setup. However, you’d have to add some code that would correctly apply the Liquibase changes to each tenant connection. There are potentially some other places where we assume that there’s at least one main connection, but Liquibase is generally the big one since that can run before we’ve configured Hibernate.
Would a single app-server (Tomcat running OMRS) be good enough? maybe - however OMRS server does take fair amount of resources. So can’t imagine on say 2 GB memory pod!
Creating the database (through liquibase) is possible - just spin up another instance that will create a database and subsequently die.
The single app server will need some dynamic lookup of different data sources/connections. This may require some code changes?
Lucene indexes - prefer different indexes for different instances (different volumes mounted). Otherwise every patient must be associated with a clinic/hospital in the index and search modified to include that filter - should be easy. But not really absolute segregation of data.
Documents that are uploaded, also need to be segregated - but that should be easy enough. e.g. different S3 bucket