This applies to basically any software or tooling once you get away from the initial tutorials. They wouldn't be tutorials if they covered all sorts of specific use cases particular to your own situation.
"The hard part is when you start configuring and configuring to your own requirements. What baseimage should you use? How about logging?"
Either the same distro you would use on a bespoke server, or you can optimize with alpine or scratch. Logging can be as simple or complicated as you want it to be, regardless if you use docker or not.
"How about PID 1 problem?"
We use s6-overlay [0] to manage this. When a service dies, a script gets executed, giving us control over how to handle it.
"How about SSH?"
For us, we use ansible to provision/set up kubernetes with ssh keys, then access pods and containers through kubernetes' cli. It isn't particularly -nice-, but it does work.
"How about restarting servers? How about migrations? One-off scripts?"
This is managed through kubernetes. You can restart servers and make deployments.