全部產品
Search
文件中心

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

更新時間:Dec 12, 2024

OSS儲存卷支援同時被多個Pod掛載,適用於讀檔案且對磁碟I/O要求不高的情境,例如讀設定檔、視頻、圖片檔案等。除使用靜態儲存卷外,您也可以建立PVC並配置StorageClass來實現儲存資源的動態分配,讓系統為您自動預留持久化儲存卷,無需預先手動建立和配置儲存資源。您可以通過RRSA鑒權或者RAM使用者AccessKey鑒權的任一方式進行許可權配置並掛載使用OSS動態儲存裝置卷。

前提條件

  • 叢集需為1.26及以上版本,CSI組件需為v1.31.4-9819c8b-aliyun及以上版本。叢集預設已安裝CSI組件,如需升級請參見手動升級叢集升級csi-plugin和csi-provisioner

    說明

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

  • 已建立Bucket,Bucket與叢集需使用同一帳號操作。

    說明

    若Bucket和ECS執行個體位於相同地區,請選擇私網網域名稱。

  • 已通過kubectl串連叢集

注意事項

  • OSS不建議跨帳號使用。

  • 建議在使用OSS的Pod的YAML檔案中增加健全狀態檢查配置,當容器內OSS目錄不可用時,可自動重啟Pod重新掛載OSS。

  • 若您在應用模板中配置了securityContext.fsgroup參數,kubelet在儲存卷掛載完成後會執行chmodchown操作,導致掛載時間延長。若您已配置securityContext.fsgroup參數,且需要減少掛載時間,請參見OSS儲存卷掛載時間延長

  • 通過ossfs進行ls等操作時,將發起HTTP請求到OSS擷取檔案的meta資訊,如果ls的目標目錄下檔案較多(例如超過100,000個,該數值與機器記憶體大小相關),ossfs將消耗大量系統記憶體,可能導致Pod發生OOM(Out Of Memory)事件。您可以通過掛載OSS Bucket的子目錄,或對檔案較多的目錄進行目錄分級解決此問題。

  • ossfs適用於並發讀情境,配置PVC和PV的訪問模式為ReadOnlyMany。若需寫入資料,建議您通過OSS SDK、ossutil工具等方式實現資料讀寫分離,同時配置OSS儲存卷的訪問模式為ReadWriteMany。具體操作,請參見OSS儲存讀寫分離最佳實務

    重要
    • 在並發寫情境中,ossfs無法保證資料寫入的一致性。

    • 掛載狀態下,登入應用Pod或宿主機,在掛載路徑下刪除或變更檔案,都會直接刪除或變更OSS Bucket中對應的源檔案。您可以開啟OSS Bucket的版本控制,避免誤刪除重要資料,請參見版本控制

  • 當傳輸的檔案大於10 MB時,可以將檔案切成片段,分區上傳。分區上傳過程中斷後,如您不再需要這些片段,可以手動刪除片段通過生命週期規則刪除片段

通過RRSA鑒權方式掛載

基於適用於服務賬戶的RAM角色(RAM Roles for Service Accounts,簡稱RRSA)功能,您可以在叢集內實現PV維度OpenAPI許可權隔離,從而實現雲資源存取權限的細粒度隔離,降低安全風險。更多資訊,請參見通過RRSA配置ServiceAccount的RAM許可權實現Pod許可權隔離

重要

RRSA鑒權方式掛載僅支援1.26及以上版本的叢集,即ACK託管叢集ACK Serverless叢集,且叢集使用的CSI組件為1.30.4及以上版本。若您在1.30.4之前的版本中使用了RRSA功能,請及時參見【產品變更】CSI ossfs版本升級與掛載流程最佳化增加RAM角色授權配置。

步驟一:建立RAM角色

如果您在叢集中首次使用RRSA功能,需要按照以下步驟操作,如果您已經在叢集中使用過RRSA鑒權方式掛載OSS儲存卷,則可以跳過本步驟。

  1. Container Service管理主控台啟用RRSA功能。請參見啟用RRSA功能

  2. 為OSS儲存卷RRSA鑒權建立RAM角色,即使用RRSA功能扮演的指定角色。

    建立可信實體類型為身份供應商的RAM角色,以demo-role-for-rrsa為例。

    1. 使用阿里雲帳號登入RAM控制台

    2. 在左側導覽列,選擇身份管理 > 角色,然後在角色頁面,單擊建立角色

    3. 建立角色面板,選擇可信實體類型為身份供應商,然後單擊下一步

    4. 配置角色頁面,配置如下角色資訊後,單擊完成

      本樣本配置如下。

      配置項

      描述

      角色名稱

      demo-role-for-rrsa。

      備忘

      選填有關該角色的備忘資訊。

      身份供應商類型

      OIDC

      選擇身份供應商

      ack-rrsa-<cluster_id>。其中,<cluster_id>為您的叢集ID。

      限制條件

      • oidc:iss:保持預設。

      • oidc:aud:選擇sts.aliyuncs.com

      • oidc:sub:條件判定方式選擇StringEquals,此處需要填入system:serviceaccount:ack-csi-fuse:csi-fuse-ossfs

