NAS儲存卷適用於巨量資料分析、共用資料、Web應用以及儲存日誌等情境。除使用靜態儲存卷外,您也可以建立PVC並配置StorageClass來實現儲存資源的動態分配,讓系統為您自動預留持久化儲存卷,無需預先手動建立和配置儲存資源。您可以通過subpath方式、sharepath方式以及filesystem方式掛載NAS動態儲存裝置卷。
前提條件
叢集預設已安裝CSI組件。如需升級請參見升級csi-plugin和csi-provisioner。
說明如果您叢集中使用Flexvolume組件,由於Flexvolume已廢棄,請參見遷移Flexvolume至CSI完成遷移後再進行掛載。您可以在 ,在儲存頁簽下確認儲存群組件類型。
已通過kubectl串連叢集。具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集。
使用限制
不支援掛載SMB協議的NAS檔案系統。
通用NAS與極速NAS在掛載連通性、檔案系統數量及協議類型等方面存在相應約束條件。更多資訊,請參見使用限制。
注意事項
NAS為共用儲存,一個NAS儲存卷可以掛載到多個Pod上,可能出現多個Pod同時寫入資料的問題,需應用自行確保資料一致性。關於NAS並發寫入的一些限制條件,請參見如何避免多進程或多用戶端並發寫同一記錄檔可能出現的異常?和如何解決向NFS檔案系統中寫入資料延遲問題?
NAS掛載點建立後,等待一定時間,待掛載點狀態為可用後方可使用。請勿刪除掛載點,否則會造成系統無響應。
在使用極速型NAS檔案系統時,配置動態儲存裝置卷StorageClass中的
path
需要以/share
為父目錄。例如,0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/share/subpath
表示Pod掛載的NAS檔案系統的子目錄為/share/subpath
。若您在應用模板中配置了securityContext.fsgroup參數,kubelet在儲存卷掛載完成後會執行
chmod
或chown
操作,導致掛載時間延長。若已配置securityContext.fsgroup參數,且需要減少掛載時間。具體操作,請參見NAS儲存卷掛載時間延長。
掛載說明
您可以通過subpath方式、sharepath方式以及filesystem方式掛載NAS動態儲存裝置卷,使用subpath方式和sharepath方式掛載時,您需要提前建立NAS檔案系統和掛載點,使用filesystem方式掛載無需提前建立。
使用subpath方式掛載:當多個應用或者Pod需要掛載同一個NAS檔案系統共用資料時,或者不同的Pod掛載同一個NAS檔案系統的不同子目錄。
使用sharepath方式掛載:如果您需要在多個跨命名空間的Pod中掛載同一個NAS目錄。
使用filesystem方式掛載:當應用需要動態建立和刪除NAS檔案系統和掛載點時,CSI組件在PVC建立時會自動動態建立NAS檔案系統和掛載點,建立一個PVC,就會建立一個NAS檔案系統,PVC刪除時動態刪除掛載點和NAS檔案系統。僅支援kubectl命令列操作。
步驟一:建立NAS檔案系統和掛載點
不同類型的NAS檔案系統支援的地區、可用性區域不同。請根據業務需求、叢集所屬地區和叢集中Pod使用的VPC和交換器資訊,確定所需要建立的NAS檔案系統和掛載點。
通用型NAS與極速型NAS在掛載連通性、檔案系統數量及協議類型等方面存在相應約束條件。更多資訊,請參見使用限制。
步驟二:掛載NAS動態儲存裝置卷
使用subpath方式掛載
kubectl
1、建立儲存類StorageClass
儲存以下內容至alicloud-nas-subpath.yaml檔案,並根據需求修改相關參數。
allowVolumeExpansion: true apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-subpath mountOptions: - nolock,tcp,noresvport - vers=3 parameters: volumeAs: subpath server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain
參數
描述
allowVolumeExpansion
僅通用型NAS檔案系統支援設定此參數。開啟時,該StorageClass動態建立的PV將會被配置NAS目錄配額,並支援通過編輯PVC進行卷容量擴容。
說明NAS配額的生效是非同步,即動態建立出PV後,目錄配額不能保證立即生效,且快速連續寫入大量資料可能會超出設定的容量上限。關於NAS目錄配額的更多資訊,請參見目錄配額。
mountOptions
掛載NAS的
options
參數在mountOptions
中配置,包括NFS協議版本。volumeAs
設定為
subpath
。取值:subpath
:表示建立子目錄類型的PV。您需要手動建立NAS檔案系統以及掛載點。一個PV對應一個NAS檔案系統的子目錄。sharepath
:表示建立PV時不會建立實際的目錄,將會直接使用StorageClass中設定的路徑,這意味著每個PV實際上會對應同一個NAS目錄,便於跨Namespace共用目錄的使用情境。filesystem
:表示Provisioner會自動建立NAS檔案系統,一個PV對應一個NAS檔案系統。
server
表示建立子目錄類型的PV時,NAS檔案系統的掛載點地址,不設定則預設為/。
重要此處需替換為實際的掛載點地址,關於如何查看掛載點地址,請參見查看掛載點地址。
provisioner
驅動類型。本例中取值為
nasplugin.csi.alibabacloud.com
,表示使用阿里雲NAS CSI外掛程式。reclaimPolicy
PV的回收策略,預設為
Delete
,支援Retain
。Delete模式:需配合
archiveOnDelete
一起使用。當
archiveOnDelete
為true
時,刪除PVC時,PV和NAS檔案只會被重新命名,不會被刪除。當
archiveOnDelete
為false
時,刪除PVC時,PV和NAS檔案會被真正刪除。
Retain模式:刪除PVC的時候,PV和NAS檔案系統不會被刪除,需要您手動刪除。
如果資料安全性要求高,推薦使用
Retain
方式以免誤刪資料。archiveOnDelete
表示在
reclaimPolicy
為Delete
時,是否刪除後端儲存。因為NAS為共用儲存,添加此選項進行雙重確認。在參數parameters
下配置。true
(預設):不會真正刪除目錄或檔案,而是將其重新命名,格式為archived-{pvName}.{timestamp}
。false
:會真正刪除後端對應的儲存資源。
說明業務流量非常大時,不建議配置為false。更多資訊,請參見使用NAS動態儲存裝置卷時Controller的任務隊列已滿且無法建立新的PV。
執行以下命令建立StorageClass。
kubectl create -f alicloud-nas-subpath.yaml
2、建立PVC
儲存以下內容至pvc.yaml檔案,並根據需求修改相關參數。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-csi-pvc spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-subpath resources: requests: storage: 20Gi
參數
說明
name
PVC名稱。
accessModes
配置訪問模式。預設為
ReadWriteMany
,支援ReadWriteOnce
或ReadOnlyMany
。storageClassName
StorageClass的名稱,用於綁定StorageClass。
storage
聲明應用儲存使用量。
重要NAS配置PVC的容量僅在檔案系統類型為通用型NAS,且StorageClass設定
allowVolumeExpansion
為true
時才會生效。此時,CSI將按照PVC容量設定NAS目錄配額。NAS目錄配額單位為GiB,實際設定的容量上限為PVC容量按GiB單位向上取整。建立PVC。
kubectl create -f pvc.yaml
3、建立應用並掛載NAS
建立應用nginx-1和nginx-2,使其共用同一個NAS檔案系統的同一個子目錄。
儲存以下內容至nginx-1.yaml檔案中。
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-nas-1 labels: app: nginx-1 spec: selector: matchLabels: app: nginx-1 template: metadata: labels: app: nginx-1 spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: nas-pvc mountPath: "/data" volumes: - name: nas-pvc persistentVolumeClaim: claimName: nas-csi-pvc
mountPath
:NAS在容器中掛載的位置。claimName
:PVC的名稱,用於綁定PVC。本例中為nas-csi-pvc
。
儲存以下內容至nginx-2.yaml檔案中。
apiVersion: apps/v1 kind: Deployment metadata: name: deployment-nas-2 labels: app: nginx-2 spec: selector: matchLabels: app: nginx-2 template: metadata: labels: app: nginx-2 spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: nas-pvc mountPath: "/data" volumes: - name: nas-pvc persistentVolumeClaim: claimName: nas-csi-pvc
mountPath
:NAS在容器中掛載的位置。本例為/data
。claimName
:輸入與nginx-1
應用相同的PVC名稱,本例為nas-csi-pvc
。
建立應用nginx-1和nginx-2。
kubectl create -f nginx-1.yaml -f nginx-2.yaml
查看Pod資訊。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE deployment-nas-1-5b5cdb85f6-a**** 1/1 Running 0 32s deployment-nas-2-c5bb4746c-b**** 1/1 Running 0 32s
為不同的Pod掛載同一個NAS檔案系統的同一個子目錄
/data
,即掛載點為0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/nas-79438493-f3e0-11e9-bbe5-00163e09****
的NAS儲存卷已同時掛載到應用deployment-nas-1-5b5cdb85f6-a****
和deployment-nas-2-c5bb4746c-b****
的/data目錄下。其中:/k8s
為StorageClass中指定的subpath。nas-79438493-f3e0-11e9-bbe5-00163e09****
為自動建立的NAS儲存卷PV的名稱。
說明如果需要為不同的Pod掛載同一個NAS檔案系統的不同子目錄,則需要分別建立pvc-1和nginx-1以及pvc-2和nginx-2。
控制台
1、建立儲存類StorageClass
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在儲存類頁面,單擊右上方的建立。
在建立對話方塊中,StorageClass的相關配置完成後,單擊建立。
主要配置項如下所示。
配置項
說明
樣本值
名稱
StorageClass的名稱。
名稱必須以小寫字母開頭,只能包含小寫字母、數字、小數點(.)和中劃線(-)。
alicloud-nas-subpath
儲存卷類型
選擇NAS。
NAS
選擇掛載點
NAS檔案系統的掛載點地址。關於如何查看掛載點地址,請參見查看掛載點地址。
若無可選的掛載點地址,請先建立NAS檔案系統。具體操作,請參見建立NAS檔案系統和掛載點。
0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s/
儲存卷模式
儲存卷訪問模式。預設為共用目錄模式。取值:
共用目錄:即Sharepath方式掛載,所有儲存卷共用掛載路徑,即資料將儲存於
<bucket>:<path>/
下。子目錄:即Subpath方式掛載,建立儲存卷時在掛載路徑下自動建立子目錄,即資料將儲存於
<bucket>:<path>/<pv-name>/
下。說明子目錄模式僅在CSI組件為1.31.4及以上版本時生效,否則均為共用目錄模式。
子目錄
掛載路徑
NAS檔案系統中的掛載路徑。
如果NAS根目錄下沒有此子目錄,會預設建立後再進行掛載。
您可以不填此項,預設掛載到NAS根目錄。
極速型NAS需要以
/share
為根目錄,例如/share/data
。
/
回收策略
回收策略。支援Delete和Retain模式, 預設為Delete模式。
Delete模式:需配合
archiveOnDelete
一起使用。當
archiveOnDelete
為true
時,刪除PVC時,PV和NAS檔案只會被重新命名,不會被刪除。當
archiveOnDelete
為false
時,刪除PVC時,PV和NAS檔案會被真正刪除。
Retain模式:刪除PVC時,PV和NAS檔案系統不會被刪除,需要您手動刪除。
如果對資料安全性要求較高,推薦使用Retain模式,以免誤刪資料。
Retain
掛載選項
掛載NAS的選擇性參數,包括NFS協議版本等。
NFS協議版本號碼推薦使用v3,且極速類型NAS僅支援v3。關於NFS協議的更多資訊,請參見NFS協議。
保持預設
建立成功後,可在儲存類列表查看建立的StorageClass。
2、建立PVC
在叢集管理頁左側導覽列,選擇 。
在儲存聲明頁面,單擊右上方的建立。
在彈出的建立儲存聲明頁面中,配置完成後,單擊建立。
配置項
說明
樣本值
儲存宣告類型
選擇NAS。
NAS
名稱
建立的儲存聲明名稱在叢集內必須唯一。
pvc-nas
分配模式
本文中選擇使用儲存類動態建立。
使用儲存類動態建立
已有儲存類
單擊選擇儲存類,在選擇儲存類對話方塊目標儲存類右側操作列單擊選擇。
選擇上一步建立的alicloud-nas-subpath儲存類
總量
建立儲存卷的容量,此處設定的大小不會限制應用可使用的最大容量。
20Gi
訪問模式
預設為ReadWriteMany,也可選擇ReadWriteOnce或ReadOnlyMany。
ReadWriteMany
3、建立應用並掛載NAS
參考以下操作,分別建立應用 deployment-nas-1和 deployment-nas-2,使其共用同一個NAS檔案系統的同一個子目錄。
在叢集管理頁左側導覽列,選擇
。在無狀態頁面,單擊使用鏡像建立。
配置建立應用的參數資訊。
主要參數如下,其他參數保持預設即可。更多資訊,請參見建立無狀態工作負載Deployment。
配置項
參數
說明
樣本
應用基本資料
應用程式名稱
Deployment名稱,自訂輸入。格式要求請參考介面提示。
deployment-nas-1
副本數量
Deployment的副本數量。
2
容器配置
鏡像名稱
用於部署應用的鏡像地址。
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
所需資源
所需的vCPU和記憶體資源。
0.25 vCPU,0.5 GiB
資料卷
單擊增加雲端儲存聲明,然後完成參數配置。
掛載源:選擇之前建立的PVC。
容器路徑:輸入NAS檔案系統要掛載到的容器路徑。
掛載源:pvc-nas
容器路徑:/data
查看應用部署狀態。
在無狀態頁面,單擊應用程式名稱。
在容器組頁簽下,確認Pod已正常運行(狀態為Running)。
使用sharepath方式掛載
kubectl
1、建立儲存類StorageClass
儲存以下內容至alicloud-nas-subpath.yaml檔案,並根據需求修改相關參數。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: alicloud-nas-sharepath mountOptions: - nolock,tcp,noresvport - vers=3 parameters: volumeAs: sharepath server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/data" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain
參數
描述
mountOptions
掛載NAS的選擇性參數,包括NFS協議版本等。
NFS協議版本號碼推薦使用v3,且極速類型NAS僅支援v3。關於NFS協議的更多資訊,請參見NFS協議。
volumeAs
設定為
sharepath
。取值:subpath
:表示建立子目錄類型的PV。您需要手動建立NAS檔案系統以及掛載點。一個PV對應一個NAS檔案系統的子目錄。sharepath
:表示建立PV時不會建立實際的目錄,將會直接使用StorageClass裡設定的路徑,這意味著每個PV實際上會對應同一個NAS目錄,便於跨namespace共用目錄使用情境。filesystem
:表示Provisioner會自動建立NAS檔案系統,一個PV對應一個NAS檔案系統。
server
表示建立子目錄類型的PV時,NAS檔案系統的掛載點地址以及路徑,不設定路徑則預設為
/
。重要此處需替換為實際的掛載點地址,關於如何查看掛載點地址,請參見查看掛載點地址。
provisioner
驅動類型。此處須配置為
nasplugin.csi.alibabacloud.com
,表示使用阿里雲NAS CSI組件。reclaimPolicy
使用
sharepath
時必須要設定為Retain
。建立StorageClass。
kubectl create -f alicloud-nas-sharepath.yaml
2、在兩個不同命名空間下建立PVC
為實現跨命名空間下Pod的掛載NAS,您需要先建立兩個不同的命名空間。
執行以下命令,建立命名空間ns1和ns2。
kubectl create ns ns1 kubectl create ns ns2
儲存以下內容至pvc.yaml檔案,並根據需求修改相關參數。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-csi-pvc namespace: ns1 spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-sharepath resources: requests: storage: 20Gi --- kind: PersistentVolumeClaim apiVersion: v1 metadata: name: nas-csi-pvc namespace: ns2 spec: accessModes: - ReadWriteMany storageClassName: alicloud-nas-sharepath resources: requests: storage: 20Gi
參數
說明
name
PVC名稱。
accessModes
配置訪問模式。預設為
ReadWriteMany
,支援ReadWriteOnce
或ReadOnlyMany
。storageClassName
StorageClass的名稱,用於綁定StorageClass。
storage
聲明應用儲存使用量。
重要使用sharepath時,聲明不會實際產生效果。
建立PVC。
kubectl create -f pvc.yaml
3、建立應用並掛載
在兩個不同命名空間下分別建立應用,掛載相應命名空間下建立的PVC,它們將共用StorageClass中定義的NAS目錄。
儲存以下內容至nginx.yaml檔案中,包含兩個 Deployment。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: ns1 spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: nas-pvc mountPath: "/data" volumes: - name: nas-pvc persistentVolumeClaim: claimName: nas-csi-pvc --- apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: ns2 spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: nas-pvc mountPath: "/data" volumes: - name: nas-pvc persistentVolumeClaim: claimName: nas-csi-pvc
mountPath
:NAS在容器中掛載的位置。claimName
:PVC的名稱,用於綁定PVC。本例中為nas-csi-pvc
。
建立應用。
kubectl create -f nginx.yaml
查看Pod資訊。
kubectl get pod -A -l app=nginx
預期輸出:
NAMESPACE NAME READY STATUS RESTARTS AGE ns1 nginx-5b5cdb85f6-a**** 1/1 Running 0 32s ns2 nginx-c5bb4746c-b**** 1/1 Running 0 32s
為不同命名空間的Pod掛載同一個NAS檔案系統的同一個子目錄
/data
,即掛載點為0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/data
的NAS儲存卷已同時掛載到應用nginx-5b5cdb85f6-a****
和nginx-c5bb4746c-b****
的/data目錄下。
控制台
1、建立儲存類StorageClass
登入Container Service管理主控台,在左側導覽列選擇叢集。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇 。
在儲存類頁面,單擊右上方的建立。
在建立對話方塊中,StorageClass的相關配置完成後,單擊建立。
主要配置項如下所示。
配置項
說明
樣本值
名稱
StorageClass的名稱。
名稱必須以小寫字母開頭,只能包含小寫字母、數字、小數點(.)和中劃線(-)。
alicloud-nas-sharepath
儲存卷類型
選擇NAS。
NAS
選擇掛載點
NAS檔案系統的掛載點地址。關於如何查看掛載點地址,請參見查看掛載點地址。
若無可選的掛載點地址,請先建立NAS檔案系統。具體操作,請參見建立NAS檔案系統和掛載點。
0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/data
儲存卷模式
儲存卷訪問模式。預設為共用目錄模式。取值:
共用目錄:即Sharepath方式掛載,表示建立PV時不會建立實際的目錄,將會直接使用StorageClass裡設定的路徑,這意味著每個PV實際上會對應同一個NAS目錄,便於跨Namespace共用目錄使用情境。
子目錄:即Subpath方式掛載,表示建立子目錄類型的PV。您需要手動建立NAS檔案系統以及掛載點。一個PV對應一個NAS檔案系統的子目錄。
共用目錄
掛載路徑
NAS檔案系統中的掛載路徑。
如果NAS根目錄下沒有此子目錄,會預設建立後再進行掛載。
您可以不填此項,預設掛載到NAS根目錄。
極速型NAS需要以
/share
為根目錄,例如/share/data
。
/
回收策略
使用
sharepath
時必須要設定為Retain
。Retain
掛載選項
掛載NAS的選擇性參數,包括NFS協議版本等。
NFS協議版本號碼推薦使用v3,且極速類型NAS僅支援v3。關於NFS協議的更多資訊,請參見NFS協議。
保持預設
建立成功後,可在儲存類列表查看建立的StorageClass。
2、建立PVC
為實現應用跨Namespace共用目錄的掛載,您需要首先在控制台建立命名空間ns1和ns2。
建立命名空間ns1和ns2,請參見建立命名空間。
在叢集管理頁左側導覽列,選擇 。
在儲存聲明頁面,選擇命名空間為ns1,單擊建立。
在彈出的建立儲存聲明頁面中,配置完成後,單擊建立。
配置項
說明
樣本值
儲存宣告類型
選擇NAS。
NAS
名稱
建立的儲存聲明名稱在叢集內必須唯一。
pvc-nas
分配模式
本文中選擇使用儲存類動態建立。
使用儲存類動態建立
已有儲存類
單擊選擇儲存類,在選擇儲存類對話方塊目標儲存類右側操作列單擊選擇。
選擇上一步建立的儲存類alicloud-nas-sharepath
總量
建立儲存卷的容量。
20Gi
訪問模式
預設為ReadWriteMany,也可選擇ReadWriteOnce或ReadOnlyMany。
ReadWriteMany
參考以上操作,在命名空間ns2下建立pvc-nas。
3、建立應用並掛載NAS
在叢集管理頁左側導覽列,選擇
。在無狀態頁面,選擇命名空間為ns1,單擊使用鏡像建立。
配置建立應用的參數資訊。
主要參數如下,其他參數保持預設即可。更多資訊,請參見建立無狀態工作負載Deployment。
配置項
參數
說明
樣本
應用基本資料
應用程式名稱
Deployment名稱,自訂輸入。格式要求請參考介面提示。
nginx
副本數量
Deployment的副本數量。
2
容器配置
鏡像名稱
用於部署應用的鏡像地址。
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
所需資源
所需的vCPU和記憶體資源。
0.25 vCPU,0.5 GiB
資料卷
單擊增加雲端儲存聲明,然後完成參數配置。
掛載源:選擇之前建立的PVC。
容器路徑:輸入NAS檔案系統要掛載到的容器路徑。
掛載源:pvc-nas
容器路徑:/data
參考以上操作,在命名空間ns2下建立應用nginx。
查看應用部署狀態。
在無狀態頁面,單擊應用程式名稱。
在容器組頁簽下,確認Pod已正常運行(狀態為Running)。
步驟三:驗證NAS的儲存特性
以上建立的工作負載Deployment中包含2個Pod,2個Pod掛載了同一個NAS檔案系統,您可以通過以下方式對NAS儲存卷進行共用儲存和持久化儲存驗證。
重建Pod,然後在建立的Pod中查看NAS檔案系統中的資料是否存在,以此來驗證持久化儲存。
在一個Pod中建立檔案,然後在另一個Pod中查看檔案,以此來驗證共用儲存。
驗證NAS的持久化儲存
查看應用所在的Pod。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE deployment-nas-1-5b5cdb85f6-a**** 1/1 Running 0 32s deployment-nas-2-c5bb4746c-b**** 1/1 Running 0 32s
在一個Pod中建立檔案。
查看應用中掛載的
/data
路徑下有無檔案。以一個名為
deployment-nas-1-5b5cdb85f6-a****
的Pod為例。kubectl exec deployment-nas-1-5b5cdb85f6-a**** -- ls /data
無返回結果,表明/data路徑下無檔案。
在該Pod的
/data
路徑下建立檔案nas。kubectl exec deployment-nas-1-5b5cdb85f6-a**** -- touch /data/nas
在另一個Pod中查看建檔案。
以另一個名為
deployment-nas-2-c5bb4746c-b****
的Pod為例。kubectl exec deployment-nas-2-c5bb4746c-b**** -- ls /data
預期輸出:
nas
重建Pod。
刪除Pod。
kubectl delete pod deployment-nas-1-5b5cdb85f6-a****
同時在另一個視窗中,查看Pod刪除及Kubernetes重建Pod的過程。
kubectl get pod -w -l app=nginx
驗證刪除Pod後,NAS裡建立的檔案是否還存在。
查看重建的Pod名稱。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE deployment-nas-1-5b5cdm2g5-c**** 1/1 Running 0 32s deployment-nas-2-c5bb4746c-b**** 1/1 Running 0 32s
查看重建Pod的
/data
路徑下的檔案。以名為deployment-nas-1-5b5cdm2g5-c**** 的Pod為例。
kubectl exec deployment-nas-1-5b5cdm2g5-c**** -- ls /data
預期輸出:
nas
nas
檔案仍然存在,表明NAS的資料可持久化儲存。
驗證NAS的共用儲存
NAS儲存卷支援同時被多個Pod掛載,當某個Pod修改資料時,其餘Pod將自行實現資料的同步,根據以下樣本驗證NAS儲存卷的共用儲存特性:
查看部署的應用所在的Pod和NAS檔案。
執行以下命令,查看應用所在的Pod名稱。
kubectl get pod
預期輸出:
NAME READY STATUS RESTARTS AGE deployment-nas-1-5b5cdb85f6-a**** 1/1 Running 0 32s deployment-nas-2-c5bb4746c-b**** 1/1 Running 0 32s
查看2個Pod的
/data
路徑下的檔案。kubectl exec deployment-nas-1-5b5cdb85f6-a**** -- ls /data kubectl exec deployment-nas-2-c5bb4746c-b**** -- ls /data
無返回結果,說明當前儲存路徑
/data
下無檔案。
在任意一個Pod的
/data
路徑下建立檔案nas。以名為
deployment-nas-1-5b5cdb85f6-a****
的Pod為例。kubectl exec deployment-nas-1-5b5cdb85f6-a**** -- touch /data/nas
查看2個Pod的
/data
路徑下的檔案。查看名為
deployment-nas-1-5b5cdb85f6-a****
的Pod的/data
路徑下的檔案。kubectl exec deployment-nas-1-5b5cdb85f6-a**** -- ls /data
預期輸出:
nas
查看另一個名為
deployment-nas-2-c5bb4746c-b****
的Pod的/data
路徑下的檔案。kubectl exec deployment-nas-2-c5bb4746c-b**** -- ls /data
預期輸出:
nas
在任意一個Pod的
/data
下建立的檔案,兩個Pod下的/data
路徑下均存在此檔案,說明兩個Pod共用一個NAS。
常見問題
如何?NAS的使用者或使用者組隔離?
為確保不同使用者和使用者組之間資料的安全性,您可以參考以下操作對NAS的使用者或使用者組進行隔離。
使用以下YAML內容,在容器組內使用nobody使用者啟動進程,建立的目錄UID和GID為65534。
apiVersion: apps/v1 kind: StatefulSet metadata: name: nas-sts spec: selector: matchLabels: app: busybox serviceName: "busybox" replicas: 1 template: metadata: labels: app: busybox spec: securityContext: fsGroup: 65534 #建立目錄/檔案時,UID/GID為65534(nobody使用者)。 fsGroupChangePolicy: "OnRootMismatch" #只有根目錄的屬主與存取權限與卷所期望的許可權不一致時, 才改變其中內容的屬主和存取權限。 containers: - name: busybox image: busybox command: - sleep - "3600" securityContext: runAsUser: 65534 #所有容器內的進程都使用使用者ID為65534(nobody使用者)來運行。 runAsGroup: 65534 #所有容器中的進程都以主組ID為65534(nobody使用者)來運行。 allowPrivilegeEscalation: false volumeMounts: - name: nas-pvc mountPath: /data volumeClaimTemplates: - metadata: name: nas-pvc spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "alicloud-nas-subpath" resources: requests: storage: 100Gi
執行以下命令,在容器中啟動
top
命令,查看USER是否為nobody。kubectl exec nas-sts-0 -- "top"
預期輸出:
Mem: 11538180K used, 52037796K free, 5052K shrd, 253696K buff, 8865272K cached CPU: 0.1% usr 0.1% sys 0.0% nic 99.7% idle 0.0% io 0.0% irq 0.0% sirq Load average: 0.76 0.60 0.58 1/1458 54 PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND 49 0 nobody R 1328 0.0 9 0.0 top 1 0 nobody S 1316 0.0 10 0.0 sleep 3600
預期輸出表明,是
nobody
使用者執行的top
命令。執行以下命令,驗證在NAS掛載目錄下建立的目錄和檔案是否為
nobody
。kubectl exec nas-sts-0 -- sh -c "touch /data/test; mkdir /data/test-dir; ls -arlth /data/"
預期輸出:
total 5K drwxr-xr-x 1 root root 4.0K Aug 30 10:14 .. drwxr-sr-x 2 nobody nobody 4.0K Aug 30 10:14 test-dir -rw-r--r-- 1 nobody nobody 0 Aug 30 10:14 test drwxrwsrwx 3 root nobody 4.0K Aug 30 10:14 .
預期輸出表明,在
/data
下建立的test檔案和test-dir目錄中,UID和GID對應的使用者均為nobody使用者。
如何使用filesystem方式掛載NAS動態儲存裝置卷?
當應用需要動態建立和刪除NAS檔案系統和掛載點時,您可以使用filesystem方式掛載NAS,此情境下,CSI在PVC建立時將自動動態建立NAS檔案系統和掛載點,PVC刪除時動態刪除掛載點和NAS檔案系統。使用filesystem類型NAS儲存卷的Pod只能建立一個檔案系統和一個掛載點。
相關文檔
如需通過TLS掛載,請參見如何通過CSI使用TLS掛載NAS檔案系統?
如需使用CNFS託管NAS檔案系統,請參見通過CNFS管理NAS檔案系統(推薦)。
如需動態擴容NAS儲存卷,請參見使用CNFS自動擴容NAS儲存卷。
如需通過NAS的目錄配額功能,實現對儲存卷空間的有效控制。請參見擴容NAS儲存卷容量。