在状态为“已完成”之后,是否可以通过YAML自动删除Pod?

时间:2019-06-04 22:06:24

标签: kubernetes yaml

我有一个YAML文件,该文件会在执行时创建一个pod。此pod从我们的内部系统之一提取数据,然后上传到GCP。完成此过程大约需要12分钟,之后该窗格的状态将更改为“已完成”,但是我想在此窗格完成后将其删除。

apiVersion: v1
kind: Pod
metadata:
  name: xyz
spec:
  restartPolicy: Never
  volumes:
  - name: mount-dir
    hostPath:
      path: /data_in/datos/abc/
  initContainers:
   - name: abc-ext2k8s
     image: registrysecaas.azurecr.io/secaas/oracle-client11c:11.2.0.4-latest
     volumeMounts:
     - mountPath: /media
       name: mount-dir
     command: ["/bin/sh","-c"] 
     args: ["sqlplus -s CLOUDERA/MYY4nGJKsf@hal5:1531/dbmk @/media/ext_hal5_lk_org_localfisico.sql"]
  imagePullSecrets:
   - name: regcred

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

通常,您不想创建裸Kubernetes吊舱。您所描述的在Pod中运行某些中等长度任务然后退出的模式与Job相匹配。 (在其他属性中,如果作业所在的节点发生故障,则作业将重新安排Pod的时间。)

不过,仅将其切换到Job并不能直接解决您的问题。 The documentation notes

  

作业完成时,不会再创建其他Pod,但是Pod也不会被删除。将它们保持在周围使您仍然可以查看已完成的容器的日志,以检查是否有错误,警告或其他诊断输出。作业对象在完成后也将保留下来,以便您查看其状态。用户可以根据自己的状态删除旧作业。

因此,无论创建了Pod(或作业)的任务是什么,都需要监视它的完成情况,然后删除Pod(或作业)。 (考虑使用watch API或等效的kubectl get -w选项来查看创建的对象何时更改状态。)由于有特定的目的,您可以从中受益,因此无法直接在YAML文件中进行指定。来自完成的广告连播的信息。

如果这实际上是您想在午夜或类似时间执行的每晚任务,那么您还有其他选择。 CronJob将按一定的时间表运行作业,而该时间表又运行一个pod。这里重要的相关细节是CronJobs have an explicit control for how many completed Jobs they keep。因此,如果CronJob与您的模式匹配,则可以在CronJob规范中设置successfulJobsHistoryLimit: 0,创建的作业及其匹配的窗格将立即删除。