步驟二:為demo-role-for-rrsa角色授權

  1. 建立如下OSS訪問的自訂權限原則。具體操作,請參見建立自訂權限原則

    以下唯讀和讀寫權限策略請根據使用需求選擇,並替換mybucket為您實際建立的Bucket名稱。

    • OSS唯讀權限原則

      展開查看OSS唯讀權限原則內容

      {
          "Statement": [
              {
                  "Action": [
                      "oss:Get*",
                      "oss:List*"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:mybucket",
                      "acs:oss:*:*:mybucket/*"
                  ],
              }
          ],
          "Version": "1"
      }
    • OSS讀寫權限

      展開查看OSS讀寫權限策略內容

      {
          "Statement": [
              {
                  "Action": "oss:*",
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:mybucket",
                      "acs:oss:*:*:mybucket/*"
                  ],
              }
          ],
          "Version": "1"
      }
  2. (可選)若您使用KMS託管的指定CMK ID加密OSS Object,還需要為該RAM使用者配置KMS許可權。具體操作,請參見為OSS儲存卷加密

  3. 為demo-role-for-rrsa角色授權。具體操作,請參見為RAM角色授權

    說明

    您也可以通過修改RAM角色信任策略的方式使用已有的授權了OSS許可權的RAM角色。具體操作,請參見使用已存在的RAM角色並授權

步驟三:建立儲存類

  1. 將以下樣本儲存為sc-oss-rrsa.yaml,建立配置RRSA許可權認證的OSS儲存類。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: sc-oss
    parameters:
      bucket: bucket  # 替換為實際Bucket名稱。
      path: /ack
      url: oss-cn-beijing-internal.aliyuncs.com
      authType: rrsa
      roleName: demo-role-for-rrsa
      otherOpts: "-o allow_other"
      volumeAs: sharepath
    provisioner: ossplugin.csi.alibabacloud.com
    reclaimPolicy: Retain
    volumeBindingMode: Immediate

    參數

    說明

    name

    儲存類名稱。

    bucket

    需要掛載的OSS Bucket。

    path

    表示掛載時相對Bucket根檔案的目錄結構,預設為/(v1.14.8.32-c77e277b-aliyun及之後版本的CSI組件支援)。

    ossfs 1.91版本前,該路徑需在OSS側預先建立,詳情請參見ossfs 1.91及以上版本新功能介紹及效能壓測

    url

    掛載OSS的Endpoint,Endpoint以OSS控制台Bucket概覽頁為準。

    • 掛載節點和Bucket相同地區,或已打通VPC網路時,請使用內網地址。

    • 掛載節點和Bucket不同地區時,請使用外網地址。

    不同訪問連接埠的常見填寫格式如下:

    • 內網格式:http://oss-{{regionName}}-internal.aliyuncs.comhttps://oss-{{regionName}}-internal.aliyuncs.com

    • 外網格式:http://oss-{{regionName}}.aliyuncs.comhttps://oss-{{regionName}}.aliyuncs.com

    重要

    vpc100-oss-{{regionName}}.aliyuncs.com的內網訪問連接埠格式已廢棄,請及時切換。

    authType

    配置為rrsa,聲明使用RRSA方式鑒權。

    roleName

    配置為以上步驟一:建立RAM角色中已建立或修改的RAM角色名稱。若您需要為不同的StorageClass配置不同的許可權,可以建立不同的RAM角色,在StorageClass中配置不同的roleName。

    otherOpts

    您可以為OSS儲存卷輸入定製化參數,格式為-o *** -o ***,例如-o umask=022 -o max_stat_cache_size=0 -o allow_other

    umask:用於更改ossfs讀檔案的許可權。例如,設定umask=022後,ossfs檔案的許可權都會變更為755。通過SDK、OSS控制台等其他方式上傳的檔案在ossfs中預設許可權均為640。因此,建議您在讀寫分離情境中配置umask許可權。

    max_stat_cache_size:用於指定檔案中繼資料的緩衝空間,可緩衝多少個檔案的中繼資料。中繼資料快取可加快ls操作速度。但若通過OSS、SDK、控制台、ossutil等方式修改檔案,可能會導致中繼資料未被及時更新。

    allow_other:賦予電腦上其他使用者訪問掛載目錄的許可權,但不包含目錄內的檔案。

    更多選擇性參數,請參見ossfs掛載選項說明

    provisioner

    定義驅動類型。取值為ossplugin.csi.alibabacloud.com,表示使用阿里雲OSS CSI外掛程式。

    reclaimPolicy

    動態建立的PV的回收策略。當前OSS儲存卷僅支援Retain,即刪除PVC時,PV和OSS Bucket中的資料不會被刪除。

    volumeBindingMode

    繫結模式。

    OSS儲存卷無需考慮可用性區域間節點親和,使用預設值Immediate即可。

    volumeAs

    儲存卷訪問模式。預設為sharepath模式。取值:

    • sharepath:即共用方式掛載,所有儲存卷共用掛載路徑,即資料將儲存於<bucket>:<path>/下。

    • subpath:即子目錄方式掛載,建立儲存卷時在掛載路徑下自動建立子目錄,即資料將儲存於<bucket>:<path>/<pv-name>/下。

      說明

      subpath模式僅在CSI組件為1.31.3及以上版本時生效,否則均為sharepath模式。

  2. 執行以下命令,建立儲存類。

    kubetl apply -f sc-oss-rrsa.yaml

