How can I best deliver read only data assets to a Kubernetes application?
we'd prefer not to bake them into the actual Docker image itself (plus we want the ability to change the assets without having to recompile the application images).


This is indeed good properties to have. You are on the right track.


  The problem, however, comes with our read-only data assets (similar to a game's asset files).


This can be solved with multiple solutions, it's hard to tell what is the best for you. Here are some alternatives.

Persistent Volume - ReadOnlyMany


  I know that we're essentially looking for a persistent volume for Kubernetes, but the problem for us is bundling all of the data into a single package that has the same delivery convenience as a Docker image.


Yes, you could create a Persistent Volume with access modes:

accessModes:
- ReadWriteOnce
- ReadOnlyMany


then (by an automatic process)


Load your data onto the volume with a Job using access mode ReadWriteOnce
Load the volumes to your pods/services using access mode ReadOnlyMany


and keep the volume immutable, you create a new when you need to change content. You can also use multiple volumes this way.

CDN


  our read-only data assets (similar to a game's asset files).


This inherently also sounds what typically is served by Content Deliver Networks. But it depends on your use case if this is a good solution or not.

Buckets

Data for e.g. CDN is usually stored by "buckets" at cloud providers, that may also be an option, then your applications load data using HTTP typically. Minio may be an alternative if you want to do this in your cluster.