環境準備
集羣創建、依賴配置、CSI插件部署等請參考:CSI部署詳解
創建NAS卷
到NAS控制檯創建NAS盤:參考文檔
到NAS控制檯創建NAS掛載點:參考文檔
注意:NAS掛載點需要和集羣節點在同一個vpc內;
創建靜態PV、PVC
通過下面模板創建靜態卷PV、PVC:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nas-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: nas-csi-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
csi:
driver: nasplugin.csi.alibabacloud.com
volumeHandle: 0790b4a325
volumeAttributes:
host: "0790b4a325-xyn4.cn-hangzhou.nas.aliyuncs.com"
path: "/csi"
vers: "3"
驅動類型爲:nasplugin.csi.alibabacloud.com,表示使用阿里雲NAS CSI插件;
volumeHandle:PV Handler,可以配置爲一個隨機值;
host、path、vers:分別表示NAS掛載點、掛載子目錄、nas目標版本;
# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nas-pvc Bound nas-csi-pv 5Gi RWO 34m
# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
nas-csi-pv 5Gi RWO Retain Bound default/nas-pvc 34m
創建應用
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-nas
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.7.9
ports:
- containerPort: 80
volumeMounts:
- name: nas-pvc
mountPath: "/data"
volumes:
- name: nas-pvc
persistentVolumeClaim:
claimName: nas-pvc
驗證掛載、高可用
查看pod,驗證NAS掛載成功,創建測試文件;
# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-nas-6744df4f6b-krqc2 1/1 Running 0 20m
# kubectl exec nginx-nas-6744df4f6b-krqc2 mount | grep nfs
0790b4a325-xyn4.cn-hangzhou.nas.aliyuncs.com:/csi on /data type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,nolock,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.252,mountvers=3,mountport=4002,mountproto=tcp,local_lock=all,addr=192.168.1.252)
# kubectl exec nginx-nas-6744df4f6b-krqc2 ls /data
# kubectl exec nginx-nas-6744df4f6b-krqc2 touch /data/test
# kubectl exec nginx-nas-6744df4f6b-krqc2 ls /data
test
刪除Pod,查看重建Pod是否數據穩定;
# kubectl delete pod nginx-nas-6744df4f6b-krqc2
pod "nginx-nas-6744df4f6b-krqc2" deleted
# kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-nas-6744df4f6b-d6ds9 1/1 Running 0 10s
# kubectl exec nginx-nas-6744df4f6b-d6ds9 ls /data
test