首页 > 解决方案 > Kubernetes CRD 中状态的最大大小?

问题描述

Kubernetes 中的 Kubernetes 规范和状态大小是否有限制?

我有一个用例,其中运算符规范是一个正则表达式,而正则表达式被扩展到许多我必须存储其状态的实际项目。

例子:

type RedshiftSinkSpec struct {
    TopicRegexes string `json:"topicRegexes"`
}

type Topic string

type RedshiftSinkStatus struct {
    // +optional
    CurrentMaskStatus map[Topic]MaskStatus `json:"currentMaskStatus,omitempty"`

    // +optional
    DesiredMaskStatus map[Topic]MaskStatus `json:"desiredMaskStatus,omitempty"`
}

因为主题的数量是根据正则表达式计算的。我不知道其他人的数据结构可以增长到多大。所以想在某种程度上限制它。因此需要 Kubernetes 允许的最大限制方面的帮助。

此外,有必要这样来节省 Redshift 连接的数量。不能真正将问题分解为一个主题的另一个 crd。

请建议。

标签: kubernetesdesign-patternskubernetes-custom-resourceskubernetes-operator

解决方案


引用评论中的答案。

Kubernetes 将集群数据存储在 etcd 中。默认情况下,etcd 将最大数据条目大小限制为 1.5 兆字节。——黄钦

ETCD 文档:请求大小限制

etcd 旨在处理元数据典型的小键值对。较大的请求会起作用,但可能会增加其他请求的延迟。默认情况下,任何请求的最大大小为 1.5 MiB。此限制可通过 etcd 服务器的 --max-request-bytes 标志进行配置。

Kubernetes 没有单独对 Status 和 Spec 大小设置任何限制,但限制是对整体对象大小的限制,因为限制来自 etcd 存储。它可以使用--max-request-bytes. 当数据量很大时,最好使用 Config Maps 来存储状态,并在状态中保存指针或整体摘要。


推荐阅读