【问题标题】:Can I store my application data in kubernetes configuration resources?我可以将我的应用程序数据存储在 Kubernetes 配置资源中吗?
【发布时间】:2019-03-05 00:42:56
【问题描述】:

我正在尝试为我的应用程序查找数据库(对象存储)。该应用程序实际上是 ISTIO 网络路由 API 的包装器。基本上简化了我的网络的 ISTIO 配置。 Kubernetes (k8s) 自定义资源定义 (CRD) 似乎符合我的要求。也喜欢 CRD 提供的 watch 和 REST API 功能。

数据库要求

  • 只有 100 MB 的数据 - 最坏的情况
  • 能够观察物体
  • 对象的 REST API 支持
  • 坚持
  • 大约 2k 写入/秒和类似/更多读取/秒。虽然我确实让我的应用程序充当 CRD 的代理,在其中可以缓存内容。

为什么使用 CRD 是好主意还是坏主意?使用 CRD 是否有任何性能影响。 This 2016 stackflow answer 建议 etcd 数据不在 RAM 中。而 etcd 链接表明 etcd 可以做10k writes/sec(所以即使事情不在 RAM 中而纯粹在磁盘中,谁在乎)。

我看到多个应用程序使用 k8s CRD。

  • Helm 使用 CRD 存储版本
  • Istio 使用 CRD 存储其网络路由 API 对象

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    考虑到 (CRD page)

    • 资源是 Kubernetes API 中的一个端点,用于存储某种 API 对象的集合。例如,内置的 pods 资源包含 Pod 对象的集合。

    • 自定义资源是 Kubernetes API 的扩展,不一定在每个 Kubernetes 集群上都可用。换句话说,它代表了对特定 Kubernetes 安装的定制。

    A CRD 是用于扩展 Kubernetes 本身,而不是用于应用程序数据。

    helm-crd/examples/mariadb.yaml 是关于轻量级元数据的,它将使 Kubernetes 能够下载正确的版本并通过 Helm 安装它。

    它不是为随机应用程序存储数据,该应用程序可能存在 Kubernetes(与 Helm 版本相反,它仅在 Kubernetes 部署场景中才有意义)

    同样,Istio CRD 仅在 Kubernetes 上下文中才有意义:

    Kubernetes 目前在自定义资源定义 (CRD) 上实现了 Istio 配置。这些 CRD 对应命名空间范围和集群范围 CRD,并通过 Kubernetes RBAC 自动继承访问保护。

    这种方法(使用 etcd 存储任何应用程序数据)无法扩展。

    【讨论】:

    • 除非您的应用程序数据直接帮助 Kubernetes 管理其资源,否则它将更好地保存在您选择的专用外部数据库(mysql、postgresql、...)中
    • 感谢您的回答。该应用程序实际上只是 ISTIO CRD 的包装器……但有一些特定于应用程序的元数据……我将用相同的方式更新问题。
    • 不缩放是什么意思...我没有看到超过几百 MB 的数据。
    • @JayRajput 我的意思更多是对“将数据存储为 CRD”的一般性评论。如果您的数据与 Kubernetes 管理相关联(如 Istio CRD),那么可以。
    猜你喜欢
    • 2015-06-04
    • 2021-05-07
    • 1970-01-01
    • 2012-10-10
    • 2017-04-29
    • 2011-07-13
    • 2015-07-16
    • 2015-06-01
    • 2014-10-18
    相关资源
    最近更新 更多