【问题标题】:Kubernetes object size limitationsKubernetes 对象大小限制
【发布时间】:2021-08-10 03:35:30
【问题描述】:

我正在处理 CRD 并创建自定义资源。我需要在自定义资源中保留有关我的应用程序的大量信息。根据官方文档,etcd 可处理高达 1.5MB 的请求。我遇到了类似的错误

"error": "请求实体太大:限制为 3145728"

我相信错误中指定的限制是 3MB。有什么想法吗?有什么办法可以解决这个问题?

【问题讨论】:

  • Argo 解决该问题的方法是对存储的实体使用压缩,但真正的问题是您是否必须一次拥有所有 3MB 的数据,或者如果它只是对您更方便,并且它们可以分解成具有彼此关系的单独对象。 kubernetes API 不是 blob 存储,不应被视为一个

标签: kubernetes google-kubernetes-engine etcd


【解决方案1】:
  • "error": "Request entity too large: limit is 3145728" 可能是 kubernetes 处理程序对大于 3MB 的对象的默认响应,如源代码的here at L305 所示:
expectedMsgFor1MB := `etcdserver: request is too large`
expectedMsgFor2MB := `rpc error: code = ResourceExhausted desc = trying to send message larger than max`
expectedMsgFor3MB := `Request entity too large: limit is 3145728`
expectedMsgForLargeAnnotation := `metadata.annotations: Too long: must have at most 262144 bytes`
  • ETCD 确实有 1.5MB 的文件处理限制,您会在 ETCD Documentation 上找到尝试使用--max-request-bytes 标志的建议,但它对 GKE 集群没有影响,因为您不这样做'在主节点上没有这样的权限。

  • 但即使你这样做了,它也不理想,因为通常这个错误意味着你是consuming the objects 而不是引用它们,这会降低你的性能。

我强烈建议您考虑以下选项:

  • 确定您的对象是否包含未使用的引用;
  • 分解您的资源;
  • 改为考虑安装卷;

有一个new API Resource: File (orBinaryData) 的请求可能适用于您的案例。很新鲜,但值得关注。

如果您仍然需要帮助,请告诉我。

【讨论】:

  • 谢谢。是的,设置 --max-request-byte 并不是一个好主意,而且 k8s 集群不在我的控制范围内,所以这个选项对我来说几乎是不可能的。我正在分解结构。
  • @Yudi 如果我的回答对您有用,请考虑支持/接受。谢谢,祝你好运!
【解决方案2】:

当我将一些大文件放在我的 Helm 图表目录中时,这发生在我身上。删除这些文件帮助我解决了我的问题。

【讨论】:

    【解决方案3】:

    如果您使用的是 HELM,请检查您是否有像日志文件这样的大文件。添加.helmignore

    .DS_Store
    # Common VCS dirs
    .gitignore
    .bzr/
    .bzrignore
    .hg/
    .hgignore
    .svn/
    # Common backup files
    *.swp
    *.bak
    *.tmp
    *~
    # Various IDEs
    .project
    .idea/
    *.tmproj
    .vscode/
    
    *.log
    

    【讨论】:

      猜你喜欢
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 2023-01-11
      • 1970-01-01
      • 2012-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多