我在Kubernetes中部署了一个开源项目。它有一个master、data和query pod。数据吊舱用于存储数据。不幸的是,当数据吊舱关闭时,它也会丢失所有存储的数据。所以我想,我必须使用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本地存储提供程序是静态的,而不是动态的。动态预设置器将允许自动旋转卷,如帖子中所述。
由于默认的Kubernetes本地存储提供程序不支持这一点,您将不得不找到另一个存储提供程序。
我建议查看Ranchers本地路径设置器:https://github.com/rancher/local-path-provisioner
它在其概览中做广告
Local Path Provisioner为Kubernetes用户提供了一种方法利用每个节点中的本地存储。基于用户配置,本地路径设置程序将创建基于hostPath的节点上的持久卷。它利用了由Kubernetes本地持久卷功能引入,但使其中的内置本地卷功能更简单的解决方案Kubernetes。
与Kubernetes 中内置的本地持久卷功能相比
Pros
使用hostPath动态配置卷。目前Kubernetes本地卷设置程序无法为本地卷。
Cons
当前不支持卷容量限制。容量限制将暂时被忽略。
您可以通过运行来安装它
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml
然后将有状态集中的storageClassName更改为local-path