问题描述
我有一个在Kubernetes中部署的开源项目。它具有一个主,数据和查询窗格。数据容器用于存储数据。不幸的是,当数据容器断开时,它也会丢失所有存储的数据。 所以我想,我必须对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
现在,当我运行一个示例作业时,我意识到这两个窗格中只有一个处于活动状态。另一个Pod无法说:
Warning FailedScheduling <unknown> 0/1 nodes are available: 1 pod has unbound immediate PersistentVolumeClaims.
我相信这是因为我仅创建了一个PV。所以我去创建一个新的PV,
path: "/mnt/data2"
吊舱已启动并运行。
在产品设置中,我希望这种情况自动发生。这意味着我不想为每个副本创建这些PV。 有没有办法做到这一点? 库伯以某种方式解决了这个问题吗?
感谢帮助。如有其他疑问,请回复。我会尽力解决它。
解决方法
当前Kubernetes local storage provisioner是静态的而不是动态的。一个动态的预配器将允许自动拆分卷,如后所述。
由于默认的Kubernetes本地存储供应商不支持此功能,因此您将不得不寻找另一个存储供应商。
我建议您查看Ranchers local-path-provisioner:https://github.com/rancher/local-path-provisioner
它在其概述中投放广告
本地路径供应器为Kubernetes用户提供了一种方法 利用每个节点中的本地存储。基于用户 配置,本地路径设置程序将创建基于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