我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Kubernetes使用PVC后数据丢失怎么解决

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Kubernetes使用PVC后数据丢失怎么解决

今天小编给大家分享一下Kubernetes使用PVC后数据丢失怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

问题现象

使用官方postgresql镜像,通过pvc将云硬盘挂载至数据目录,每次重建Pod,数据库数据都会丢失。

复现

apiVersion: v1kind: PersistentVolumeClaimmetadata:  name: postgresql-persistent-storage  namespace: defaultspec:  accessModes:  - ReadWriteOnce  resources:    requests:      storage: 10Gi  storageClassName: cbs  volumeMode: Filesystem---apiVersion: apps/v1kind: Deploymentmetadata:  name: postgresql-deploymentspec:  selector:    matchLabels:      app: postgresql  template:    metadata:      labels:        app: postgresql    spec:      containers:      - image: postgres:12.4        name: postgresql        env:        - name: POSTGRES_PASSWORD          value: "123456"        ports:        - containerPort: 5432          name: postgresql        volumeMounts:        - name: postgresql-persistent-storage          ## 注意挂载点          mountPath: /var/lib/postgresql      volumes:      - name: postgresql-persistent-storage        persistentVolumeClaim:          claimName: postgresql-persistent-storage

使用上述提供的 yaml创建工作负载,完成后可看到 Pod 正常运行。

Kubernetes使用PVC后数据丢失怎么解决

根据dockerhub官方镜像的说明中,镜像数据库文件存储的默认目录为/var/lib/postgresql/data

Kubernetes使用PVC后数据丢失怎么解决

上述yaml中,将持久化存储挂载到/var/lib/postgresql,看似无问题,容器也可以正常启动,但是其实数据库文件并没有写入 PVC 中,当 Pod 发生重启重新调度时,数据库文件便会丢失。

问题分析

进入 Pod, 通过 findmnt命令,可以清楚地看到数据库存储文件并未保存在数据盘中,而是使用 volume 的方式挂载,被挂载到了/dev/vda1中,所以导致 Pod 重启时,该目录被自动释放,数据丢失。

Kubernetes使用PVC后数据丢失怎么解决

那是什么原因造成的呢?

我们登录 Pod 所在的节点

通过docker history --no-trunc postgres:12.4查看镜像的构建历史发现,此镜像构建所使用的 Dockerfile使用了 VOLUME命令,手工挂载了/var/lib/postgresql/data

Kubernetes使用PVC后数据丢失怎么解决

Dockerfile构建后的镜像中,VOLUME中的操作并不会被Kubernetes忽略,而是会继续挂载。

即先挂载kubelet给加的volume,后挂载image.config.volumesimage.config.volumes不会覆盖掉kubeletvolume

如需要将其使用 PVC 覆盖目录,必须手工指定 PVC 的挂载点与其同地址,即将volumeMounts中的mountPath/var/lib/postgresql调整为/var/lib/postgresql/data

apiVersion: apps/v1kind: Deploymentmetadata:  name: postgresql-deploymentspec:  selector:    matchLabels:      app: postgresql  template:    metadata:      labels:        app: postgresql    spec:      containers:      - image: postgres:12.4        name: postgresql        env:        - name: POSTGRES_PASSWORD          value: "123456"        ports:        - containerPort: 5432          name: postgresql        volumeMounts:        - name: postgresql-persistent-storage          mountPath: /var/lib/postgresql/data      volumes:      - name: postgresql-persistent-storage        persistentVolumeClaim:          claimName: postgresql-persistent-storage

Kubernetes使用PVC后数据丢失怎么解决

新建测试文件,并删除 Pod 后测试数据写入

Kubernetes使用PVC后数据丢失怎么解决

以上就是“Kubernetes使用PVC后数据丢失怎么解决”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Kubernetes使用PVC后数据丢失怎么解决

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Kubernetes使用PVC后数据丢失怎么解决

今天小编给大家分享一下Kubernetes使用PVC后数据丢失怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。问题现象
2023-07-05

一文解析Kubernetes使用PVC后数据丢失

这篇文章主要为大家介绍了Kubernetes使用PVC后数据丢失原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-09

gitlab13升级后数据丢失怎么解决

随着云计算的发展,越来越多的企业将其软件部署在云上,GitLab作为一个代码托管平台,也成为了众多企业的首要选择之一。但在升级GitLab 13后,有些用户发现他们的数据被删除了,这是令人非常困扰的问题。GitLab 13增加了许多新功能,
2023-10-22

docker容器重启后数据丢失怎么解决

当Docker容器重启后数据丢失的问题,可以通过以下几种方式来解决:挂载数据卷(Volume):使用Docker的数据卷功能,将容器中的数据目录挂载到宿主机的文件系统上,这样即使容器重启,数据仍然在宿主机上,不会丢失。例如,使用 `-v`
2023-10-27

