全部產品
Search
文件中心

Container Service for Kubernetes:使用NAS動態儲存裝置卷

更新時間:Nov 01, 2024

在NAS檔案系統中通過建立子目錄並將其映射為一個動態PV提供給應用。本文介紹如何使用NAS動態儲存裝置卷。

前提條件

注意事項

若您在應用模板中配置了securityContext.fsgroup參數,kubelet在儲存卷掛載完成後會執行chmodchown操作,導致掛載時間過長。

說明

若已配置securityContext.fsgroup參數,且需要減少掛載時間。具體操作,請參見NAS儲存卷掛載時間延長

建立動態NAS卷

  1. 配置StorageClass。

    配置樣本如下所示:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      server: "23a9649583-i****.cn-shenzhen.nas.aliyuncs.com:/nasroot1/"
      driver: flexvolume
    provisioner: alicloud/nas
    reclaimPolicy: Delete

    參數

    說明

    mountOptions

    表示產生的PV Options配置,掛載NAS卷時使用這個Options進行掛載。

    server

    表示產生目標PV所使用NAS掛載點列表。格式為 nfsurl1:/path1,nfsurl2:/path2;當配置多個Server時,通過此StorageClass建立的PV會輪詢使用上述Server作為配置參數;極速NAS配置路徑需要以/share開頭。

    driver

    支援Flexvolume、NFS兩種驅動,預設為NFS。

    reclaimPolicy

    PV的回收策略,建議配置為Retain

    • 當配置為Delete時,刪除PV後NAS檔案系統中的對應目錄會預設修改名稱(例如,path-name會被修改為archived-path-name)。

    • 如果需要刪除檔案系統中對應的儲存目錄,可在StorageClass中配置archiveOnDeletefalse

  2. 在StatefulSet中使用NAS動態儲存裝置卷。

    使用以下樣本建立Service及StatefulSet應用:

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      ports:
      - port: 80
        name: web
      clusterIP: None
      selector:
        app: nginx
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      selector:
        matchLabels:
          app: nginx
      serviceName: "nginx"
      replicas: 5
      volumeClaimTemplates:
      - metadata:
          name: html
        spec:
          accessModes:
            - ReadWriteOnce
          storageClassName: alicloud-nas
          resources:
            requests:
              storage: 2Gi
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx:alpine
            volumeMounts:
            - mountPath: "/data"
              name: html