Java 当Kubernetes缩放时,Spring Boot应用程序崩溃
我有一个Spring Boot应用程序,运行时启用了Spring执行器。我使用Spring执行器健康端点作为准备就绪和活动性检查。使用一个副本,所有这些都可以正常工作。当我扩展到2个副本时,两个吊舱都崩溃了。它们都未通过就绪性检查,并最终进入无休止的销毁/重新创建循环。如果我将它们缩回1个副本,集群将恢复,Spring Boot应用程序将可用。你知道是什么导致了这个问题吗 以下是部署配置(Spring Boot应用程序的上下文根为/dept):Java 当Kubernetes缩放时,Spring Boot应用程序崩溃,java,docker,spring-boot,kubernetes,Java,Docker,Spring Boot,Kubernetes,我有一个Spring Boot应用程序,运行时启用了Spring执行器。我使用Spring执行器健康端点作为准备就绪和活动性检查。使用一个副本,所有这些都可以正常工作。当我扩展到2个副本时,两个吊舱都崩溃了。它们都未通过就绪性检查,并最终进入无休止的销毁/重新创建循环。如果我将它们缩回1个副本,集群将恢复,Spring Boot应用程序将可用。你知道是什么导致了这个问题吗 以下是部署配置(Spring Boot应用程序的上下文根为/dept): curl命令挂起。整个minikube服务器似乎挂
curl命令挂起。整个minikube服务器似乎挂起,仪表板停止响应
因此,在这种情况下,我猜虚拟机backing
minikube
的大小太小,无法处理它内部部署的所有项目。我没有玩minikube是为了知道它从libmachine基础中继承了多少,但是在docker machine
的情况下,可以提供--virtualbox memory=4096
(或者设置一个环境变量env virtualbox\u memory\u SIZE=4096 docker machine…
)。当然,我们应该使用与minikube使用的驱动程序相对应的内存设置(例如,HyperKit、xhyve、HyperV等等)。这是在minikube中运行的,以防出现问题。当您curl
时,/dept/exactor/health
端点(您应该能够通过kubectl exec
,因为他们至少能活50秒),非200响应伴随的错误文本是什么?curl命令挂起。整个minikube服务器似乎挂起,仪表板退出响应。我确实在仪表板上看到了这一点:就绪探测失败:Get:拨号tcp 172.17.0.2:8080:getsockopt:连接被拒绝其他Spring引导吊舱开始失败其基于执行器的健康检查k也是。仪表板上的消息稍有不同:就绪探测失败:Get 172.17.0.10:8080/list/actuator/health:net/http:request Cancelled(等待标头时超过Client.Timeout)我想知道是否需要增加运行状况检查超时时间…这很奇怪,仪表板会锁定,直到我将此部署从2扩展到1。一旦我发出:kubectl scale deployment gl dept dept deployment--replicas=1,仪表板会立即开始响应。同时扩展我的web服务器(Apache)似乎没有这种效果,它只是Spring Boot应用程序。另外,这个问题就是为什么在PodSpec的容器中包含资源:限制:内存:
,
是一个非常好的主意——不仅对于minikube,对于集群也是如此,因为kubernetes无法在不知情的情况下做出智能调度决策ng每个运动部件有多大?这是分配给minikube HyperV虚拟机的内存。分配6gb而不是2gb给虚拟机似乎已经解决了问题。
apiVersion: apps/v1
kind: Deployment
metadata:
name: gl-dept-deployment
labels:
app: gl-dept
spec:
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
selector:
matchLabels:
app: gl-dept
template:
metadata:
labels:
app: gl-dept
spec:
containers:
- name: gl-dept
image: zmad5306/gl-dept:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
livenessProbe:
httpGet:
path: /dept/actuator/health
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
timeoutSeconds: 10
successThreshold: 1
failureThreshold: 5
readinessProbe:
httpGet:
path: /dept/actuator/health
port: 8080
initialDelaySeconds: 15
periodSeconds: 10
timeoutSeconds: 10
successThreshold: 1
failureThreshold: 5