首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在kubernetes集群上运行mysql时如何持久化

在kubernetes集群上运行mysql时如何持久化
EN

Stack Overflow用户
提问于 2019-02-20 04:09:15
回答 2查看 595关注 0票数 1

我有一个包含三个节点的kubernetes集群。我需要将mysql服务器部署到集群,并且需要该mysql的持久性。因此,当我重新部署或重新启动我的pod时,它不会擦除数据。

但是如果我使用一个使用azure-disk的storageClass,它将只被挂载到主机上。

代码语言:javascript
复制
metadata:
  name: mysql-storage
spec:
  accessModes: [ "ReadWriteOnce" ]
  storageClassName: "managed-premium"
    resources:
      requests:
        storage: 5Gi

因此,如果我删除或重新部署pod,它可能会在另一台未挂载磁盘的主机上启动,然后我的数据就会丢失。

我尝试将accessModes更改为ReadWriteMany,但在声明卷时失败。说它只支持ReadWriteOnce。

EN

回答 2

Stack Overflow用户

发布于 2019-02-20 04:15:38

你不能真正解决这个问题。这个问题有几种解决方法,比如你可以在托管磁盘上创建一个软件存储系统并使用它来存储数据,你可以使用azure文件持久存储,它可以从任何pod (和许多pod)挂载。

托管磁盘只能挂载到一个节点上(但我认为该节点上的所有pod都可以访问该磁盘),因此ReadWriteMany没有多大意义。你可以使用StatefulSets来定义你的mysql,它总是被挂载到同一个节点上,但我不认为你真的需要它,PVC应该被重新挂载到托管你pod的节点上,唯一的缺点是它需要大约1分钟的时间才能将被管理的磁盘重新挂载到另一个节点上。

票数 0
EN

Stack Overflow用户

发布于 2019-02-20 04:54:44

您应该将StatefulSetPersistentVolumeClaims (PVC)一起使用。

下面的指南给出了一个很好的例子,告诉你如何做你想做的事情。

kubernetes.io: Run a Replicated Stateful Application

在本指南中,您需要注意以下几点:

StatefulSet提供了有关这些Pod的顺序和唯一性的保证。并且该定义包含一个volumeClaimTemplates

volumeClaimTemplates将确保每个pod都有一个PersistentVolumeClaims,它们可以在其中写入数据。

PersistentVolumeClaims保留存储,然后将其附加/装载到POD

另一个细节,你不应该删除资源,如果你想保留数据和完整性,你应该升级。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54774176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档