有没有办法在 Pod 状态为“Completed”后通过 YAML 自动删除它们?
回答问题 我有一个 YAML 文件,它在执行时创建一个 pod。这个 pod 从我们的一个内部系统中提取数据并上传到 GCP。这样做大约需要 12 分钟,然后 pod 的状态变为“已完成”,但是我想在它完成后删除这个 pod。 apiVersion: v1 kind: Pod metadata: name: xyz spec: restartPolicy: Never volumes: - nam
回答问题
我有一个 YAML 文件,它在执行时创建一个 pod。这个 pod 从我们的一个内部系统中提取数据并上传到 GCP。这样做大约需要 12 分钟,然后 pod 的状态变为“已完成”,但是我想在它完成后删除这个 pod。
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
有没有办法做到这一点?
Answers
通常,您不想创建裸 Kubernetes pod。您描述的在 pod 中运行一些中等长度的任务,然后让它退出的模式与Job匹配。 (在其他属性中,如果作业所在的节点发生故障,作业将重新安排 pod。)
不过,仅将其切换为 Job 并不能直接解决您的问题。文档说明:
Job 完成后,不会再创建 Pod,但也不会删除 Pod。保留它们允许您仍然查看已完成 pod 的日志以检查错误、警告或其他诊断输出。作业对象在完成后也会保留,以便您查看其状态。用户可以在记录其状态后删除旧作业。
所以任何创建 pod(或作业)的任务都需要监控它的完成,然后删除 pod(或作业)。 (考虑使用监视 API或等效的kubectl get -w
选项来查看创建的对象何时更改状态。)无法在 YAML 文件中直接指定这一点,因为您可以从已完成的文件中获取有用的信息。荚。
如果这实际上是您想在午夜或类似的时间运行的夜间任务,那么您确实还有一个选择。CronJob将按某个计划运行作业,而该作业又运行单个 pod。这里重要的相关细节是CronJobs 可以明确控制他们保留多少已完成的作业。因此,如果 CronJob 与您的模式匹配,您可以在 CronJob 规范中设置successfulJobsHistoryLimit: 0
,创建的作业及其匹配的 pod 将立即被删除。
更多推荐
所有评论(0)