回答问题

我有一个 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 将立即被删除。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