【发布时间】:2018-09-21 00:59:51
【问题描述】:
我在 Kubernetes 集群上的 Docker 映像中在 Tomcat 上运行 Java webapp。服务运行良好,我正在尝试设置 liveness 和 readiness 探针。
我还没有找到关于 Tomcat 和 Kubernetes 最佳实践的文档,但我认为遵循 documentation 的 HTTP GET 请求是合适的:
livenessProbe:
failureThreshold: 3
httpGet:
path: /
port: 8080
scheme: HTTP
initialDelaySeconds: 20
periodSeconds: 20
successThreshold: 1
timeoutSeconds: 3
访问 Tomcat 基本 URL 时,它会返回一个欢迎页面和代码 200 -- OK。但是,liveness 探测失败,这是在 pod 描述中:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 3m default-scheduler Successfully assigned xxxxx-service-7f8f76988-lkxdf to kube-03
Normal SuccessfulMountVolume 3m kubelet, kube-03 MountVolume.SetUp succeeded for volume "default-token-b6tps"
Normal Created 1m (x3 over 3m) kubelet, kube-03 Created container
Normal Started 1m (x3 over 3m) kubelet, kube-03 Started container
Warning Unhealthy 42s (x7 over 3m) kubelet, kube-03 Liveness probe failed: Get http://10.233.96.19:8080/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)
Normal Pulling 40s (x4 over 3m) kubelet, kube-03 pulling image "xxxxx:4999/xxxxx/xxxxxservice:v1.3.0"
Normal Pulled 40s (x4 over 3m) kubelet, kube-03 Successfully pulled image "xxxxx:4999/xxxxx/xxxxxservice:v1.3.0"
Normal Killing 40s (x3 over 2m) kubelet, kube-03 Killing container with id docker://xxxxx-service:Container failed liveness probe.. Container will be killed and recreated.
以相同方式设置就绪探测器时也是如此。
但是,当我停用探针时,服务运行良好。我可以使用/ 以及实际的 webapp 访问 Tomcat 欢迎页面。
因此,我的问题是:我应该如何为 Tomcat webapp 正确设置 Kubernetes liveness/readiness 探针?为什么简单的HTTP GET 方法会失败?
相关问题似乎是由于启动时间比initialDelaySeconds 参数中设置的时间长(例如this),正如错误消息所示。但是,在这种情况下,Tomcat 和 webapp 确实可以在几秒钟后访问,因此启动时间不是这里的问题。
以下是部署规范:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: xxxxx-service
namespace: xxxxx
spec:
replicas: 1
template:
metadata:
labels:
app: xxxxx-service
spec:
imagePullSecrets:
- name: regsecret
containers:
- image: xxxxxservice:v1.3.0
imagePullPolicy: Always
name: xxxxx-service
ports:
- containerPort: 8080
protocol: TCP
resources:
limits:
cpu: "0.2"
memory: 4Gi
【问题讨论】:
-
您能说出您的 Tomcat 应用程序的
ContainerPort值吗? -
@AntonKostenko 我已经添加了完整的部署规范。端口为 8080(Tomcat 默认)。
标签: tomcat kubernetes