日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用NAS動態存儲卷

NAS存儲卷適用于大數據分析、共享數據、Web應用以及保存日志等場景。除使用靜態存儲卷外,您也可以創建PVC并配置StorageClass來實現存儲資源的動態分配,讓系統為您自動預留持久化存儲卷,無需預先手動創建和配置存儲資源。您可以通過subpath方式、sharepath方式以及filesystem方式掛載NAS動態存儲卷。

前提條件

  • 集群默認已安裝CSI組件。如需升級請參見升級csi-plugin和csi-provisioner

    說明

    如果您集群中使用Flexvolume組件,由于Flexvolume已廢棄,請參見遷移Flexvolume至CSI完成遷移后再進行掛載。您可以在運維管理 > 組件管理,在存儲頁簽下確認存儲組件類型。

使用限制

  • 不支持掛載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在存儲卷掛載完成后會執行chmodchown操作,導致掛載時間延長。若已配置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

  • 通用型NAS與極速型NAS在掛載連通性、文件系統數量及協議類型等方面存在相應約束條件。更多信息,請參見使用限制

  1. 登錄NAS控制臺

  2. 創建NAS文件系統。具體操作,請參見創建文件系統

    1. 文件系統列表頁面,單擊創建文件系統,然后選擇創建通用型NAS創建極速型NAS

    2. 在彈出面板完成NAS相關參數配置,然后單擊立即購買,完成后續操作。

      本文以通用型NAS為例,主要參數如下,更多信息,請參見創建文件系統

      配置項

      說明

      地域

      與集群一致。

      可用區

      選擇對應的可用區。

      協議類型

      選擇NFS。目前不支持掛載SMB協議的NAS文件系統。

      專有網絡VPC虛擬交換機

      僅針對通用型NAS。

      選擇集群中Pod使用的VPC和交換機。

步驟二:掛載NAS動態存儲卷

使用subpath方式掛載

kubectl

1、創建存儲類StorageClass

  1. 保存以下內容至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一起使用。

      • archiveOnDeletetrue時,刪除PVC時,PV和NAS文件只會被重命名,不會被刪除。

      • archiveOnDeletefalse時,刪除PVC時,PV和NAS文件會被真正刪除。

    • Retain模式:刪除PVC的時候,PV和NAS文件系統不會被刪除,需要您手動刪除。

    如果數據安全性要求高,推薦使用Retain方式以免誤刪數據。

    archiveOnDelete

    表示在reclaimPolicyDelete時,是否刪除后端存儲。因為NAS為共享存儲,添加此選項進行雙重確認。在參數parameters下配置。

    • true(默認):不會真正刪除目錄或文件,而是將其重命名,格式為archived-{pvName}.{timestamp}

    • false:會真正刪除后端對應的存儲資源。

    說明

    業務流量非常大時,不建議配置為false。更多信息,請參見使用NAS動態存儲卷時Controller的任務隊列已滿且無法創建新的PV

  2. 執行以下命令創建StorageClass。

    kubectl create -f alicloud-nas-subpath.yaml

2、創建PVC

  1. 保存以下內容至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,支持ReadWriteOnceReadOnlyMany

    storageClassName

    StorageClass的名稱,用于綁定StorageClass。

    storage

    聲明應用存儲使用量。

    重要

    NAS配置PVC的容量僅在文件系統類型為通用型NAS,且StorageClass設置allowVolumeExpansiontrue時才會生效。此時,CSI將按照PVC容量設置NAS目錄配額。NAS目錄配額單位為GiB,實際設置的容量上限為PVC容量按GiB單位向上取整。

  2. 創建PVC。

    kubectl create -f pvc.yaml

3、創建應用并掛載NAS