步驟四:建立儲存聲明

  1. 將以下樣本儲存為pvc-oss.yaml,建立儲存聲明。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-oss
    spec:
      accessModes:
      - ReadOnlyMany
      volumeMode: Filesystem
      resources:
        requests:
          storage: 20Gi
      storageClassName: sc-oss

    參數

    說明

    name

    PVC的名稱。

    accessModes

    配置訪問模式,支援ReadOnlyMany和ReadWriteMany。

    選擇ReadOnlyMany時,ossfs將以唯讀模式掛載OSS Bucket。

    storage

    聲明應用的使用量,此處設定的大小不會限制應用可使用的最大容量。

    storageClassName

    使用的儲存類名稱。

  2. 執行以下命令,建立儲存聲明。

    kubectl apply -f pvc-oss.yaml
  3. 執行以下命令,確認PVC已建立且進入綁定狀態。

    kubectl get pvc pvc-oss

    預期輸出:

    NAME           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         VOLUMEATTRIBUTESCLASS   AGE
    pvc-oss        Bound    oss-251d111d-3b0b-4879-81a0-eb5a19xxxxxx   20Gi       ROX            oss-rrsa             <unset>                 4d20h

步驟五:建立應用

  1. 將以下樣本儲存為oss-dynamic.yaml檔案,建立應用並掛載儲存聲明。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: oss-dynamic
      labels:
        app: nginx
    spec:
      replicas: 2
      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: pvc-oss
                mountPath: "/data"
              - name: pvc-oss
                mountPath: "/data1"
            livenessProbe:
              exec:
                command:
                - sh
                - -c
                - cd /data
              initialDelaySeconds: 30
              periodSeconds: 30
          volumes:
            - name: pvc-oss
              persistentVolumeClaim:
                claimName: pvc-oss
  2. 執行以下命令,部署應用。

    kubectl apply -f oss-dynamic.yaml
  3. 執行以下命令,查詢應用副本的運行狀態。

    kubectl get pod -lapp=nginx -w

    預期一段時間後,Pod進入Running狀態。

通過RAM使用者AccessKey鑒權方式掛載

重要
  • 使用該方式掛載時,如果OSS儲存卷引用的AccessKey被撤銷或取消授權,已經掛載了儲存卷的應用將無權訪問OSS並報許可權錯誤。您需要修改Secret中的AccessKey資訊並重新掛載,此操作將導致應用重啟。AccessKey吊銷後ossfs重掛載流程,請參見OSS儲存掛載許可權問題中情境4的解決方案。

  • 如果有定期輪轉AccessKey的需求建議您通過RRSA鑒權方式掛載

您需要首先擷取RAM使用者的AccessKey資訊,以使其擁有OSS Bucket的操作許可權。

步驟一:建立具有OSS存取權限的RAM使用者並擷取AccessKey

