全部產品
Search
文件中心

Container Service for Kubernetes:使用CNFS管理NAS共用儲存卷(推薦)

更新時間:Jun 19, 2024

Container Service Kubernetes 版支援以NAS共用儲存卷的方式掛載和使用CNFS。通過CNFS管理NAS共用儲存卷,您可以在多個應用或Pod之間掛載同一個NAS檔案系統的相同目錄,以解決Pod之間共用資料的問題。本文以StatefulSet類型應用為例介紹如何使用CNFS管理NAS共用儲存卷。

前提條件

步驟一:建立共用儲存卷的工作負載

  • 建立名為cnfs-nas-static-pv的PV,PV中引用名稱為cnfs-nas-filesystem的CNFS,該CNFS為您已建立的NAS檔案名稱。

  • 建立名為cnfs-nas-static-pvc的PVC,將PV和PVC進行綁定。

  • 建立名為cnfs-nas-static-sts的StatefulSet,StatefulSet中使用busybox鏡像掛載PVC,並將1 G的臨時資料1G.tmpfile寫入掛載點中。

展開查看建立工作負載的YAML檔案

cat << EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: cnfs-nas-static-pv
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 50Gi
  csi:
    driver: nasplugin.csi.alibabacloud.com
    fsType: nfs
    volumeAttributes:
      containerNetworkFileSystem: cnfs-nas-filesystem # 引用名稱為cnfs-nas-filesystem的CNFS對象。
      mountProtocol: nfs
      path: /
      volumeAs: subpath
      volumeCapacity: "true"
    volumeHandle: cnfs-nas-static-pv
  mountOptions:
  - nolock,tcp,noresvport
  - vers=3
  persistentVolumeReclaimPolicy: Delete
  storageClassName: cnfs-nas-sc
  volumeMode: Filesystem
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cnfs-nas-static-pvc
  namespace: default
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 50Gi
  storageClassName: cnfs-nas-sc
  volumeMode: Filesystem
  volumeName: cnfs-nas-static-pv # 引用名稱為cnfs-nas-static-pv的PV對象。
status:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 50Gi
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: cnfs-nas-static-sts
  labels:
    app: busybox
spec:
  serviceName: "busybox"
  replicas: 2
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      containers:
      - name: busybox
        image: busybox
        command: ["/bin/sh"]
        args: ["-c", "sleep 3600;"]
        volumeMounts:
        - mountPath: "/data"
          name: cnfs-nas-static-pvc
      volumes:
      - name: cnfs-nas-static-pvc
        persistentVolumeClaim:
          claimName: cnfs-nas-static-pvc # 引用名稱為cnfs-nas-static-pvc的PVC對象。
EOF

步驟二:查看掛載情況

執行以下命令,查看掛載情況。

kubectl exec cnfs-nas-static-sts-0 -- mount |grep nfs

預期輸出:

971134b0e8-****.cn-zhangjiakou.nas.aliyuncs.com:/ on /data type nfs (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other)

預期輸出顯示有掛載點,說明掛載成功。

步驟三:查看持久化資料是否寫入成功

執行以下命令,寫入1 G的臨時檔案。

kubectl exec cnfs-nas-static-sts-0 -ti -- sh -c 'dd if=/dev/zero of=/data/1G.tmpfile bs=1G count=1;'

執行以下命令,查看1 G的臨時檔案是否寫入成功。

kubectl exec cnfs-nas-static-sts-0 -- ls -arlth /data

預期輸出:

total 1G
-rw-r--r--    1 root     root        1.0G Dec 15 12:11 1G.tmpfile

預期輸出表明,在/data下已經成功寫入1 G的臨時檔案1G.tmpfile

步驟四:查看寫入的資料是否在其他Pod內共用

執行以下命令,查看寫入的1 G的臨時檔案是否在其他Pod cnfs-nas-static-sts-1中共用。

kubectl exec cnfs-nas-static-sts-1 -- ls -arlth /data

預期輸出:

total 1G
-rw-r--r--    1 root     root        1.0G Dec 15 12:11 1G.tmpfile

預期輸出表明,在Pod cnfs-nas-static-sts-0與Pod cnfs-nas-static-sts-1中共用寫入了1 G的臨時檔案1G.tmpfile

說明

在不同的Pod中寫入共用儲存資料時,CNFS不保證資料的一致性,避免多次寫入同一檔案,以免對檔案造成損壞。

相關文檔