創建應用nginx-1和nginx-2,使其共享同一個NAS文件系統的同一個子目錄。

  1. 保存以下內容至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

  2. 保存以下內容至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

  3. 創建應用nginx-1和nginx-2。

    kubectl create -f nginx-1.yaml -f nginx-2.yaml
  4. 查看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

  1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

  2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇存儲 > 存儲類

  3. 存儲類頁面,單擊右上角的創建

  4. 創建對話框中,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

    /

    回收策略

    回收策略。支持DeleteRetain模式, 默認為Delete模式。

    • Delete模式:需配合archiveOnDelete一起使用。

      • archiveOnDeletetrue時,刪除PVC時,PV和NAS文件只會被重命名,不會被刪除。

      • archiveOnDeletefalse時,刪除PVC時,PV和NAS文件會被真正刪除。

    • Retain模式:刪除PVC時,PV和NAS文件系統不會被刪除,需要您手動刪除。

    如果對數據安全性要求較高,推薦使用Retain模式,以免誤刪數據。

    Retain

    掛載選項

    掛載NAS的可選參數,包括NFS協議版本等。

    NFS協議版本號推薦使用v3,且極速類型NAS僅支持v3。關于NFS協議的更多信息,請參見NFS協議

    保持默認

    創建成功后,可在存儲類列表查看創建的StorageClass。

2、創建PVC

  1. 在集群管理頁左側導航欄,選擇存儲 > 存儲聲明

  2. 存儲聲明頁面,單擊右上角的創建

  3. 在彈出的創建存儲聲明頁面中,配置完成后,單擊創建

    配置項

    說明

    示例值

    存儲聲明類型

    選擇NAS。

    NAS

    名稱

    創建的存儲聲明名稱在集群內必須唯一。

    pvc-nas

    分配模式

    本文中選擇使用存儲類動態創建

    使用存儲類動態創建

    已有存儲類

    單擊選擇存儲類,在選擇存儲類對話框目標存儲類右側操作列單擊選擇

    選擇上一步創建的alicloud-nas-subpath存儲類

    總量

    創建存儲卷的容量,此處設置的大小不會限制應用可使用的最大容量。

    20Gi

    訪問模式

    默認為ReadWriteMany,也可選擇ReadWriteOnceReadOnlyMany

    ReadWriteMany

3、創建應用并掛載NAS

參考以下操作,分別創建應用 deployment-nas-1和 deployment-nas-2,使其共享同一個NAS文件系統的同一個子目錄。

  1. 在集群管理頁左側導航欄,選擇工作負載 > 無狀態

  2. 無狀態頁面,單擊使用鏡像創建

  3. 配置創建應用的參數信息。

    主要參數如下,其他參數保持默認即可。更多信息,請參見創建無狀態工作負載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

    nas1.png

  4. 查看應用部署狀態。

    1. 無狀態頁面,單擊應用名稱。

    2. 容器組頁簽下,確認Pod已正常運行(狀態為Running)。

使用sharepath方式掛載

kubectl

1、創建存儲類StorageClass

  1. 保存以下內容至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

  2. 創建StorageClass。

    kubectl create -f alicloud-nas-sharepath.yaml

2、在兩個不同命名空間下創建PVC

為實現跨命名空間下Pod的掛載NAS,您需要先創建兩個不同的命名空間。

  1. 執行以下命令,創建命名空間ns1和ns2。

    kubectl create ns ns1
    kubectl create ns ns2
  2. 保存以下內容至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,支持ReadWriteOnceReadOnlyMany

    storageClassName

    StorageClass的名稱,用于綁定StorageClass。

    storage

    聲明應用存儲使用量。

    重要

    使用sharepath時,聲明不會實際產生效果。

  3. 創建PVC。

    kubectl create -f pvc.yaml

3、創建應用并掛載

  1. 在兩個不同命名空間下分別創建應用,掛載相應命名空間下創建的PVC,它們將共享StorageClass中定義的NAS目錄。

    1. 保存以下內容至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

    2. 創建應用。

      kubectl create -f nginx.yaml
  2. 查看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

  1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

  2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇存儲 > 存儲類

  3. 存儲類頁面,單擊右上角的創建

  4. 創建對話框中,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。

  1. 創建命名空間ns1和ns2,請參見創建命名空間

  2. 在集群管理頁左側導航欄,選擇存儲 > 存儲聲明

  3. 存儲聲明頁面,選擇命名空間ns1,單擊創建

  4. 在彈出的創建存儲聲明頁面中,配置完成后,單擊創建

    配置項

    說明

    示例值

    存儲聲明類型

    選擇NAS。

    NAS

    名稱

    創建的存儲聲明名稱在集群內必須唯一。

    pvc-nas

    分配模式

    本文中選擇使用存儲類動態創建

    使用存儲類動態創建

    已有存儲類

    單擊選擇存儲類,在選擇存儲類對話框目標存儲類右側操作列單擊選擇

    選擇上一步創建的存儲類alicloud-nas-sharepath

    總量

    創建存儲卷的容量。

    20Gi

    訪問模式

    默認為ReadWriteMany,也可選擇ReadWriteOnceReadOnlyMany

    ReadWriteMany

  5. 參考以上操作,在命名空間ns2下創建pvc-nas。

