今天早上,我了解到 kubernetes 中所有先前运行的 cronjobs 作业实例的(不幸的)默认情况都保留在集群中。我很抱歉没有阅读文档中的详细信息。我还注意到删除作业( kubectl delete job [<foo> or --all]
)需要相当长的时间。此外,我注意到,即使系统中只有大约 750 个这样的旧作业(加上一些其他事件容器,否则这些旧作业),即使是具有三个大型节点的合理配置的 kubernetes 集群也会失败(尝试使用 kubectl 时会出现各种超时)。没有带来重负载)[更正:还有大约 7000 个与那些旧作业相关的 Pod 也被保留了:-o]。 (我确实了解 the configuration settings 来限制/避免存储来自 cronjobs 的旧作业,所以这对我来说将来不会成为问题。)
因此,由于我找不到有关此问题的 kubernetes 文档,我的(相关)问题是:
- 当 kubernetes 保留旧作业时,到底存储了什么? (大概是相关 Pod 的日志和一些元数据,但这并不能解释为什么它们似乎在集群上放置了这样的负载。)
- 有没有办法查看资源(我认为仅是磁盘,但也许 还有一些其他资源)个人或集体的旧工作 正在使用?
- 为什么删除 Kubernetes 作业需要大约一分钟的时间?
最佳答案
我不知道 k8s 是否提供了有关哪些作业消耗了多少磁盘空间的详细信息,但您可以尝试一下。
尝试查找与作业关联的 Pod:
kubectl get pods --selector=job-name=<job name> --output=jsonpath={.items..metadata.name}
一旦您知道了 Pod,就可以找到与其关联的 docker 容器:
kubectl describe pod <pod name>
在上面的输出中查找 Node
& Container ID
。现在继续该节点并在该节点中转到路径 /var/lib/docker/containers/<container id found above>
您可以在这里进行一些调查以找出问题所在。
关于kubernetes - kubernetes 作业中存储了什么以及如何检查旧作业的资源使用情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43119769/