kubernetes apimachinery资源,Quantity原始值应为可递归哈希的公共值,

f87krz0w  于 6个月前  发布在  Kubernetes
关注(0)|答案(3)|浏览(85)

你想添加什么内容?
API Machinery resource.Quantity{}具有表示其代表的资源数量的原始值,这些值通过私有变量表示。由于这些是私有的,而不是公共的,这防止了像https://github.com/mitchellh/hashstructure这样的库使用哈希CRDs的控制器正确识别对数量所做的更改。
为什么需要这个?
在github.com/kubernetes-sigs/karpenter中,我们对CRD进行哈希并使用哈希比较来检测spec-Drift,类似于pods/deployments。我们使用这种方法来处理诸如kubeReserved和systemReserved之类的字段,这些字段会影响bin-packing上的可分配资源。如果用户定义了一个不同的kubeReserved内存值,我们希望能够将其视为哈希/缓存逻辑中的更改,但由于它是私有的,我们只能等待缓存值过期后才能刷新它。
作为解决方法,我们将v1.ResourceList类型的变量更改为map[string]string类型,然后我们需要解析和验证每个键值对作为资源数量,但如果这种工作流程本机支持的话会更好,可以通过使值公开或至少从私有值生成一个面向公众的值来实现这一点。
这些字段是私有的有什么原因吗?这是受支持的功能吗?

v440hwme

v440hwme2#

我认为对对象内部进行哈希处理是不明智的。可能存在与哈希/对象值表达无关的字段,最好将其保留为实现细节。
你现在通过哈希对象字符串表示的做法可能是最好的选择。
/triage accepted
/cc @benluddy

bfrts1fy

bfrts1fy3#

从私有值生成的面向公共的价值

要补充@alexzielenski的建议,对对象的序列化形式进行哈希(例如使用encoding/json)是理想的。它保证了您在控制器中检测到的每个更改都对应于API服务器最终看到的表示对象的更改。

相关问题