在kubernetes集群上运行mysql时如何持久化
我有一个kubernetes集群,有三个节点。我需要在集群中部署一个mysql服务器,并且需要该mysql的持久性。因此,当我重新部署或重新启动pod时,它不会擦除数据 但是如果我使用使用azure磁盘的storageClass,它将只装载到主机上在kubernetes集群上运行mysql时如何持久化,kubernetes,azure-storage,Kubernetes,Azure Storage,我有一个kubernetes集群,有三个节点。我需要在集群中部署一个mysql服务器,并且需要该mysql的持久性。因此,当我重新部署或重新启动pod时,它不会擦除数据 但是如果我使用使用azure磁盘的storageClass,它将只装载到主机上 metadata: name: mysql-storage spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "managed-premium" resources:
metadata:
name: mysql-storage
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "managed-premium"
resources:
requests:
storage: 5Gi
因此,如果我删除或重新部署pod,它可能会在另一台没有安装磁盘的主机上启动,然后我的数据就消失了
我尝试将accessModes更改为ReadWriteMany,但在声明卷时失败。说它只支持读写。你不能真正解决这个问题。对于这个问题,有几种解决方法,比如你可以在托管磁盘上创建一个软件存储系统并使用它来存储数据,你可以使用azure文件持久存储,它可以从任何pod(以及许多pod)装载
托管磁盘只能装载到一个节点上(但我认为节点上的所有pod都可以访问此磁盘),因此读写功能没有多大意义。你可以使用来定义你的mysql,它总是会被挂载到同一个节点上,但我认为你并不真的需要它,PVC应该被重新挂载到承载你的pod的节点上,唯一的缺点是需要大约1分钟的时间才能将托管磁盘重新连接到另一个节点。你无法真正解决这个问题。对于这个问题,有几种解决方法,比如你可以在托管磁盘上创建一个软件存储系统并使用它来存储数据,你可以使用azure文件持久存储,它可以从任何pod(以及许多pod)装载 托管磁盘只能装载到一个节点上(但我认为节点上的所有pod都可以访问此磁盘),因此读写功能没有多大意义。你可以使用来定义你的mysql,它总是会被挂载到同一个节点上,但我认为你并不真的需要它,PVC应该被重新挂载到承载你的pod的节点上,唯一的缺点是需要大约1分钟的时间才能将托管磁盘重新连接到另一个节点。你应该使用(PVC) 下面的指南给出了一个很好的示例,说明了如何准确地执行您想要的操作 在指南中,您需要注意以下几点: StatefulSet保证了这些POD的顺序和唯一性。并且定义包含一个volumeClaimTemplates volumeClaimTemplates将确保每个pod都有一个持久的VolumeClaimes,可以在其中写入数据 PersistentVolumeClaims保留存储空间,然后连接\装载到POD 另一个细节是,您不应该删除资源如果您想保留数据和完整性,您应该升级。您应该与(PVC)一起使用 下面的指南给出了一个很好的示例,说明了如何准确地执行您想要的操作 在指南中,您需要注意以下几点: StatefulSet保证了这些POD的顺序和唯一性。并且定义包含一个volumeClaimTemplates volumeClaimTemplates将确保每个pod都有一个持久的VolumeClaimes,可以在其中写入数据 PersistentVolumeClaims保留存储空间,然后连接\装载到POD
另一个细节,您不应该删除资源如果您想保留数据和完整性,您应该升级。好的,这听起来像是我想要的状态集。我可以忍受一分钟的停机时间。我不会经常部署一个新的数据库。好吧,这听起来像是我想要的状态集。我可以忍受一分钟的停机时间。我不会经常部署一个新的数据库。这是一个关于如何设置集群mysql解决方案的非常好的链接。但有一件事我不确定。如果我使用StatefulSet,那么我应该保证pod总是在它们最初初始化的节点上运行。但是如果我删除一个节点,那么它可以从另一个节点开始,对吗?正如文档(第一个链接)中所述:
StatefulSet Pods具有唯一的标识,该标识由序号、稳定的网络标识和稳定的存储组成。标识将附着在Pod上,无论它(重新)调度在哪个节点。
对于存储当Pod(重新)调度到节点上时,其卷数将装载与其PersistentVolume声明相关联的PersistentVolumes
。考虑到PV和PVC应该连接到POD移动到的任何位置,问题是绑定通常很慢,因此如果POD经常移动,可能不适合。完美。给偶然发现这一页的其他人。在页面上有一个关于如何通过排空节点来测试它的描述。这是一个关于如何设置集群mysql解决方案的非常好的链接。但有一件事我不确定。如果我使用StatefulSet,那么我应该保证pod总是在它们最初初始化的节点上运行。但是如果我删除一个节点,那么它可以从另一个节点开始,对吗?正如文档(第一个链接)中所述:StatefulSet Pods具有唯一的标识,该标识由序号、稳定的网络标识和稳定的存储组成。标识将附着在Pod上,无论它(重新)调度在哪个节点。
对于存储当Pod(重新)调度到节点上时,其卷数将装载与其PersistentVolume声明相关联的PersistentVolumes
。考虑到PV和PVC应该连接到POD移动到的任何位置,问题是绑定通常很慢,因此如果POD经常移动,可能不适合。完美。给偶然发现这一页的其他人。页面上有关于如何通过排空节点来测试它的说明。