我的 kubernetes pod 因临时存储问题而被驱逐

Anv*_*eda 8 logrotate kubernetes ephemeral-storage

我正在运行一个包含 8 个工作节点和 3 个主节点的 k8 集群。我的 Pod 因临时存储问题而不断被驱逐。以下是我在 Evicted pod 上遇到的错误:

Message:        The node was low on resource: ephemeral-storage. Container xpaas-logger was using 30108Ki, which exceeds its request of 0. Container wso2am-gateway-am was using 406468Ki, which exceeds its request of 0.
Run Code Online (Sandbox Code Playgroud)

为了克服上述错误,我向我的命名空间添加了临时存储限制和请求。

apiVersion: v1
kind: LimitRange
metadata:
  name: ephemeral-storage-limit-range
spec:
  limits:
  - default:
      ephemeral-storage: 2Gi
    defaultRequest:
      ephemeral-storage: 130Mi
    type: Container
Run Code Online (Sandbox Code Playgroud)

即使在将上述限制和请求添加到我的命名空间之后,我的 pod 仍达到其限制,然后被驱逐。

Message:        Pod ephemeral local storage usage exceeds the total limit of containers 2Gi.
Run Code Online (Sandbox Code Playgroud)

如何监控我的临时存储,它存储在我的实例上的什么位置?如何根据大小将 docker logrotate 设置为我的临时存储?有什么建议么?

Dav*_*aze 6

这里的“临时存储”是指容器文件系统中使用的不在卷中的空间。您的进程内部的某些内容正在使用大量本地磁盘空间。抽象而言,这相对容易调试:使用kubectl execpod 中的 shell,然后使用普通的 Unix 命令,例如du查找空间的去向。由于它是 Pod 内部的空间,因此无法从节点直接访问它,并且您可能无法使用类似的工具logrotate来尝试管理它。

我过去遇到过的一个具体原因是配置为记录到文件的进程。在 Kubernetes 中,您通常应该将日志记录设置设置为记录到 stdout。这避免了这种特定的临时存储问题,而且还避免了实际将日志文件从 Pod 中取出的许多实际问题。 kubectl logs将向您显示这些日志,您可以设置集群级工具将它们导出到另一个系统。