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

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

问题现象

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

复现

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgresql-persistent-storage
  namespace: default
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: cbs
  volumeMode: Filesystem

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgresql-deployment
spec:
  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 正常运行。

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

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

问题分析

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

那是什么原因造成的呢?

我们登录 Pod 所在的节点

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

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

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

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

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgresql-deployment
spec:
  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 

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

以上就是一文解析Kubernetes使用PVC后数据丢失的详细内容,更多关于Kubernetes PVC后数据丢失的资料请关注脚本之家其它相关文章!

相关文章

  • K8S prometheus operator监控工作原理介绍

    K8S prometheus operator监控工作原理介绍

    这篇文章主要为大家介绍了K8S prometheus operator监控工作原理介绍,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • k8s部署Ingress并创建规则的详细介绍

    k8s部署Ingress并创建规则的详细介绍

    这篇文章主要介绍了k8s部署Ingress并创建规则,本文通过图文实例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • k8s入门实战deployment使用详解

    k8s入门实战deployment使用详解

    这篇文章主要为大家介绍了k8s入门实战deployment使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • K8s如何拉取habor镜像

    K8s如何拉取habor镜像

    这篇文章主要介绍了K8s如何拉取habor镜像,在daemon.json中添加仓库地址,需要在创建资源对象所在的节点进行添加,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-04-04
  • K8S部署lnmp项目全过程

    K8S部署lnmp项目全过程

    这篇文章主要介绍了K8S部署lnmp项目全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Kubernetes安全加固的一些实用建议

    Kubernetes安全加固的一些实用建议

    Kubernetes是一个自动化的容器编排平台,它负责应用的部署、应用的弹性以及应用的管理,这些都是基于容器的,下面这篇文章主要给大家介绍了关于Kubernetes安全加固的一些实用建议,需要的朋友可以参考下
    2022-02-02
  • Rainbond部署组件Statefulset的使用官方文档

    Rainbond部署组件Statefulset的使用官方文档

    这篇文章主要为大家介绍了官方文档Rainbond部署组件Statefulset的使用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • K8S中Pod重启策略及重启可能原因详细讲解

    K8S中Pod重启策略及重启可能原因详细讲解

    在k8s集群中当某个pod资源需要重启时,我们只会对其进行删除,由其pod控制器进行重新构建,下面这篇文章主要给大家介绍了关于K8S中Pod重启策略及重启可能原因的相关资料,需要的朋友可以参考下
    2023-05-05
  • 2022最新青龙面板对接机器人的详细过程(傻妞对接onebot(oicq)协议实现机器人功能)

    2022最新青龙面板对接机器人的详细过程(傻妞对接onebot(oicq)协议实现机器人功能)

    这篇文章主要介绍了2022最新青龙面板对接机器人的详细过程(傻妞对接onebot(oicq)协议实现机器人功能),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 从小饭馆客流量变大论云原生负载均衡

    从小饭馆客流量变大论云原生负载均衡

    这篇文章主要为大家介绍了从小饭馆客流量变大来讨论云原生负载均衡,为大家做出更生动易懂的云原生解释说明有需要的朋友可以借鉴参考下
    2022-03-03

最新评论