您需要首先擷取RAM使用者的AccessKey資訊,以使其擁有OSS Bucket的操作許可權。

  1. 建立RAM使用者,如已建立可跳過。具體操作,請參見建立RAM使用者

  2. 建立如下OSS訪問的自訂權限原則。具體操作,請參見建立自訂權限原則

    以下唯讀和讀寫權限策略請根據使用需求選擇,並替換mybucket為您實際建立的Bucket名稱。

    • OSS唯讀權限原則

      展開查看OSS唯讀權限原則內容

      {
          "Statement": [
              {
                  "Action": [
                      "oss:Get*",
                      "oss:List*"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:mybucket",
                      "acs:oss:*:*:mybucket/*"
                  ],
              }
          ],
          "Version": "1"
      }
    • OSS讀寫權限

      展開查看OSS讀寫權限策略內容

      {
          "Statement": [
              {
                  "Action": "oss:*",
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:mybucket",
                      "acs:oss:*:*:mybucket/*"
                  ],
              }
          ],
          "Version": "1"
      }
  3. (可選)若您使用KMS託管的指定CMK ID加密OSS Object,還需要為該RAM使用者配置KMS許可權。具體操作,請參見為OSS儲存卷加密

  4. 為RAM使用者添加OSS許可權。具體操作,請參見為RAM使用者授權

  5. 為RAM使用者建立AccessKey。具體操作,請參見擷取AccessKey

步驟二:建立儲存類StorageClass和PVC並掛載

您可以通過控制台和kubectl兩種方式建立儲存類、儲存聲明並掛載至應用中。

控制台

1、建立儲存類StorageClass

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇儲存 > 儲存類

  3. 儲存類頁面,單擊建立

  4. 在彈出對話方塊中配置參數,設定完成後,單擊建立

    配置項

    說明

    樣本值

    名稱

    儲存類的名稱。

    sc-oss

    儲存卷類型

    選擇OSS。

    OSS

    訪問認證

    選擇訪問OSS所需的保密字典,即上一步擷取的AccessKey ID和AccessKey Secret。

    • 選擇已有保密字典:選擇命名空間保密字典

    • 建立保密字典:配置命名空間名稱AccessKey IDAccessKey Secret

    選擇已有保密字典

    Bucket ID

    您要使用的OSS Bucket的名稱。單擊選擇Bucket,在彈出的對話方塊中選擇所需的Bucket並單擊選擇

    說明

    此處顯示為已配置的AccessKey可擷取到的Bucket列表。

    選擇Bucket

    OSS Path

    表示掛載時相對Bucket根檔案的目錄結構,預設為/(v1.14.8.32-c77e277b-aliyun及之後版本的CSI組件支援)。

    ossfs 1.91版本前,該路徑需在OSS側預先建立,詳情請參見ossfs 1.91及以上版本新功能介紹及效能壓測

    /

    儲存卷模式

    儲存卷訪問模式。預設為共用目錄模式。取值:

    • 共用目錄:即Sharepath方式掛載,所有儲存卷共用掛載路徑,即資料將儲存於<bucket>:<path>/下。

    • 子目錄:即Subpath方式掛載,建立儲存卷時在掛載路徑下自動建立子目錄,即資料將儲存於<bucket>:<path>/<pv-name>/下。

      說明

      子目錄模式僅在CSI組件為1.31.3及以上版本時生效,否則均為共用目錄模式。

    共用目錄

    訪問網域名稱

    您可以參考以下情況選擇需要的訪問網域名稱。

    • 如果Bucket和ECS執行個體位於不同地區(Region),請選擇公網網域名稱

    • 如果Bucket和ECS執行個體位於相同地區,請選擇私網網域名稱

      說明

      通過私網訪問時,預設使用HTTP協議。若您需要指定網路傳輸協議為HTTPS,可使用kubectl命令列方式建立靜態PV。

    私網網域名稱

    回收策略

    動態建立的PV的回收策略。當前OSS儲存卷僅支援Retain,即刪除PVC時,PV和OSS Bucket中的資料不會被刪除。

    Retain

    選擇性參數

    您可以為OSS儲存卷輸入定製化參數,格式為-o *** -o ***,例如-o umask=022 -o max_stat_cache_size=0 -o allow_other

    umask:用於更改ossfs讀檔案的許可權。例如,設定umask=022後,ossfs檔案的許可權都會變更為755。通過SDK、OSS控制台等其他方式上傳的檔案在ossfs中預設許可權均為640。因此,建議您在讀寫分離情境中配置umask許可權。

    max_stat_cache_size:用於指定檔案中繼資料的緩衝空間,可緩衝多少個檔案的中繼資料。中繼資料快取可加快ls操作速度。但若通過OSS、SDK、控制台、ossutil等方式修改檔案,可能會導致中繼資料未被及時更新。

    allow_other:賦予電腦上其他使用者訪問掛載目錄的許可權,但不包含目錄內的檔案。

    更多選擇性參數,請參見ossfs掛載選項說明

    -o umask=022 -o max_stat_cache_size=0 -o allow_other

