【问题标题】:Can you auto destroy a kubernetes pod deployment?您可以自动销毁 Kubernetes pod 部署吗?
【发布时间】:2018-10-05 15:54:16
【问题描述】:

我可以使用 kubectl cli 删除部署,但是有没有办法让我的部署在完成后自动销毁?对于我的情况,我们正在 AWS EKS 上的 Docker 容器中启动一个长时间运行的进程。当我检查状态时,它是“正在运行”,然后一段时间后状态是“完成”。那么有什么方法可以让 kubernetes pod 在完成后自动销毁?

kubectl run some_deployment_name --image=path_to_image
kubectl get pods
  //the above command returns...
some_deployment_name1212-75bfdbb99b-vt622 0/1  Running 2  23s
  //and then some time later...
some_deployment_name1212-75bfdbb99b-vt622 0/1  Completed 2  15m

一旦完成,我希望它被销毁,而不必调用另一个命令。

【问题讨论】:

  • 几个问题,因为我对 Kubernetes 很陌生。我们可以在这个用例中使用作业吗?我们可以有一个 cronjob(比如每 2 小时运行一次)来清理已完成的 pod。这会有帮助吗?

标签: kubernetes kubectl amazon-eks


【解决方案1】:

所以问题是关于运行作业而不是像 Kubernetes Deployments 抽象中那样创建 ReplicaSet 但更像 Kubernetes Jobs 的部署

当您指定 --restart=OnFailure 选项时,将使用 kubectl run 创建 Job。除非您使用 kubectl delete <pod-name> 手动删除这些作业,否则集群不会清理这些作业。更多信息here

如果您使用的是 Kubernetes 1.12 或更高版本,则引入了新的作业规范:ttlSecondsAfterFinished。你也可以用它来清理你的工作。另一个更耗时的选择是编写自己的 Kubernetes 控制器来清理常规作业。

如果同时指定 --restart=OnFailure 和 `--schedule="" 选项,则会创建 CronJob。这些 pod 会自动删除,因为它们会定期运行。

更多关于kubectl runhere的信息。

【讨论】:

  • 所以答案是肯定的,在 1.12 之后使用 ttlSecondsAfterFinished 选项。由于 EKS 目前是 1.10,因此我将在开始新的“运行”之前删除“已完成”的 pod。
  • EKS 现在是 1.11,所以我们仍然不能有好的东西。手动收割工作很烦人:(
猜你喜欢
  • 1970-01-01
  • 2020-07-20
  • 2020-07-27
  • 2023-04-03
  • 2021-06-18
  • 2019-12-22
  • 2021-09-21
  • 1970-01-01
  • 2021-06-28
相关资源
最近更新 更多