我有一个包含三个节点的kubernetes集群。我需要将mysql服务器部署到集群,并且需要该mysql的持久性。因此,当我重新部署或重新启动我的pod时,它不会擦除数据。
但是如果我使用一个使用azure-disk的storageClass,它将只被挂载到主机上。
metadata:
name: mysql-storage
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "managed-premium"
resources:
requests:
storage: 5Gi因此,如果我删除或重新部署pod,它可能会在另一台未挂载磁盘的主机上启动,然后我的数据就会丢失。
我尝试将accessModes更改为ReadWriteMany,但在声明卷时失败。说它只支持ReadWriteOnce。
发布于 2019-02-20 04:15:38
你不能真正解决这个问题。这个问题有几种解决方法,比如你可以在托管磁盘上创建一个软件存储系统并使用它来存储数据,你可以使用azure文件持久存储,它可以从任何pod (和许多pod)挂载。
托管磁盘只能挂载到一个节点上(但我认为该节点上的所有pod都可以访问该磁盘),因此ReadWriteMany没有多大意义。你可以使用StatefulSets来定义你的mysql,它总是被挂载到同一个节点上,但我不认为你真的需要它,PVC应该被重新挂载到托管你pod的节点上,唯一的缺点是它需要大约1分钟的时间才能将被管理的磁盘重新挂载到另一个节点上。
发布于 2019-02-20 04:54:44
您应该将StatefulSet与PersistentVolumeClaims (PVC)一起使用。
下面的指南给出了一个很好的例子,告诉你如何做你想做的事情。
kubernetes.io: Run a Replicated Stateful Application
在本指南中,您需要注意以下几点:
StatefulSet提供了有关这些Pod的顺序和唯一性的保证。并且该定义包含一个volumeClaimTemplates
volumeClaimTemplates将确保每个pod都有一个PersistentVolumeClaims,它们可以在其中写入数据。
PersistentVolumeClaims保留存储,然后将其附加/装载到POD
另一个细节,你不应该删除资源,如果你想保留数据和完整性,你应该升级。
https://stackoverflow.com/questions/54774176
复制相似问题