存储
OpenSearchCluster 的每个节点池都将其数据存储在每个 pod 对应的 PersistentVolumeClaim (PVC) 中。组成新集群的 bootstrap pod 也有自己的 PVC。本页面介绍如何为这两者选择存储。
节点池持久化
在 spec.nodePools[].persistence.pvc 下为每个节点池配置持久化,并在 spec.nodePools[].diskSize 下配置卷大小:
如果完全省略 persistence,节点池将从集群的默认 StorageClass 获取 ReadWriteOnce PVC。如果设置了 persistence.pvc,operator 将按给定值使用其 accessModes,因此请始终包含这些值。
每个 pod 都会获得自己的 PVC,名称为 data-<cluster-name>-<component>-<index>。
不同的节点池可以使用不同的存储类,例如,数据节点使用快速本地磁盘,专用集群管理器节点使用网络存储。
卷所有权
E1 不会以 root 身份运行 init 容器来更改数据目录的所有者。相反,OpenSearch pod 默认会获得一个 fsGroup,其值为 1000,Kubernetes 会使卷对该组可写。对于以 root 所有者身份挂载的卷(例如 Ceph RBD),此方式有效。如果你自行设置 spec.general.podSecurityContext.fsGroup,则会使用你提供的值。
示例:Ceph RBD
对必须在节点丢失后仍然保留的数据使用 Ceph RBD 块 StorageClass。将 <ceph-rbd-class> 替换为平台上 Ceph RBD StorageClass 的名称:
使用 ReadWriteOnce。每个 OpenSearch 节点都需要自己的卷;OpenSearch 会自行在节点之间复制数据。
示例:TopoLVM
TopoLVM 在节点的本地磁盘上提供卷。将 <topolvm-class> 替换为平台上 TopoLVM StorageClass 的名称:
本地卷会将其 pod 绑定到创建该卷的节点。如果该节点发生故障,在删除该卷之前,pod 无法在其他位置启动。请确保每个索引至少有一个副本(number_of_replicas 为 1 或更大),并使用 spec.nodePools[].affinity 等方式将节点池中的 pod 分布到不同节点上,以便在一个节点丢失时集群仍保留所有数据。
引导 pod 存储
创建集群时,operator 会启动一个临时引导 pod 来组成集群。该 pod 将数据存储在名为 <cluster-name>-bootstrap-data 的 PVC 中。operator 会在创建集群时创建此 PVC,并在集群组成后将其与引导 pod 一起删除。
如果未设置 spec.bootstrap.storageClass,引导 PVC 将按以下顺序使用:
- 第一个设置了
persistence.pvc.storageClass的节点池的存储类,且该节点池具有cluster_manager(或master)角色; - 否则,使用第一个设置了存储类的节点池的存储类;
- 否则,使用集群的默认 StorageClass。
在大多数情况下,无需设置 spec.bootstrap.storageClass。当集群管理器池使用的类不适合引导 pod 时,请设置此项。
扩展节点池的卷
要增加节点池的磁盘大小,请增大其 diskSize 并应用更改。operator 会调整该节点池的 PVC 大小。要求:
- StorageClass 必须具有
allowVolumeExpansion: true。 - 只能增大容量。Kubernetes 不会缩小 PVC。
- 使用与当前值相同的单位(例如
Gi)。 - 扩展前请备份数据,并避免同时对集群进行其他更改。
无法更改的内容
- 现有节点池的存储类。 operator 的准入 webhook 会拒绝更改现有节点池的
persistence.pvc.storageClass,因为 StatefulSet 卷的存储类无法更改。若要使用其他存储类,请使用该存储类创建新集群,并将数据迁移到新集群,例如使用快照和恢复。 - 现有 PVC 的访问模式。 Kubernetes 不允许更改。
删除集群后的 PVC
默认情况下,删除 OpenSearchCluster 时,不会删除集群节点池的数据 PVC。如果之后在同一命名空间中创建同名集群,新 pod 会重新使用这些 PVC,节点会根据磁盘上的数据重新组成之前的集群;此时不会启动引导 pod。
若要删除数据,请在删除集群后删除 PVC:
可以通过 spec.general.persistentVolumeClaimRetentionPolicy 更改此行为,该参数会传递给节点池的 StatefulSet(请参阅 Kubernetes 文档中关于 StatefulSet PVC 保留的说明)。
OpenSearch® 是 LF Projects, LLC 的注册商标。