2

虽然我可以很好地创建自定义对象,但我想知道应该如何处理对象的大型有效负载(千兆字节)。

CR 主要用于与 Kubernetes 中的垃圾收集/引用计数进行交互。

但是,通过 YAML 添加有效负载不起作用(大型有效负载内存不足):

apiVersion: "data.foo.bar/v1" 
kind: Dump 
metadata:
  name: my-data
  ownerReferences:
    - apiVersion: apps/v1
      kind: Deploy
      name: my-deploy
      uid: d9607a69-f88f-11e7-a518-42010a800195
spec: 
  payload: dfewfawfjr345434hdg4rh4ut34gfgr_and_so_on_...

或许可以将有效负载添加到 PV,然后在 CR 中引用该路径。然后我遇到了问题,如果 CR 最终确定(找不到有关自定义终结器的任何信息),我似乎无法清理有效负载文件。

不清楚如何将这样的概念集成到 Kubernetes 生命周期中。

4

2 回答 2

3

一般来说,由于 etcd 的限制,任何 Kube API 对象的大小限制约为 1M,但是在一个对象中放置超过 20-30k 是一个坏主意,并且访问成本很高(垃圾收集也会很昂贵)。

我建议将数据存储在对象存储桶中,并使用像https://github.com/brancz/kube-rbac-proxy这样的 RBAC 代理来访问存储桶内容(使用代理的 URL 作为您的参考目的)。这为您提供了跟踪 api 中数据的所有好处,但保持对象大小较小。如果您想要更复杂的集成,您可以实现聚合 API 并重用核心 Kubernetes 库来处理您的 API,将数据存储在对象存储中。

于 2018-09-04T17:27:57.430 回答
1

我们仍然使用 CO。此外,我们创建了一个 Kubernetes 控制器,它处理 PV 中的生命周期。对我们来说这很好用,因为控制器可以是 PV 的单一写入者,而实际的服务只需要对 PV 的读取访问权限。结合ownerReference,这可以很好地集成到 Kubernetes 生命周期中。

于 2018-09-10T06:38:16.250 回答