自定义对象的大负载

时间:2018-09-04 08:22:26

标签: kubernetes openshift custom-object kubernetes-custom-resources

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

CR通常用于与Kubernetes中的垃圾收集/引用计数接口。

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

BarChart barChart = new BarChart();

BarData barData = new BarData(barDataSet);

//set the appropriate properties of object **barData**
//then set the data property of the chart
barChart.setData(barData);
.
.
.
.
 //add border to chart bars
    for (IBarDataSet set : barChart.getData().getDataSets())
        ((BarDataSet) set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f);
.
.
.
//set up other properties as well

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

目前尚不清楚如何将这种概念整合到Kubernetes的生命周期中。

2 个答案:

答案 0 :(得分:3)

通常,由于etcd的限制,任何Kube API对象的大小限制约为1M,但是在一个对象中放置20-30k以上是一个坏主意,并且访问起来会很昂贵(而垃圾回收会很昂贵,因为好)。

我建议将数据存储在对象存储桶中,并使用诸如https://github.com/brancz/kube-rbac-proxy之类的RBAC代理来限制对存储桶内容的访问(使用指向代理的URL作为对象的引用)。这为您提供了在api中跟踪数据的所有好处,但使对象尺寸较小。如果您想进行更复杂的集成,则可以实现一个聚合的API,并重用核心的Kubernetes库来处理您的API,并将数据存储在对象存储中。

答案 1 :(得分:1)

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