0

我有一个在 Kubernetes 中部署的开源项目。它有一个 master、data 和 query pod。数据 pod 用于存储数据。不幸的是,当数据 pod 出现故障时,它也会丢失所有存储的数据。所以我想,我必须使用带有 PVC 的 StatefulSet。我开始研究 PVC 样品。假设我创建了一个 PV:

kind: PersistentVolume
metadata:
  name: task-pv-volume1
  labels:
    type: local
spec:
  storageClassName: local
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data1"

然后我有一个 Claim 和一个 POD 来绑定它。这是示例状态集:

kind: StatefulSet
metadata:
  name: myweb
spec:
  replicas: 2
...
        volumeMounts:
        - name: data
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: local
      resources:
        requests:
          storage: 100Mi

现在,当我运行示例作业时,我意识到 2 个 pod 中只有一个处于活动状态。另一个吊舱失败说:

Warning  FailedScheduling  <unknown>        0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims.

我相信这是因为我只创建了一个 PV。所以我去创造一个新的PV,

path: "/mnt/data2"

并且吊舱已启动并正在运行。

在我的产品设置中,我希望这会自动发生。这意味着我不想为每个副本创建这些 PV。有没有办法做到这一点?Kube 是否以某种方式解决了这个问题?

感谢帮助。如果您还有任何问题,请回复。我会尽力解决它。

4

1 回答 1

1

目前Kubernetes 本地存储配置器是静态的而不是动态的。如帖子中所述,动态配置器将允许卷自动旋转。

由于默认的 Kubernetes 本地存储配置器不支持这一点,您将不得不寻找另一个存储配置器。

我建议查看 Ranchers local-path-provisioner:https ://github.com/rancher/local-path-provisioner

它在其概述中做广告

Local Path Provisioner 为 Kubernetes 用户提供了一种利用每个节点中的本地存储的方法。根据用户配置,Local Path Provisioner 将自动在节点上创建基于 hostPath 的持久卷。它利用了 Kubernetes Local Persistent Volume 特性引入的特性,但使其成为比 Kubernetes 中内置的本地卷特性更简单的解决方案。

与 Kubernetes 中内置的本地持久卷功能相比

优点

使用 hostPath 动态配置卷。目前 Kubernetes 本地卷配置器无法对本地卷进行动态配置。

缺点

目前不支持卷容量限制。现在将忽略容量限制。

您可以通过运行安装它

kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml

然后将有状态集中的 storageClassName 更改为local-path

于 2020-11-13T06:21:49.003 回答