2、建立儲存聲明

  1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇儲存 > 儲存聲明

  2. 儲存聲明頁面,單擊建立

  3. 在彈出的對話方塊中配置參數,配置完成後,單擊建立

    配置項

    說明

    樣本值

    儲存宣告類型

    選擇OSS。

    OSS

    名稱

    儲存聲明PVC的名稱。

    pvc-oss

    分配模式

    選擇使用儲存類動態建立

    使用儲存類動態建立

    已有儲存類

    單擊選擇儲存類,在目標儲存卷右側操作列,單擊選擇,選擇儲存類。

    選擇儲存類

    總量

    聲明應用的使用量,此處設定的大小不會限制應用可使用的最大容量。

    20Gi

    訪問模式

    配置訪問模式,支援ReadOnlyMany和ReadWriteMany。

    選擇ReadOnlyMany時,ossfs將以唯讀模式掛載OSS Bucket。

    ReadOnlyMany

3、建立應用

  1. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

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

  3. 配置建立應用的參數資訊,配置完成後,單擊建立

    主要參數如下,其他參數保持預設即可。更多資訊,請參見建立無狀態工作負載Deployment

    配置頁

    參數

    說明

    樣本

    應用基本資料

    應用程式名稱

    Deployment名稱,自訂輸入。格式要求請參考介面提示。

    test-oss

    副本數量

    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-oss

    • 容器路徑:/data

    image.png

  4. 查看應用部署狀態。

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

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

kubectl

1、建立儲存類StorageClass

  1. 建立Secret,該Secret選擇的Namespace需要和應用所在的Namespace一致。

    替換以下akIdakSecret為上一步擷取的AccessKey ID和AccessKey Secret。

    kubectl create secret generic oss-secret --from-literal='akId=<yourAccessKey ID>' --from-literal='akSecret=<yourAccessKey Secret>'
  2. 將以下樣本儲存為sc-oss.yaml檔案,建立儲存類。

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: sc-oss
    parameters:
      bucket: bucket
      path: /ack
      url: oss-cn-beijing.aliyuncs.com
      csi.storage.k8s.io/node-publish-secret-name: oss-secret
      csi.storage.k8s.io/node-publish-secret-namespace: default
      otherOpts: '-o allow_other'
    provisioner: ossplugin.csi.alibabacloud.com
    reclaimPolicy: Retain
    volumeBindingMode: Immediate
    

    參數

    說明

    name

    儲存類名稱

    bucket

    需要掛載的OSS Bucket。

    path

    表示掛載時相對Bucket根檔案的目錄結構,預設為/(v1.14.8.32-c77e277b-aliyun及之後版本的CSI組件支援)。

    ossfs 1.91版本前,該路徑需在OSS側預先建立,詳情請參見ossfs 1.91及以上版本新功能介紹及效能壓測

    url

    掛載OSS的Endpoint,Endpoint以OSS控制台Bucket概覽頁為準。

    • 掛載節點和Bucket相同地區,或已打通VPC網路時,請使用內網地址。

    • 掛載節點和Bucket不同地區時,請使用外網地址。

    不同訪問連接埠的常見填寫格式如下:

    • 內網格式:http://oss-{{regionName}}-internal.aliyuncs.comhttps://oss-{{regionName}}-internal.aliyuncs.com

    • 外網格式:http://oss-{{regionName}}.aliyuncs.comhttps://oss-{{regionName}}.aliyuncs.com

    重要

    vpc100-oss-{{regionName}}.aliyuncs.com的內網訪問連接埠格式已廢棄,請及時切換。

    csi.storage.k8s.io/node-publish-secret-name

    儲存AccessKey資訊的Secret名稱。

    csi.storage.k8s.io/node-publish-secret-namespace

    儲存AccessKey資訊的Secret所在的命名空間。

    otherOpts

    您可以為OSS儲存卷輸入定製化參數,格式為-o *** -o ***,例如-o umask=022 -o max_stat_cache_size=0 -o allow_other

    umask:用於更改ossfs讀檔案的許可權。例如,設定umask=022後,ossfs檔案的許可權都會變更為755。通過SDK、OSS控制台等其他方式上傳的檔案在ossfs中預設許可權均為640。因此,建議您在讀寫分離情境中配置umask許可權。

    max_stat_cache_size:用於指定檔案中繼資料的緩衝空間,可緩衝多少個檔案的中繼資料。中繼資料快取可加快ls操作速度。但若通過OSS、SDK、控制台、ossutil等方式修改檔案,可能會導致中繼資料未被及時更新。

    allow_other:賦予電腦上其他使用者訪問掛載目錄的許可權,但不包含目錄內的檔案。

    更多選擇性參數,請參見ossfs掛載選項說明

    provisioner

    定義驅動類型。取值為ossplugin.csi.alibabacloud.com,表示使用阿里雲OSS CSI外掛程式。

    reclaimPolicy

    動態建立的PV的回收策略。當前OSS儲存卷僅支援Retain,即刪除PVC時,PV和OSS Bucket中的資料不會被刪除。

    volumeBindingMode

    繫結模式。

    OSS儲存卷無需考慮可用性區域間節點親和,使用預設值Immediate即可。

    volumeAs

    儲存卷訪問模式。預設為sharepath模式。取值:

    • sharepath:即共用方式掛載,所有儲存卷共用掛載路徑,即資料將儲存於<bucket>:<path>/下。

    • subpath:即子目錄方式掛載,建立儲存卷時在掛載路徑下自動建立子目錄,即資料將儲存於<bucket>:<path>/<pv-name>/下。

      說明

      subpath模式僅在CSI組件為1.31.3及以上版本時生效,否則均為sharepath模式。

