Spring boot 使Springboot应用程序Pod自动删除

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再次启动,如何确保进程完成后它会自动

我试图在Kubernetese上部署Springboot应用程序,我不希望Pod无休止地运行。一旦进程完成,我希望pod能够自行终止。现在,由于某些业务逻辑,我们在Springboot应用程序中使用
@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时终止应用程序(请记住事务管理)。