您好,登錄后才能下訂單哦!
今天小編給大家分享一下Kubernetes使用PVC后數(shù)據(jù)丟失怎么解決的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。
使用官方postgresql
鏡像,通過(guò)pvc
將云硬盤(pán)掛載至數(shù)據(jù)目錄,每次重建Pod,數(shù)據(jù)庫(kù)數(shù)據(jù)都會(huì)丟失。
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)有寫(xiě)入 PVC 中,當(dāng) Pod 發(fā)生重啟重新調(diào)度時(shí),數(shù)據(jù)庫(kù)文件便會(huì)丟失。
進(jìn)入 Pod, 通過(guò) findmnt
命令,可以清楚地看到數(shù)據(jù)庫(kù)存儲(chǔ)文件并未保存在數(shù)據(jù)盤(pán)中,而是使用 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ù)寫(xiě)入
以上就是“Kubernetes使用PVC后數(shù)據(jù)丟失怎么解決”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。