PM2 is great if you have an app composed of multiple services that need to share an environment. You may want to reduce communication overhead between these node processes or avoid involving kubernetes to share resources. Implementation details would drive this.
Also, kubernetes cluster workers can fail. How do you want your workload to behave in that case? When your container is killed, should these services fail together? Do you want a better separation of concerns between your app dev team and your devops/middleware team (think disaster recovery and cluster maintenance)? Where does the app dev end and the devops begin? For other languages such as Java or C++, it would be out of the question to let these details matter to anyone but app devs. Their entire apps are in one docker image. Kubernetes should only manage instances of the app and the obvious dependencies that should be externalized (redis, memcached, postgres, mysql, etc.)
In my experience it's really a question of failure modes in your architecture and squeezing out small gains in performance that matter at scale.
I use PM2 with BrowserBox and it's been great. Reliable, scalable, performant. PM2 has been with us since the early days. We've never looked for an alternative.
Also, kubernetes cluster workers can fail. How do you want your workload to behave in that case? When your container is killed, should these services fail together? Do you want a better separation of concerns between your app dev team and your devops/middleware team (think disaster recovery and cluster maintenance)? Where does the app dev end and the devops begin? For other languages such as Java or C++, it would be out of the question to let these details matter to anyone but app devs. Their entire apps are in one docker image. Kubernetes should only manage instances of the app and the obvious dependencies that should be externalized (redis, memcached, postgres, mysql, etc.)
In my experience it's really a question of failure modes in your architecture and squeezing out small gains in performance that matter at scale.