redis怎么解决数据丢失

redis 数据丢失的原因包括内存故障、停电、人为错误和硬件故障。解决方案为:1. 通过 rdb 或 aof 持久化将数据存储到磁盘;2. 复制到多台服务器实现高可用性;3. 使用 redis sentinel 或 redis cluste
redis怎么解决数据丢失
2024-06-03

mq丢失数据怎么解决

当MQ(消息队列)丢失数据时,可以采取以下几个方法来解决:检查MQ配置:首先,确保MQ的配置是正确的,包括消息的持久化配置和重试策略等。可能是因为配置不正确导致消息丢失。检查网络连接:检查MQ服务器和消费者之间的网络连接是否正常。如果网络连
2023-10-26

unraid重启后docker数据丢失如何解决

如果在重启 Unraid 后遇到 Docker 数据丢失的问题,有一些可能的解决办法:1. 检查 Unraid 配置:确保 Unraid 配置正确,并且 Docker 容器和数据的路径没有更改。2. 检查 Docker 配置:确保 Dock
2023-09-09

java重定向后session丢失怎么解决

当使用重定向后,会新建一个请求,而会话(session)是与请求绑定的,所以在重定向后会丢失会话。解决该问题有以下几种方法:1. 使用URL重写:在重定向的URL中附加上会话ID,通过URL传递会话ID。例如,将重定向的URL改为`resp
2023-10-10

vue使用query传参页面刷新数据丢失怎么解决

本篇内容介绍了“vue使用query传参页面刷新数据丢失怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vue路由传参(使用query
2023-07-06

linux中redis重启数据丢失怎么解决

在Linux环境中,如果Redis重启导致数据丢失,可以尝试以下解决方法:启用持久化功能:在Redis配置文件中开启RDB持久化功能或者AOF持久化功能,可以将数据写入磁盘,以防止重启数据丢失。使用Redis Sentinel:Redis
linux中redis重启数据丢失怎么解决
2024-04-09

vuex页面刷新数据丢失怎么解决

今天小编给大家分享一下vuex页面刷新数据丢失怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。为什么说刷新页面vuex
2023-06-29

oracle重启数据库后数据丢失怎么找回

如果在Oracle数据库重启后发现数据丢失,可以尝试以下方法找回数据:检查数据库日志文件:查看数据库的日志文件,看是否有任何错误或异常情况发生。可能会有一些提示或错误信息可以帮助找回丢失的数据。恢复备份:如果有定期备份数据库的习惯,可以尝试
oracle重启数据库后数据丢失怎么找回
2024-04-09

oracle decimal小数丢失怎么解决

在Oracle中,存储小数时可能会出现精度丢失的问题,这可能是因为数据类型选择不当或计算过程中的精度丢失。以下是一些解决方法:使用合适的数据类型:确保在创建表时选择合适的数据类型来存储小数,如NUMBER(precision, scale)
oracle decimal小数丢失怎么解决
2024-04-09

uniapp更新以后用户信息丢失怎么解决

随着移动应用的普及,很多公司开始转向多平台开发,以满足不同用户需求。而Uniapp成为了众多开发工具之一。然而,最近有一些用户反馈,在升级Uniapp版本时,会导致用户信息丢失的问题。本文将详细探讨这个问题,并提供一些解决方案。首先,让我们了解一下Uniapp。Uniapp是一款多端开发框架,基于Vue.js和自有的编译器,可以一次性开发多个平台的应用,包括微信小程序、H5、安
2023-05-14

nginx header参数丢失怎么解决

当Nginx处理请求时,它会根据其配置文件来确定如何处理请求头。如果您发现某些请求头参数丢失,可以尝试以下解决方法:检查Nginx配置文件:查看Nginx的配置文件(通常是nginx.conf或sites-available/default
nginx header参数丢失怎么解决
2024-02-29

租用服务器发生数据丢失问题怎么解决

租用服务器发生数据丢失问题可能是由多种原因引起的,例如硬件故障、人为操作失误、网络问题等。以下是一些解决方法:数据备份:在租用服务器上定期进行数据备份是最有效的预防措施。备份数据可以帮助您在发生数据丢失时快速恢复数据。数据恢复工具:如果数据
租用服务器发生数据丢失问题怎么解决
2024-04-23

win10用户数据丢失怎么办

如果Win10用户数据丢失,以下是一些可能的解决方法:1. 恢复备份:如果您有备份文件,可以尝试从备份中恢复丢失的数据。可以使用Windows自带的文件历史记录功能或者第三方备份软件进行备份。2. 使用数据恢复软件:有一些专门的数据恢复软件
2023-09-05

MySQL数据丢失的原因是什么及怎么解决

这篇文章主要介绍了MySQL数据丢失的原因是什么及怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇MySQL数据丢失的原因是什么及怎么解决文章都会有所收获,下面我们一起来看看吧。
2023-04-28

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录