I'm trying to set up my Tomcat application in a Kubernetes environment and I want it to behave in a fail-fast manner. Specifically, I've only got one WAR file in Tomcat, and I've set up various configurations like server.xml and web.xml. If the WAR fails to start, I want the pod to crash so Kubernetes will attempt to restart it. What steps can I take to achieve this? Any advice would be appreciated!
3 Answers
It's crucial to define what you mean by "WAR fails." Typically, issues like connectivity problems or insufficient resources aren't fatal errors and are managed with readiness probes. But if you're encountering serious issues like missing configurations or credentials, you can modify your server.xml like this: . This will make Tomcat fail the startup if any fatal errors occur, like exceptions thrown by servlets or filters.
Have you considered adding a startup probe? You can configure it to check a specific HTTP endpoint to see if Tomcat is running correctly. This should help with the fail-fast approach you're looking for. Also, if you’re running multiple apps in a single Tomcat pod, maybe think about separating them into different pods to simplify failure handling.
You can use an init container to validate your configurations before Tomcat starts up. This way, if there’s a problem, it will prevent Tomcat from launching at all. Alternatively, adding a startup probe that will kill the container if the WAR doesn’t deploy within a certain timeout should also work since Kubernetes can automatically restart it afterwards.

Thanks for the tip! I've got startup probes in place but they seem to take a while to detect a crash. I'm looking for a more immediate solution that can crash the pod right away if the WAR doesn't start.