一文解析Kubernetes使用PVC后數(shù)據(jù)丟失
問(wèn)題現(xiàn)象
使用官方postgresql鏡像,通過(guò)pvc將云硬盤掛載至數(shù)據(jù)目錄,每次重建Pod,數(shù)據(jù)庫(kù)數(shù)據(jù)都會(huì)丟失。
復(fù)現(xiàn)
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
## 注意掛載點(diǎn)
mountPath: /var/lib/postgresql
volumes:
- name: postgresql-persistent-storage
persistentVolumeClaim:
claimName: postgresql-persistent-storage
使用上述提供的 yaml創(chuàng)建工作負(fù)載,完成后可看到 Pod 正常運(yùn)行。

根據(jù)dockerhub官方鏡像的說(shuō)明中,鏡像數(shù)據(jù)庫(kù)文件存儲(chǔ)的默認(rèn)目錄為/var/lib/postgresql/data

上述yaml中,將持久化存儲(chǔ)掛載到/var/lib/postgresql,看似無(wú)問(wèn)題,容器也可以正常啟動(dòng),但是其實(shí)數(shù)據(jù)庫(kù)文件并沒(méi)有寫入 PVC 中,當(dāng) Pod 發(fā)生重啟重新調(diào)度時(shí),數(shù)據(jù)庫(kù)文件便會(huì)丟失。
問(wèn)題分析
進(jìn)入 Pod, 通過(guò) findmnt命令,可以清楚地看到數(shù)據(jù)庫(kù)存儲(chǔ)文件并未保存在數(shù)據(jù)盤中,而是使用 volume 的方式掛載,被掛載到了/dev/vda1中,所以導(dǎo)致 Pod 重啟時(shí),該目錄被自動(dòng)釋放,數(shù)據(jù)丟失。

那是什么原因造成的呢?
我們登錄 Pod 所在的節(jié)點(diǎn)
通過(guò)docker history --no-trunc postgres:12.4查看鏡像的構(gòu)建歷史發(fā)現(xiàn),此鏡像構(gòu)建所使用的 Dockerfile使用了 VOLUME命令,手工掛載了/var/lib/postgresql/data

Dockerfile構(gòu)建后的鏡像中,VOLUME中的操作并不會(huì)被Kubernetes忽略,而是會(huì)繼續(xù)掛載。
即先掛載kubelet給加的volume,后掛載image.config.volumes,image.config.volumes不會(huì)覆蓋掉kubelet的volume。
如需要將其使用 PVC 覆蓋目錄,必須手工指定 PVC 的掛載點(diǎn)與其同地址,即將volumeMounts中的mountPath從/var/lib/postgresql調(diào)整為/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

新建測(cè)試文件,并刪除 Pod 后測(cè)試數(shù)據(jù)寫入

以上就是一文解析Kubernetes使用PVC后數(shù)據(jù)丟失的詳細(xì)內(nèi)容,更多關(guān)于Kubernetes PVC后數(shù)據(jù)丟失的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 詳解Kubernetes 中容器跨主機(jī)網(wǎng)絡(luò)
- Kubernetes?Ingress實(shí)現(xiàn)細(xì)粒度IP訪問(wèn)控制
- Kubernetes如何限制不同團(tuán)隊(duì)只能訪問(wèn)各自namespace實(shí)現(xiàn)
- 詳解Rainbond云原生平臺(tái)簡(jiǎn)化Kubernetes業(yè)務(wù)問(wèn)題排查
- Kubernetes上使用Jaeger分布式追蹤基礎(chǔ)設(shè)施詳解
- IoT?邊緣集群Kubernetes?Events告警通知進(jìn)一步配置詳解
- IoT邊緣集群Kubernetes?Events告警通知實(shí)現(xiàn)示例
- kubernetes之statefulset搭建MySQL集群
相關(guān)文章
青龍面板拉庫(kù)解決沒(méi)有或丟失依賴can‘t?find?module的保姆級(jí)教程(附青龍面板腳本倉(cāng)庫(kù))
這篇文章主要介紹了青龍面板拉庫(kù)解決沒(méi)有或丟失依賴can‘t?find?module的保姆級(jí)教程(附青龍面板腳本倉(cāng)庫(kù)),需要的朋友可以參考下2022-05-05
kubernetes日志備份解決ELK中日志丟失問(wèn)題
這篇文章主要為大家介紹了kubernetes日志備份方案的細(xì)節(jié)探究分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
Kubernetes教程之Windows?HostProcess?運(yùn)行容器化負(fù)載
這篇文章主要介紹了Kubernetes?Windows?HostProcess?運(yùn)行容器化負(fù)載,本篇內(nèi)容還是比較多的,總共包含了?Windows?HostProcess的創(chuàng)建、為?Windows?Pod?和容器配置?GMSA?和?Windows?的?Pod?和容器配置?RunAsUserName三大功能模塊,需要的朋友可以參考下2022-07-07
kubernetes存儲(chǔ)之GlusterFS集群詳解
最近工作中用到了GlusterFS作為Kubernetes的存儲(chǔ),這篇文章主要給大家介紹了關(guān)于kubernetes存儲(chǔ)之GlusterFS集群的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
kubernetes k8s 存儲(chǔ)動(dòng)態(tài)掛載配置詳解
這篇文章主要為大家介紹了kubernetes k8s 存儲(chǔ)動(dòng)態(tài)掛載配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
關(guān)于Rancher部署并導(dǎo)入K8S集群的問(wèn)題
這篇文章主要介紹了關(guān)于Rancher部署并導(dǎo)入K8S集群的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12
kubernetes?k8s?CRD自定義資源學(xué)習(xí)筆記
這篇文章主要介紹了kubernetes?k8s?CRD自定義資源學(xué)習(xí)筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05

