我有一个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
有没有办法做到这一点?
答案 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
,创建的作业及其匹配的窗格将立即删除。