【问题标题】:Kubernetes jobs getting failed with ephemeral-storage issueKubernetes 作业因临时存储问题而失败
【发布时间】:2020-07-18 01:39:30
【问题描述】:

到目前为止,我们的本地 kubernetes 集群运行良好。最近我们看到工作因以下错误而失败。我检查了 Kube 主节点和工作节点上没有空间问题。 “/var/lib”下以及持久卷声明下有大量可用空间。

Version:

Client Version: v1.17.2
Server Version: v1.17.2

Host OS:
Centos 7.7

CNI:
Weave

错误:

节点资源不足:ephemeral-storage.Container main 是 使用 5056Ki,超过了它的请求 0。容器等待正在使用 12Ki,超过了它的要求0。

任何指针都会有所帮助。

谢谢, 计算机科学

【问题讨论】:

  • 我相信您使用 docker 作为容器的 CRI。能否粘贴docker info 命令的输出,我需要检查存储驱动程序和fs 大小。
  • 你在使用EmptyDir吗?因为在没有存储配额的情况下使用该卷的 pod 会填满它。如果您生成大量日志文件,您也可以尝试限制logging driver,它是`最大大小。

标签: kubernetes kubectl


【解决方案1】:

发生这种情况的主要原因是 pod 日志或 emptyDir 使用量正在填满您的临时存储空间。

Docker 采用保守的方法来清理未使用的对象(通常称为“垃圾收集”),例如图像、容器、卷和网络:这些对象通常不会被删除,除非您明确要求 Docker 这样做。这可能会导致 Docker 使用额外的磁盘空间。

您可以使用名为 prune 的 docker 函数。这将清除系统中未使用的对象。如果你想清理多个对象,你可以使用docker system prune。在这里查看更多关于prunning的信息。

还有另一个工具叫做Garbage collector。它是删除的 docker 工具。未使用/废弃/孤立的 blob。在这里查看more

在 Docker 注册表的上下文中,垃圾收集是在清单不再引用 Blob 时从文件系统中删除它们的过程。 Blob 可以包含层和清单。

如果这没有帮助,您可以尝试configure logging driver 并设置其限制:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3",
    "labels": "production_status",
    "env": "os,customer"
  }
}

如果使用了emptyDir,还有另一个选项。使用 emptyDir 您允许 容器将任意数量的存储写入它的节点 fs。您可以通过设置request or limit 设置本地临时存储:

spec:
  containers:
  - name: test
    image: test-image
    resources:
      requests:
        ephemeral-storage: "1Gi"
      limits:
        ephemeral-storage: "1Gi"
  - name: test
    image: test-image2
    resources:
      requests:
        ephemeral-storage: "2Gi"
      limits:
        ephemeral-storage: "2Gi"

您也可以使用docker ps检查容器运行,然后自己检查容器并定位fs。

应该在这个位置找到:

/var/lib/docker/containers/<container-id>/<container-id>-json.log

如果有帮助,请告诉我。

【讨论】:

    猜你喜欢
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-21
    • 2017-03-16
    • 2014-11-21
    相关资源
    最近更新 更多