I have application that have some user settings and it runs on kubernetes cluster. I would like the user settings to survive application crash/pod restart.
I was thinking first about having a DB instance for keeping it outside of kubernetes. Then I thought, maybe I could just abuse etcd to store small amount of custom data. Is it a good approach to keep things simple?
Another options I see:
What would you use? Its very small amount of data
you can use Persistent Volume and Persistent Volume claim. pvc or Persistent Volume claim will keep data incase of pod restart or pod crash. this the best way i think to store user data. you can have the suitable storage type and resource size as per your requirement. you can look into official doc. Ref
If you want to use etcd, a Kubernetes built-in database, it's not really suited for this purpose and shouldn't be used in practice. App shouldn't know about Kubernetes. You need to use DB or PVC to store app related objects in a disk (for example json, yaml or other files).
You could use etcd, however it's likely overkill for the requirements you outlined above. If you are sure you want to store stateful information in k8s, I'd suggest mounting a persistent volume to your deployment and then using a filestore such as BoltDB (https://github.com/boltdb/bolt) to interface with it.
That being said, I think running a simple SQL database outside of k8s is the simplest overall solution. Anything stateful is never simple with kubernetes and this way you can easily administer the database.