Spring boot 使Springboot应用程序Pod自动删除
我试图在Kubernetese上部署Springboot应用程序,我不希望Pod无休止地运行。一旦进程完成,我希望pod能够自行终止。现在,由于某些业务逻辑,我们在Springboot应用程序中使用Spring boot 使Springboot应用程序Pod自动删除,spring-boot,kubectl,kubernetes-pod,Spring Boot,Kubectl,Kubernetes Pod,我试图在Kubernetese上部署Springboot应用程序,我不希望Pod无休止地运行。一旦进程完成,我希望pod能够自行终止。现在,由于某些业务逻辑,我们在Springboot应用程序中使用@Scheduled(FixedRateString…每隔45分钟生成一个令牌,这意味着该过程将继续运行。为了确保进程终止,我们在应用程序结束时使用System.exit(0) 我使用下面的deployment.yml文件部署了代码。一旦进程终止,我会看到新的Pod再次启动,如何确保进程完成后它会自动
@Scheduled(FixedRateString…
每隔45分钟生成一个令牌,这意味着该过程将继续运行。为了确保进程终止,我们在应用程序结束时使用System.exit(0)
我使用下面的deployment.yml文件部署了代码。一旦进程终止,我会看到新的Pod再次启动,如何确保进程完成后它会自动终止/删除
部署.yml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
tier: pred-d
app: test-prov-img
name: test-prov-img
spec:
selector:
matchLabels:
app: test-prov-img
replicas: 1
template:
metadata:
labels:
app: test-prov-img
spec:
containers:
- image: docker.repo1.com/apps/test-prov-img:1.2
imagePullPolicy: Always
name: test-prov-img
ports:
- containerPort: 8080
name: service
protocol: TCP
envFrom:
- configMapRef:
name: configmap
resources:
limits:
cpu: 1
memory: 1.25Gi
requests:
cpu: 0.1
memory: 0.25Gi
请建议我必须在deployment.yml中进行哪些更改,以使Pod自动终止/删除。使用
@Scheduled
注释的方法旨在重复。与其安排一些事情,不如让应用程序做它需要做的任何事情,然后完成。一个选项是添加一个执行当前由@Scheduled
方法完成的工作的CommandLineRunner
实现
@组件
公共类TaskPerformer实现CommandLineRunner{
@凌驾
//@Scheduled(fixedRateString=…)我们不再需要这个了
公共无效运行(字符串…参数){
//TODO:在此处生成令牌
}
}
然后,您可以将应用程序转换为一个可指示每45分钟运行一次的文件。然后,
CronJob
将按时启动,运行生成令牌的应用程序,然后自行关闭。除了运行@Scheduled
方法之外,您的pod还做了其他事情吗?是的,有整个业务逻辑,从数据库获取记录,使用令牌调用API将记录更新到表中..我对它的实际用途有点困惑。它是否在45分钟内完成了尽可能多的工作,然后就死了,不管它是否真正完成了工作?我们使用的API使用一个令牌,这个令牌的自我寿命为45分钟。。因此,如果处理时间超过45分钟,我们需要生成一个新的令牌以继续处理。感谢您的回复!!请在评论中查看我的回复。我们计划使用CronJob来安排这个完整的应用程序,因为整个应用程序需要每天在特定时间运行。而且,一旦运行,它需要使用API+令牌处理记录(等待45分钟,45分钟后生成新记录)。。所以我不确定cronjob是否适用于令牌..好的-不要在您的体系结构上选择太多,但是在整个任务完成之前发布新令牌不是更有意义吗?如果您正在使用某种OAuth2.0令牌颁发者,那么Spring Boot有一个非常好的项目,您可以将它插入到您的项目中。然后,它将根据令牌的exp
声明为您生成令牌。在任何情况下,我不知道您可以对部署
清单做什么来在45分钟后杀死应用程序,而不使用CronJob
。如果不能从应用程序外部执行,则需要从应用程序内部执行。我想到的唯一选项是像以前那样执行,或者在开始从正在调用的API接收HTTP 401时终止应用程序(请记住事务管理)。