Rev*_*ddy 4 java tomcat docker kubernetes
我正在 k8s 集群中的 tomcat 上运行 java 应用程序,我正在使用 prestop 生命周期钩子/usr/local/tomcat/bin/shutdown.sh在容器终止之前运行。还定义了 60 秒的终止宽限期。
预期行为:当我杀死一个 pod 或删除一个部署时,tomcat 会正常关闭。
实际行为:tomcat 突然关闭。
有什么想法吗?提前致谢。
apiVersion: apps/v1
kind: Deployment
metadata:
name: sample
annotations:
spec:
replicas: 2
selector:
matchLabels:
app: sample
name: sample
template:
metadata:
labels:
app: sample
name: sample
spec:
hostname: sample-web
terminationGracePeriodSeconds: 60
volumes:
- name: splunk-inputs
configMap:
name: splunk-conf
items:
- key: inputs.conf
path: ./inputs.conf
- name: splunk-outputs
configMap:
name: splunk-conf
items:
- key: outputs.conf
path: ./outputs.conf
- name: docker-socket
hostPath:
path: /var/run/docker.sock
- name: tomcat-log-common
emptyDir: {}
containers:
- name: sample
image: sampleregistery.azurecr.io/root
imagePullPolicy: IfNotPresent
lifecycle:
preStop:
exec:
command: ["/usr/local/tomcat/bin/shutdown.sh"]
Run Code Online (Sandbox Code Playgroud)
发现问题:
我正在运行这个 prestop 生命周期钩子:
生命周期:preStop:exec:命令:[“/usr/local/tomcat/bin/catalina.sh”]
它应该是这样的:
生命周期:preStop:exec:命令:[“/usr/local/tomcat/bin/catalina.sh && sleep 30”]
在第一种情况下,K8s 试图在调用 shutdown.sh 后立即退出生命周期钩子,而无需等待 tomcat 耗尽所有线程。
根据您的应用程序,它只需要大约 5-10 秒。休眠 30 秒将使 prestop 钩子保持活动状态,这应该为 tomcat 提供足够的时间来完成关闭过程”。
| 归档时间: |
|
| 查看次数: |
1919 次 |
| 最近记录: |