9

在 Kubernetes 中,是否可以在 Statefulset 中添加 hostPath 存储。如果是这样,有人可以帮我举个例子。

4

2 回答 2

10

是的,但这绝对是出于测试目的。

首先,您需要根据需要创建尽可能多的持久卷

kind: PersistentVolume
apiVersion: v1
metadata:
  name: hp-pv-001
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/tmp/data01"

kind: PersistentVolume
apiVersion: v1
metadata:
  name: hp-pv-002
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/tmp/data02"
...

然后,将此 VolumeClaimsTemplate 添加到您的 Statefulset

volumeClaimTemplates:
- metadata:
    name: my-hostpath-volume
  spec:
    storageClassName: manual
    accessModes: ["ReadWriteOnce"]
    resources:
      requests:
        storage: 5Gi
    selector:
      matchLabels:
        type: local

另一种解决方案是使用hostpath 动态配置器。您不必提前创建 PV bin,但这仍然是一个“概念验证解决方案”,您必须在集群中构建和部署配置器。

于 2018-01-08T12:37:48.707 回答
1

hostPath 卷StatefulSet只能用于单节点集群,例如用于开发。重新安排 pod 将不起作用。

相反,请考虑将本地持久卷用于此类用例。

最大的区别是 Kubernetes 调度器了解本地持久卷属于哪个节点。使用 HostPath 卷,引用 HostPath 卷的 pod 可能会被调度程序移动到不同的节点,从而导致数据丢失。但是使用本地持久卷,Kubernetes 调度程序确保使用本地持久卷的 pod 始终被调度到同一个节点。

考虑为此使用本地静态配置器,入门指南提供了有关如何在不同环境中使用它的说明。

于 2020-10-18T12:46:50.977 回答