3、創建應用并掛載NAS

  1. 在集群管理頁左側導航欄,選擇工作負載 > 無狀態

  2. 無狀態頁面,選擇命名空間ns1,單擊使用鏡像創建

  3. 配置創建應用的參數信息。

    主要參數如下,其他參數保持默認即可。更多信息,請參見創建無狀態工作負載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

    nas1.png

  4. 參考以上操作,在命名空間ns2下創建應用nginx。

  5. 查看應用部署狀態。

    1. 無狀態頁面,單擊應用名稱。

    2. 容器組頁簽下,確認Pod已正常運行(狀態為Running)。

步驟三:驗證NAS的存儲特性

以上創建的工作負載Deployment中包含2個Pod,2個Pod掛載了同一個NAS文件系統,您可以通過以下方式對NAS存儲卷進行共享存儲和持久化存儲驗證。

  • 重建Pod,然后在新建的Pod中查看NAS文件系統中的數據是否存在,以此來驗證持久化存儲。

  • 在一個Pod中創建文件,然后在另一個Pod中查看文件,以此來驗證共享存儲。

驗證NAS的持久化存儲

  1. 查看應用所在的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中創建文件。

    1. 查看應用中掛載的/data路徑下有無文件。

      以一個名為deployment-nas-1-5b5cdb85f6-a****的Pod為例。

      kubectl exec deployment-nas-1-5b5cdb85f6-a**** -- ls /data

      無返回結果,表明/data路徑下無文件。

    2. 在該Pod的/data路徑下創建文件nas。

      kubectl exec deployment-nas-1-5b5cdb85f6-a**** -- touch /data/nas
  3. 在另一個Pod中查看建文件。

    以另一個名為deployment-nas-2-c5bb4746c-b****的Pod為例。

    kubectl exec deployment-nas-2-c5bb4746c-b**** -- ls /data

    預期輸出:

    nas
  4. 重建Pod。

    1. 刪除Pod。

      kubectl delete pod deployment-nas-1-5b5cdb85f6-a****
    2. 同時在另一個窗口中,查看Pod刪除及Kubernetes重建Pod的過程。

      kubectl get pod -w -l app=nginx
  5. 驗證刪除Pod后,NAS里創建的文件是否還存在。

    1. 查看重建的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
    2. 查看重建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存儲卷的共享存儲特性:

  1. 查看部署的應用所在的Pod和NAS文件。

    1. 執行以下命令,查看應用所在的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. 查看2個Pod的/data路徑下的文件。

      kubectl exec deployment-nas-1-5b5cdb85f6-a**** -- ls /data
      kubectl exec deployment-nas-2-c5bb4746c-b**** -- ls /data

      無返回結果,說明當前存儲路徑/data下無文件。

  2. 在任意一個Pod的/data路徑下創建文件nas。

    以名為deployment-nas-1-5b5cdb85f6-a****的Pod為例。

     kubectl exec deployment-nas-1-5b5cdb85f6-a**** -- touch /data/nas
  3. 查看2個Pod的/data路徑下的文件。

    1. 查看名為deployment-nas-1-5b5cdb85f6-a****的Pod的/data路徑下的文件。

      kubectl exec deployment-nas-1-5b5cdb85f6-a**** -- ls /data

      預期輸出:

      nas
    2. 查看另一個名為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的用戶或用戶組進行隔離。

  1. 使用以下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
  2. 執行以下命令,在容器中啟動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命令。

  3. 執行以下命令,驗證在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只能創建一個文件系統和一個掛載點。

展開查看如何使用filesystem方式掛載

重要

system類型的NAS動態卷在刪除時默認保留文件系統和掛載點,如需在釋放PV資源的同時釋放NAS文件系統和掛載點,則需要同時設置StorageClass中的reclaimPolicyDeletedeleteVolume的值為true

使用filesystem類型NAS存儲卷的Pod只能創建一個文件系統和一個掛載點。

