01 引言
聲明:本文為《Kubernetes權威指南:從Docker到Kubernetes實踐全接觸(第5版)》的讀書筆記
在上一篇博客《k8s教程(Volume篇)-持久卷工作原理》,我們了解了持久卷的工作原理,本文繼續(xù)深入學習PV。
02 PV詳解
PV作為對存儲資源的定義,主要涉及存儲能力、訪問模式、存儲類型、回收策略、后端存儲類型等關鍵信息的設置。
Kubernetes
支持的PV類型如下:
類型 | 描述 |
---|---|
AWSElasticBlockStore | AWS公有云提供的Elastic Block Store |
AzureFile | Azure公有云提供的File |
AzureDisk | Azure公有云提供的Disk |
CephFS | 一種開源共享存儲系統(tǒng) |
Cinder | OpenStack塊存儲系統(tǒng) |
FC (Fibre Channel) | 光纖存儲設備 |
FlexVolume | 一種插件式的存儲機制 |
Flocker | 一種開源共享存儲系統(tǒng) |
GCEPersistentDisk | GCE公有云提供的Persistent Disk |
Glusterfs | 一種開源共享存儲系統(tǒng) |
HostPath | 宿主機目錄,僅用于單機測試 |
iSCSI | iSCSI存儲設備 |
Local | 本地存儲設備,從Kubernetes 1.7版本開始引入,到1.14版本時達到穩(wěn)定版本,目前可以通過指定塊設備(Block Device) 提供Local PV,或通過社區(qū)開發(fā)的sig-storage-local-static-provisioner插件管理Local PV的生命周期 |
NFS | 網絡文件系統(tǒng) |
Portworx Volumes | Portworx提供的存儲服務 |
Quobyte Volumes | Quobyte提供的存儲服務 |
RBD (Ceph Block Device) | Ceph塊存儲 |
ScaleIO Volumes | DellEMC的存儲設備 |
StorageOS | StorageOS提供的存儲服務 |
VsphereVolume | VMWare提供的存儲系統(tǒng) |
2.1 示例配置詳解
下面的示例聲明的PV具有如下屬性:5GiB
存儲空間,存儲卷模式為 Filesystem
,訪問模式為ReadWriteOnce
,存儲類型為slow
(要求在系統(tǒng)中己存在名稱為“slow
”的StorageClass
),回收策略為Recycle
,并且后端存儲類型為nfs
(設置了 NFS Server
的IP
地址和路徑),同時設置了掛載選項 (mountOptions
)。
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv1
spec:
capacity:
Storage: 5Gi
volumeMode: Filesystem
accessModes:
- ReadwriteOnce
persistentVolumeReclaimPolicy: Recycle
storageClassName: slow
mountoptions:
- hard
- nfsvers=4.1
nfs:
path: /tmp
server: 172.17.0.2
PV資源對象需要設置的關鍵配置參數(shù)如下:
2.1.1 存儲容量 (Capacity)
描述存儲的容量,目前僅支持對存儲空間的設置 (storage=xx),未來可能加入IOPS、吞吐率等設置。
2.1.2 存儲卷模式 (Volume Modes)
可以設置的選項包括Filesystem(文件系統(tǒng),默認值)和Block(塊設備):
- 文件系統(tǒng)模式的PV將以目錄(Directory)形式掛載到Pod內;
- 塊設備,如果設備是空的,Kubernetes則會自動在塊設備上創(chuàng)建一個文件系統(tǒng)。支持塊設備的存儲類型會以裸設備 (Raw Block Device) 的形式掛載到容器內,并且不會創(chuàng)建任何文件系統(tǒng),適用于需要直接操作裸設備(速度最快)的應用程序。
目前有以下PV類型支持裸塊設備類型:AWSElasticBlockStore AzureDisk、 FC ( Fibre Channel ) 、 GCEPersistentDisk isCsI Local volume、 OpenStack Cinder、 RBD (Ceph Block Device) VsphereVolume。
下面的示例使用了塊設備的PV定義:
apiVersion: v1
kind: PersistentVolume
metadata:
name: block-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
volumeMode: Block
fd:
targetWWNs: ["50060e801049cfd1"]
lun: 0
readonly: false
2.1.3 訪問模式 (Access Modes)
PV存儲卷在掛載到宿主機系統(tǒng)上時,可以設置不同的訪問模式 (Access Modes
)。PV支持哪些訪問模式由存儲提供商提供支持,例如NFS可以支持多個客戶端同時讀寫(ReadWriteMany)模式,但一個特定的NFS PV也可以以只讀(Read-only)模式導出到服務器上。
Kubernetes支持的訪問模式如下:
- ReadWriteOnce (RWO):讀寫權限,并且只能被單個Node掛載;
- ReadOnlyMany (ROX):只讀權限,允許被多個Node掛載;
- ReadWriteMany(RWX):讀寫權限,允許被多個Node掛載。
某些PV
可能支持多種訪問模式,但PV
在掛載時只能使用一種訪問模式,多種訪問模式不能同時生效。
2.1.4 存儲類別(Class)
PV可以設定其存儲的類別,通過 storageClassName
參數(shù)指定一個 StorageClass
資源對象的名稱。具有特定類別的PV
只能與請求了該類別的PVC
綁定。未設定類別的PV
則只能與不請求任何類別的PVC
綁定。
2.1.5 回收策略 (Reclaim Policy)
通過PV
定義中的persistentVolumeReclaimPolicy字段進行設置,可選項如下:
- Retain: 保留數(shù)據(jù),需要手工處理;
-
Recycle: 簡單清除文件的操作(例如運行
rm -rf /thevolume/*
命令),只有 NFS 和 HostPath 兩種類型的 PV支持 Recycle 策略。 -
Delete: 與
PV
相連的后端存儲完成Volume
的刪除操作,AWSElasticBlockStore、 GCEPersistentDis、 AzureDisk和Cinder類型的PV支持 Delete策略。
2.1.6 掛載選項 (Mount Options)
在將PV
掛載到一個Node
上時,根據(jù)后端存儲的特點,可能需要設置額外的掛載選項的參數(shù),這個可以在PV
定義中的mountOptions
字段進行設置。
下面的例子為對一個類型為gcePersistentDisk的PV
設置掛載選項的參數(shù):
apiVersion: "V1"
kind: "PersistentVolume"
metadata:
name: gce-disk-1
spec:
capacity:
storage: "10Gi"
accessModes:
- "ReadwriteOnce"
mountoptions:
- hard
- nolock
- nfsvers=3
gcePersistentDisk:
fsType: "ext4"
pdName: "gce-disk-1"
目前,以下PV類型支持設置掛載選項:AWSElasticBlockStore AzureDisk、 AzureFile、 CephFS、 Cinder ( OpenStack block storage) GCEPersistentDisk、 Glusterfs、 NFS、 Quobyte Volumes、 RBD ( Ceph Block Device)、 StorageOS、 VsphereVolume、 iSCSI。
注意:Kubernetes不會對掛載選項進行驗證,如果設置了錯誤的掛載選項, 則掛載將會失敗。
2.1.6 節(jié)點親和性 (Node Affinity)
PV可以設置節(jié)點親和性來限制只能通過某些Node訪問Volume,可以在PV定義的nodeAffinity字段中進行設置。使用這些Volume的Pod將被調度到滿足條件的 Node上。
公有云提供的存儲卷(如:AWSElasticBlockStore、GCEPersistentDisk、 AzureDisk等)都由公有云自動完成節(jié)點親和性設置,無須用戶手工設置。
對于 Local類型的PV,需要手工設置,例如:
apiVersion: v1
kind: PersistentVolume
metadata:
name: example-local-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadwriteOnce
persistentVolumeReclaimPolicy: Delete
storageclassName: local-storage
1ocal:
path: /mnt/disks/ssal
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- my-node
某個PV
在生命周期中可能處于以下4個階段(Phase
)之一:
- Available:可用狀態(tài),還未與某個PVC綁定;
- Bound:已與某個PVC綁定;
- Released:與之綁定的PVC已被刪除,但未完成資源回收,不能被其他 PVC使用;
- Failed:自動資源回收失敗。
在定義了PV
資源之后,就需要通過定義PVC
來使用PV
資源了。文章來源:http://www.zghlxwxcb.cn/news/detail-604697.html
03 文末
本文主要講解了PV的一些概念以及配置詳解,希望能幫助到大家,謝謝大家的閱讀,本文完!文章來源地址http://www.zghlxwxcb.cn/news/detail-604697.html
到了這里,關于k8s教程(Volume篇)-PV詳解的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!