自定义对象的大负载

Large payload for Custom Objects

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

CR 主要用于连接 Kubernetes 中的垃圾 collection/reference 计数。

不过,通过 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 生命周期中。

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

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

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