ACK專有集群需執行以下全部步驟,其他類型集群從以下步驟2創建存儲類StorageClass開始執行至結束。

1、(可選)RAM Policy設置和授予

ACK專有集群需要執行本步驟。

  1. filesystem類型的NAS存儲卷涉及NAS文件系統和掛載點的動態創建與刪除,ACK專有集群需要授予csi-provisioner相應的權限,RAM Policy的最小集合如下。

    {
        "Action": [
            "nas:DescribeMountTargets",
            "nas:CreateMountTarget",
            "nas:DeleteFileSystem",
            "nas:DeleteMountTarget",
            "nas:CreateFileSystem"
        ],
        "Resource": [
            "*"
        ],
            "Effect": "Allow"
    }

    您可以通過以下任意一種方式進行授權:

    • 編輯ACK專有集群的Master RAM角色中的自定義策略內容,添加以上NAS相關的權限設置。請參見修改自定義權限策略內容和備注自定義授權

    • 創建RAM用戶并授權以上RAM Policy并生成AccessKey,配置到csi-provisioner的env變量中。

      env:
      - name: CSI_ENDPOINT
        value: unix://socketDir/csi.sock
      - name: ACCESS_KEY_ID
        value: ""
      - name: ACCESS_KEY_SECRET
        value: ""

2、創建存儲類StorageClass

  1. 創建并復制以下內容到alicloud-nas-fs.yaml文件中。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: alicloud-nas-fs
    mountOptions:
    - nolock,tcp,noresvport
    - vers=3
    parameters:
      volumeAs: filesystem
      fileSystemType: standard
      storageType: Performance
      regionId: cn-beijing
      zoneId: cn-beijing-e
      vpcId: "vpc-2ze2fxn6popm8c2mzm****"
      vSwitchId: "vsw-2zwdg25a2b4y5juy****"
      accessGroupName: DEFAULT_VPC_GROUP_NAME
      deleteVolume: "false"
    provisioner: nasplugin.csi.alibabacloud.com
    reclaimPolicy: Retain

    參數

    描述

    volumeAs

    設置為filesystem。取值:

    • subpath:表示創建子目錄類型的PV。你需要手動創建NAS文件系統以及掛載點。一個PV對應一個NAS文件系統的子目錄。

    • filesystem:表示Provisioner會自動創建NAS文件系統,一個PV對應一個NAS文件系統。

    fileSystemType

    創建NAS文件系統的類型。默認為standard。取值:

    • standard:通用型NAS。

    • extreme:極速型NAS。

    storageType

    創建NAS文件系統的存儲規格類型。

    • 當fileSystemType=standard時,可選Performance(性能型)和Capacity(容量型)兩種類型,默認為Performance(性能型)。

    • 當fileSystemType=extreme時,可選standard(標準型)和advanced(高級型)兩種類型,默認為standard(標準型)。

    regionId

    創建NAS文件系統所在地域。

    zoneId

    創建NAS文件系統所在可用區。

    vpcId

    創建NAS文件系統對應掛載點所在VPC。

    vSwitchId

    創建NAS文件系統對應掛載點所在vSwitch ID。

    accessGroupName

    創建NAS文件系統對應掛載點所用的AccessGroup。默認為DEFAULT_VPC_GROUP_NAME

    deleteVolume

    數據卷刪除時NAS文件系統的處理策略,由于NAS為共享文件系統,出于安全考慮需要同時配置。

    provisioner

    驅動類型。此處須配置為nasplugin.csi.alibabacloud.com,表示使用阿里云NAS CSI組件。

    reclaimPolicy

    PV的回收策略。當值為DeletedeleteVolumetrue時,才會在刪除PVC的時候將NAS文件系統刪除。

  2. 執行以下命令創建StorageClass。

    kubectl create -f alicloud-nas-fs.yaml

3、創建PVC和Pod掛載NAS存儲卷

  1. 創建并復制以下內容到pvc.yaml文件中。

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: nas-csi-pvc-fs
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: alicloud-nas-fs
      resources:
        requests:
          storage: 20Gi
  2. 創建并復制以下內容到nginx.yaml文件中。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: deployment-nas-fs
      labels:
        app: nginx
    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-fs
  3. 創建PVC和Pod。

    kubectl create -f pvc.yaml -f nginx.yaml

相關文檔