spring-boot - 使Springboot应用程序Pod自动删除
问题描述
我正在尝试在 Kubernetese 上部署 Springboot 应用程序,我不希望 Pod 无休止地运行。一旦进程完成,我希望 pod 自行终止。现在,由于某些业务逻辑,我们在 Springboot 应用程序中每隔 45 分钟生成一次令牌@Scheduled(FixedRateString...)
,这意味着该进程将继续运行。为了确保我们的进程被终止,我们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
旨在重复。与其安排一些事情,不如让应用程序做它需要做的任何事情,然后完成。一种选择是添加一个CommandLineRunner
实现,该实现执行该@Scheduled
方法当前正在完成的工作。
@Component
public class TaskPerformer implements CommandLineRunner {
@Override
// @Scheduled(fixedRateString = ...) We no longer need this
public void run(String... args) {
// TODO: Generate token here
}
}
然后,您可以将您的应用程序转换为Kubernetes CronJob,您可以指示它每 45 分钟运行一次。然后它将按时启动,CronJob
运行生成令牌的应用程序,然后自行关闭。
推荐阅读
- ios - 裁剪为形状的 SwiftUI 图像在上下文菜单中具有透明填充
- go - 类型定义 - 即使基本类型是自定义类型的来源,也不能将基本类型用作自定义类型
- python - ValueError:无法将 NumPy 数组转换为张量(不支持的对象类型浮点数)
- php - 分解源自 CURL 响应的数组
- git - 无法通过使用 push {remote} {src branch}:{dst branch} 更新分支中的拉取请求文件
- r - 将矩阵转换为R中的对称矩阵
- r - R-MICE 错误估算超过 50 个类别的无序变量
- python - 将 Pandas to_json 数据添加到现有 JSON
- flutter - Flutter 异常:使用 Navigator 时出现“上下文不是 BuildContext 的子类型”错误
- javascript - 如何导出 Reflect.defineProperty()?