2、建立儲存聲明

建立儲存聲明操作同RRSA鑒權方式操作一致。具體操作,請參見上文步驟四:建立儲存聲明

3、建立應用

建立應用操作同RRSA鑒權方式操作一致。具體操作,請參見上文步驟五:建立應用

驗證OSS的持久化儲存和共用儲存

  1. 查看部署oss-dynamic應用所在的Pod。

    kubectl get pod

    預期輸出:

    NAME                             READY   STATUS    RESTARTS   AGE
    oss-dynamic-68f4945c46-h****      1/1     Running   0          1h
    oss-dynamic-68f4945c46-4****      1/1     Running   0          1h
  2. 在任意Pod下建立tmpfile檔案。以名為oss-dynamic-68f4945c46-h****的Pod為例。

    • 若以ReadWriteMany方式掛載,執行以下命令,在/data路徑下建立tmpfile檔案。

      kubectl exec oss-dynamic-68f4945c46-h**** -- touch /data/tmpfile
    • 若以ReadOnlyMany方式掛載,可通過OSS控制台cp(上傳檔案)等方式上傳tmpfile檔案至OSS Bucket對應路徑。

  3. 在兩個Pod掛載路徑下查看檔案。

    以名oss-dynamic-68f4945c46-h****的Pod掛載路徑為data,名為oss-dynamic-68f4945c46-4****的掛載路徑為data1為例。

    kubectl exec oss-dynamic-68f4945c46-h**** -- ls /data | grep tmpfile
    kubectl exec oss-dynamic-68f4945c46-4**** -- ls /data1 | grep tmpfile

    預期輸出:

    tmpfile

    預期輸出表明,兩個Pod的掛載路徑下均存在此檔案,說明兩個Pod共用資料。

    說明

    若您無法看到預期輸出,請確認CSI組件版本為v1.20.7及以上版本。更多資訊,請參見csi-plugin

  4. 重建Pod。

    kubectl delete pod oss-dynamic-68f4945c46-h****

    預期輸出:

    pod "oss-dynamic-68f4945c46-h****" deleted
  5. 驗證Pod刪除後,儲存空間裡建立的檔案是否還存在。

    1. 執行以下命令,查看重建的Pod名稱。

      kubectl get pod

      預期輸出:

      NAME                             READY   STATUS    RESTARTS   AGE
      oss-dynamic-68f4945c46-4****      1/1     Running   0          1h
      oss-dynamic-68f4945c46-z****     1/1     Running   0          40s
    2. 執行以下命令,查看/data路徑下的檔案。

      kubectl exec oss-dynamic-68f4945c46-z**** -- ls /data | grep tmpfile

      預期輸出:

      tmpfile

      預期輸出表明,temfile檔案仍然存在,說明OSS的資料可持久化儲存。

相關文檔