【问题标题】:Does stellar core deployment on k8s needs persistent storage?k8s 上的 stellar core 部署需要持久化存储吗?
【发布时间】:2019-06-25 20:18:45
【问题描述】:
我想通过 CATCHUP COMPLETE 在 k8s 上部署 stellar core。我正在使用这个 docker 镜像satoshipay/stellar-core
在 docker image docs 中提到 /data 用于存储有关 DB 的一些信息。而且我已经看到 helm 模板正在使用持久卷并将其安装在 /data 中。
我想知道如果我使用部署而不是状态集并重新启动 pod、更新它的 docker 版本或删除它会发生什么?它会再次初始化数据库吗?
恒星核心是否还需要额外的存储空间来进行追赶?
【问题讨论】:
标签:
kubernetes
kubernetes-helm
stellar
【解决方案1】:
Statefulset 与部署
StatefulSet“提供有关这些 Pod 的顺序和唯一性的保证”。
如果您的应用程序需要按特定顺序启动,请使用statefulset。
存储
绝对利用数据库的持久卷。来自K8S Docs
容器中的磁盘文件是短暂的
由于您似乎正在部署某种区块链应用程序,这可能会导致启动严重延迟
【解决方案2】:
在 Deployment 中,您指定一个由所有 pod 副本共享的 PersistentVolumeClaim。换句话说,共享卷。
如果您有多个副本 pod,则后备存储显然必须具有 ReadWriteMany 或 ReadOnlyMany 访问模式。
StatefulSet 您指定一个 volumeClaimTemplates,以便每个副本 pod 获得一个与之关联的唯一 PersistentVolumeClaim。
换句话说,没有共享卷。
StatefulSet 对于在集群中运行事物很有用,例如 Hadoop 集群、MySQL 集群,其中每个节点都有自己的存储。
因此,在您的情况下,拥有更多隔离(无共享卷)最好使用基于 statefulset 的解决方案。
如果您使用基于部署的解决方案(重新启动 pod、更新其 docker 版本或删除它),您的数据库将再次初始化。
关于追赶:
一般来说,不建议在 docker 容器中运行CATCHUP_COMPLETE=true,因为默认情况下它们的资源有限(如果你真的想这样做,请确保让它们访问更多资源:CPU、内存和磁盘空间)。