您好,登錄后才能下訂單哦!
這篇“kubernetes數據持久化PV和PVC怎么配置”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“kubernetes數據持久化PV和PVC怎么配置”文章吧。
PresistentVolume(PV)是指集群管理員配置提供的某存儲系統上的一段存儲空間,它是對底層共享存儲的抽象,將共享存儲作為一種可由用戶申請使用的資源,實現"存儲消費"機制,通過存儲插件,PV支持使用多種網絡存儲等多種后端存儲系統,例如,NFS、CephFS、RBD。PV是集群級別的資源,不屬于任何名稱空間,用戶對PV資源的使用需要通過PersistentVolumeClaim(PVC)提供的使用申請來完成綁定,PVC是PV資源的消費者,它向PV申請特定大小的空間及訪問模式(rw或ro)從而創建出PVC存儲卷。然后再由Pod資源通過PersistentVolumeClaim存儲卷關聯使用。
PersistentVolumeClaim,PVC是存儲卷類型的資源,它通過申請占用某個PersistentVolume而創建,它與PV是一對一的關系,用戶無須關心其底層實現細節,申請時,用戶只需要指定目標空間的大小,訪問模式,PV標簽選擇器和StorageClass等相關信息即可。
PresistentVolume Spec支持如下幾個通用字段,用于定義PV的容量,訪問模式和回收策。
1.Capacity: PV的容量
2.volumeMode: 卷類型,用于指定此卷可被用作文件系統還是裸格式的塊設備,默認為Filesystem。
3.accessMode: PV的訪問模式參考官方
1.ReadWriteOnce: 僅可被單個節點讀寫掛載;命令行中簡寫RWO。
2.ReadOnlyMany: 僅可被多個節點同時只讀掛在;命令行簡寫ROX。
3.ReadyWriteMany: 可被多個節點同時讀寫掛載;命令行中簡寫RWX。
4.persistentVolumeReclaimPolicy: PV空間的處理機制,可用類型為Retain(默認)、Recycle或Delete。
1.Retain: 保持不動,由管理員手動回收。
2.Recycle: 空間回收,即刪除存儲卷下的所有文件(包括子目錄和隱藏文件rm -rf /thevolume/*),目前僅NFS和hostpath支持此功能。
3.Delete: 刪除存儲卷,諸如 AWS EBS、GCE PD、Azure Disk 或 OpenStack Cinder 卷這類關聯存儲資產也被刪除。
5.storageClassName: 當前PV所屬的StorageClass的名稱,默認為空,即不屬于任何StorageClass。
6.mountOptions: 掛載選項組成的列表,如ro,soft和hard等。
[root@kn-server-master01-13 pv]# cat hostpath-pv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: pv-volume-001 spec: storageClassName: "host-storage" 資源類型的標識 persistentVolumeReclaimPolicy: "Retain" 回收策略默認為Retain capacity: 定義空間 storage: 1Gi 定義空間大小 accessModes: 訪問模式 - ReadWriteOnce 訪問模式為僅被單個節點讀寫掛載,單路讀寫 hostPath: 臨時存儲在哪個地方 path: "/mnt/data" [root@kn-server-master01-13 pv]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pv-volume-001 1Gi RWO Retain Available host-storage 4m36s
[root@kn-server-master01-13 pv]# cat nfs-pv.yaml apiVersion: v1 kind: PersistentVolume metadata: name: nfs-pv labels: 標簽 release: nfs-redis spec: storageClassName: "nfs-storage" 資源類型表示 persistentVolumeReclaimPolicy: "Recycle" 回收策略為Recycle相當rm -rf / capacity: storage: 0.5Gi accessModes: - ReadWriteMany nfs: server: 10.0.0.15 path: /data/redis [root@kn-server-master01-13 pv]# kubectl get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE nfs-pv 512Mi RWX Recycle Available nfs-storage 62m pv-volume-001 1Gi RWO Retain Bound default/001-pvc host-storage 160m
PersistentVolumeClaim,PVC是存儲卷類型的資源,它通過申請占用某個PersistentVolume而創建,它與PV是一對一的關系,用戶無須關心其底層實現細節, 申請時,用戶只需要指定目標空間的大小,訪問模式,PV標簽選擇器和StorageClass等相關信息即可。
PVC的Spec字段可嵌套字段如下,
accessMode: 當前PVC的訪問模式,其可用模式與PV相同。
resource當前PVC存儲卷需要占用的資源的最大和最小值。
selector綁定時對PV應用的標簽選擇器,matchlabels或者匹配表達式matchEx-pressions用于挑選要綁定的PV,如果同時指定來兩種挑選機制,則必須同時滿足兩種選擇機制的PV才能被選出。
storageClassName: 所依賴的存儲卷的名稱。
volumeName: 用于直接制定要綁定的PV的卷名。
[root@kn-server-master01-13 pv]# cat hostpath-pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: 001-pvc spec: storageClassName: "host-storage" 和PV的storageclassname須一致,否則無法識別。 accessModes: - ReadWriteOnce resources: pvc的資源限定僅指其空間大小。 requests: storage: 0.9Gi 大小為0.9Gi; [root@kn-server-master01-13 pv]# kubectl apply -f hostpath-pvc.yaml Available: 可用狀態的自由資源,尚未被綁定PVC。 Bound: 已經綁定至某個PVC。 Released: 綁定的PVC已經被刪除,但資源尚被集群回收。 Failed: 因自動回收資源失敗而處于的故障狀態。 [root@kn-server-master01-13 pv]# kubectl get pv pv-volume-001 NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pv-volume-001 1Gi RWO Retain Bound default/001-pvc host-storage 33m [root@kn-server-master01-13 pv]# kubectl describe pv pv-volume-001 Name: pv-volume-001 Labels: <none> Annotations: pv.kubernetes.io/bound-by-controller: yes Finalizers: [kubernetes.io/pv-protection] StorageClass: host-storage Status: Bound Claim: default/001-pvc Reclaim Policy: Retain Access Modes: RWO VolumeMode: Filesystem Capacity: 1Gi Node Affinity: <none> Message: Source: Type: HostPath (bare host directory volume) Path: /mnt/data HostPathType: Events: <none> [root@kn-server-master01-13 pv]# kubectl describe pvc 001-pvc Name: 001-pvc Namespace: default StorageClass: host-storage Status: Bound 已綁定 Volume: pv-volume-001 Labels: <none> Annotations: pv.kubernetes.io/bind-completed: yes pv.kubernetes.io/bound-by-controller: yes Finalizers: [kubernetes.io/pvc-protection] Capacity: 1Gi Access Modes: RWO VolumeMode: Filesystem Used By: <none> Events: <none>
NFS即是網絡文件系統,它是一種分布式文件系統協議,kubernetes中的NFS存儲卷用于將某些事先存在的NFS服務器導出(export)的存儲空間掛載到Pod中以供容器使用,與臨時存儲不同的是,NFS存儲卷在Pod對象終止后僅僅是被卸載而非刪除,NFS是文件系統級共享服務,它支持同時存在多路掛載,定義NFS存儲卷時,常用如下字段。
server nfs服務器的地址或者主機名,必須字段。
pathnfs服務器導出(共享)的文件系統路徑,必須字段。
readOnly是否以只讀方式掛載,默認為false。
生產環境建議使用Ceph、azureDisk等公有云存儲。
[root@kn-server-node02-15 ~]# yum install nfs-utils -y [root@kn-server-node02-15 ~]# cat /etc/exports /nfs/data5/ 10.0.0.0/24(rw,no_root_squash) /data/redis 10.0.0.0/24 10.0.0.0/24 pod訪問nfs服務會將源IP修改為節點IP,允許所有節點訪問NFS服務 (ro,no_root_squash)訪問NFS-SERVER共享目錄的用戶如果是root,它對共享目錄有root權限 準備數據共享目錄 [root@kn-server-node02-15 ~]# mkdir /data/redis -p [root@kn-server-node02-15 ~]# systemctl enable nfs-server Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service. 服務端配置 各個工作節點安裝nfs-utils ubuntu安裝: sudo apt-get install nfs-common 。 centos安裝nfs-utils [root@kn-server-master01-13 pv]# showmount -e 10.0.0.15 Export list for 10.0.0.15: /data/redis 10.0.0.0/24 master節點和node節點都需要安裝 [root@kn-server-node01-14 ~]# showmount -e 10.0.0.15 Export list for 10.0.0.15: /data/redis 10.0.0.0/24
[root@kn-server-master01-13 pv]# cat nfs-pvc.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc labels: 首先標簽須匹配,不然無法匹配,也可以稱為強行綁定。 release: nfs-redis spec: storageClassName: "nfs-storage" 須同屬一個 accessModes: - ReadWriteMany resources: requests: storage: 0.5Gi 指定大小。 [root@kn-server-master01-13 pv]# kubectl apply -f nfs-pvc.yaml persistentvolumeclaim/nfs-pvc created 顯示已為綁定狀態。 [root@kn-server-master01-13 pv]# kubectl get pv,pvc NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE persistentvolume/nfs-pv 512Mi RWX Recycle Bound default/nfs-pvc nfs-storage 78m persistentvolume/pv-volume-001 1Gi RWO Retain Bound default/001-pvc host-storage 175m NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE persistentvolumeclaim/001-pvc Bound pv-volume-001 1Gi RWO host-storage 143m persistentvolumeclaim/nfs-pvc Bound nfs-pv 512Mi RWX nfs-storage 6s 通過describe來查看 [root@kn-server-master01-13 pv]# kubectl describe pv nfs-pv Name: nfs-pv Labels: release=nfs-redis 所屬標簽 Annotations: pv.kubernetes.io/bound-by-controller: yes Finalizers: [kubernetes.io/pv-protection] StorageClass: nfs-storage storageclass名稱 Status: Bound 綁定狀態 Claim: default/nfs-pvc 名稱空間 Reclaim Policy: Recycle 回收策略 Access Modes: RWX 訪問模式 VolumeMode: Filesystem Capacity: 512Mi 大小 Node Affinity: <none> Message: Source: Type: NFS (an NFS mount that lasts the lifetime of a pod) Server: 10.0.0.15 來自那個nfs服務器 Path: /data/redis 共享的數據目錄 ReadOnly: false Events: <none>
[root@kn-server-master01-13 pv]# cat pod-redis.yaml apiVersion: v1 kind: Pod metadata: name: redis spec: containers: - name: redis image: redis volumeMounts: - name: redis-data mountPath: /data volumes: - name: redis-data persistentVolumeClaim: claimName: nfs-pvc [root@kn-server-master01-13 pv]# kubectl describe pods redis Containers: redis: Container ID: docker://d82061a1a86f56432e9956fc46bc810e577a0d89b91894e266e883bef68f5d9d Image: redis Image ID: docker-pullable://redis@sha256:db485f2e245b5b3329fdc7eff4eb00f913e09d8feb9ca720788059fdc2ed8339 Port: <none> Host Port: <none> State: Running Started: Sun, 27 Nov 2022 21:57:34 +0800 Ready: True Restart Count: 0 Environment: <none> Mounts: /data from redis-data (rw) 已經掛載 [root@kn-server-master01-13 pv]# kubectl describe pvc nfs-pvc Name: nfs-pvc Namespace: default StorageClass: nfs-storage Status: Bound Volume: nfs-pv Labels: release=nfs-redis Annotations: pv.kubernetes.io/bind-completed: yes pv.kubernetes.io/bound-by-controller: yes Finalizers: [kubernetes.io/pvc-protection] Capacity: 512Mi Access Modes: RWX VolumeMode: Filesystem Used By: redis 這里可以看到是redis這個Pod正在使用這個PVC Events: <none>
[root@kn-server-master01-13 pv]# redis-cli -h 192.168.1.86 192.168.1.86:6379> set key haitang OK 192.168.1.86:6379> get key "haitang" 192.168.1.86:6379> bgsave Background saving started 192.168.1.86:6379> exit 可以看到數據是寫到nfs-server了 [root@kn-server-node02-15 redis]# ll 總用量 4 -rw-r--r-- 1 polkitd input 110 11月 27 22:14 dump.rdb 刪除Pod后,數據是不會丟失的。 [root@kn-server-master01-13 pv]# kubectl delete pods redis pod "redis" deleted 數據是還在的。 [root@kn-server-node02-15 redis]# ll 總用量 4 -rw-r--r-- 1 polkitd input 110 11月 27 22:20 dump.rdb
以上就是關于“kubernetes數據持久化PV和PVC怎么配置”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。