我有一个spring-boot应用程序,它从rabbitmq.我在k8s上部署了这个应用程序,并创建了keda文件来扩展它,如果队列的大小通过x条消息,它工作正常,我创建了新的pod,但现在我想在缩减部分制定一个规则,我想确保在缩减之前没有用户使用该pod,这样我就不会干扰我在谷歌和聊天平台上搜索的任何活动。我发现了一些类似prestop和readnessProbe的东西,谁知道如何做到这一点,我会寻求一种帮助:)
我假设您的应用程序从接收请求到完成请求需要45秒的时间来处理请求。
在这种情况下,我会使用terminationGracePeriodSeconds
,默认情况下是30s
,但您可以将其扩展为任何值。
幕后发生的事情是,当KEDA
将开始缩小,并且您的pod将处于Terminating
状态时,它将立即从service
端点中删除,并且不会接收到新的请求(如果该pod存在service
)。然后它会发送SIGTERM
信号,等待进程完成它的工作(请确保您的应用程序正确处理SIGTERM
)。处理完当前请求后,pod应在terminationGracePeriodSeconds
定义的时间之前终止。如果处理请求的时间超过terminationGracePeriodSeconds
,它将在不等待的情况下杀死pod,消息应该返回队列。
因此,如果处理请求正在进行,例如120s
样本清单应该看起来像这个
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
terminationGracePeriodSeconds: 130