阿里云Kubernetes CSI实践—NAS动态存储卷使用
1. 前言
NAS存儲盤能將nfs(網(wǎng)絡(luò)文件系統(tǒng))掛載到你的Pod中,阿里云Kubernetes CSI支持靜態(tài)存儲卷掛載和動態(tài)存儲卷掛載2種方式, 在靜態(tài)存儲卷掛載的方式中,通常需要手動編輯和創(chuàng)建一個pv/pvc進(jìn)行掛載,當(dāng)需要的pv/pvc數(shù)量很大的時候,手動創(chuàng)建就顯得非常繁瑣了,這時動態(tài)存儲卷掛載的功能可以滿足您的需求。本文演示如何使用NAS動態(tài)存儲卷。
2. 部署csi-nas-plugin
如何你的Kubernetes集群中還沒有部署, 請參考以下步驟進(jìn)行部署:
2.1 部署csi-provisioner
$ kubectl create -f https://raw.githubusercontent.com/kubernetes-sigs/alibaba-cloud-csi-driver/master/deploy/nas/nas-provisioner.yaml2.2 部署csi-nasplugin
$ kubectl create -f https://raw.githubusercontent.com/kubernetes-sigs/alibaba-cloud-csi-driver/master/deploy/nas/nas-plugin.yaml2.3 檢查運行狀態(tài)
$ kubectl -nkube-system get po -o wide |grep csi csi-nasplugin-7mbmx 2/2 Running 0 csi-nasplugin-89t9v 2/2 Running 0 csi-nasplugin-8fw5p 2/2 Running 0 csi-nasplugin-grbqn 2/2 Running 0 csi-nasplugin-ks8mw 2/2 Running 0 csi-nasplugin-pp5g7 2/2 Running 0 csi-provisioner-0 2/2 Running 03. 使用NAS動態(tài)存儲卷
目前阿里云Kubernetes CSI支持2種類型的NAS動態(tài)存儲卷掛載:subpath方式和filesystem方式。
3.1?subpath類型的NAS動態(tài)存儲卷使用
3.1.1 使用場景
當(dāng)你的多個Kubernetes應(yīng)用或者Pod需要掛載相同的NAS存儲卷共享數(shù)據(jù)時,或不同的Pod掛載相同NAS文件系統(tǒng)的不同子目錄時, 可以使用subpath類型的NAS動態(tài)存儲卷方式。
3.1.2 創(chuàng)建NAS文件系統(tǒng)和掛載點
subpath的方式要求用戶首先使用NAS控制臺?或?SDK/API?創(chuàng)建好NAS文件系統(tǒng)和掛載點。
文件系統(tǒng):
掛載點:
3.1.3 創(chuàng)建StoragClass
編輯storageclass.yaml文件, 詳細(xì)參數(shù)說明見:https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/nas-dynamic.md
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata:name: alicloud-nas-subpath mountOptions: - nolock,tcp,noresvport - vers=3 parameters:volumeAs: subpathserver: "xxxxxxx.cn-hangzhou.nas.aliyuncs.com:/k8s/" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain運行以下命令創(chuàng)建StorageClass?alicloud-nas-subpath
$ kubectl create -f storageclass.yaml3.1.4 創(chuàng)建PV/PVC和Pod掛載NAS存儲卷
創(chuàng)建Pod?nginx-1?nginx-2共享NAS存儲卷的同一個子目錄,?pvc.yaml?nginx-1.yaml和nginx-2.yaml文件內(nèi)容如下:
pvc.yaml
nginx-1.yaml:
apiVersion: apps/v1 kind: Deployment metadata:name: deployment-nas-1labels:app: nginx-1 spec:selector:matchLabels:app: nginx-1template:metadata:labels:app: nginx-1spec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 80volumeMounts:- name: nas-pvcmountPath: "/data"volumes:- name: nas-pvcpersistentVolumeClaim:claimName: nas-csi-pvcnginx-2.yaml
apiVersion: apps/v1 kind: Deployment metadata:name: deployment-nas-2labels:app: nginx-2 spec:selector:matchLabels:app: nginx-2template:metadata:labels:app: nginx-2spec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 80volumeMounts:- name: nas-pvcmountPath: "/data"volumes:- name: nas-pvcpersistentVolumeClaim:claimName: nas-csi-pvc創(chuàng)建pvc和deployment:
$ kubectl create -f pvc.yaml -f nginx-1.yaml -f nginx-2.yaml$ kubectl get po NAME READY STATUS RESTARTS AGE deployment-nas-1-5b5cdb85f6-nhklx 1/1 Running 0 32s deployment-nas-2-c5bb4746c-4jw5l 1/1 Running 0 32s在這種情況下, NAS存儲卷的xxxxxxx.cn-hangzhou.nas.aliyuncs.com:/share/nas-79438493-f3e0-11e9-bbe5-00163e09c2be?會同時掛載到deployment-nas-1-5b5cdb85f6-nhklx?和?deployment-nas-2-c5bb4746c-4jw5l?的?/data目錄下。?注意: "/share" 為StorageClass中指定的subpath,"nas-79438493-f3e0-11e9-bbe5-00163e09c2be"為pv的name
如果你需要為不同的Pod掛載同一個NAS文件系統(tǒng)的不同子目錄, 則需要分別創(chuàng)建pvc-1和nginx-1以及pvc-2和nginx-2。
3.2?filesystem類型的NAS動態(tài)存儲卷使用
注意: filesystem類型的NAS動態(tài)卷在刪除時默認(rèn)保留文件系統(tǒng)和掛載點, 若需要在釋放pv資源的同時釋放NAS文件系統(tǒng)和掛載點, 則需要同時設(shè)置StorageClass中的reclaimPolicy為Delete且deleteVolume的值為"true"
3.2.1 使用場景
在3.1中的subpath方式中,你需要首先手動創(chuàng)建NAS文件系統(tǒng)和掛載點。 當(dāng)你的Kubernetes應(yīng)用需要動態(tài)創(chuàng)建和刪除NAS文件系統(tǒng)和掛載點時, 可以使用filesystem類型。?注意:使用filesystem類型NAS存儲卷的Pod只能創(chuàng)建一個文件系統(tǒng)和一個掛載點, 多個Pod之間無法共享一個存儲卷
3.2.2 創(chuàng)建StorageClass
編輯storageclass.yaml文件, 詳細(xì)參數(shù)說明見:https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/nas-dynamic.md
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata:name: alicloud-nas-fs mountOptions: - nolock,tcp,noresvport - vers=3 parameters:volumeAs: filesystemvpcId: "vpc-xxxxxxxxxxxx"vSwitchId: "vsw-xxxxxxxxx"deleteVolume: "false" provisioner: nasplugin.csi.alibabacloud.com reclaimPolicy: Retain運行以下命令創(chuàng)建StorageClass?alicloud-nas-subpath
$ kubectl create -f storageclass.yaml3.2.3 創(chuàng)建PV/PVC和Pod掛載NAS存儲卷
pvc.yaml?nginx.yaml文件內(nèi)容如下:
pvc.yaml
nginx.yaml
apiVersion: apps/v1 kind: Deployment metadata:name: deployment-nas-fslabels:app: nginx spec:selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.7.9ports:- containerPort: 80volumeMounts:- name: nas-pvcmountPath: "/data"volumes:- name: nas-pvcpersistentVolumeClaim:claimName: nas-csi-pvc-fs創(chuàng)建pvc和deployment:
$ kubectl create -f pvc.yaml -f nginx.yaml在這種場景下, csi會在pvc創(chuàng)建時動態(tài)新建NAS文件系統(tǒng)和掛載點, pvc刪除時動態(tài)刪除掛載點和文件系統(tǒng)。
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的阿里云Kubernetes CSI实践—NAS动态存储卷使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 避开这2个误区,测试目标 KPI 不再难
- 下一篇: 阿里开源!云原生应用自动化引擎 Open