全部產品
Search
文件中心

Container Service for Kubernetes:使用資源回收筒功能恢複NAS檔案資料

更新時間:Jun 19, 2024

容器網路檔案系統CNFS支援NAS檔案資源回收筒功能,避免檔案誤刪除。本文以公網可訪問的Nginx應用為例,介紹如何通過CNFS資源回收筒恢複被刪除的NAS檔案。

背景資訊

通過使用CNFS的StorageClass建立樣本目錄並綁定Nginx,然後在樣本目錄上刪除index.html檔案,此時Nginx無法訪問歡迎頁面。然後可以通過控制台的資源回收筒功能恢複index.html檔案,同時也恢複了Nginx的歡迎頁面。

使用說明

前提條件

  • 已建立Kubernetes叢集,且儲存外掛程式選擇為CSI。具體操作,請參見建立Kubernetes託管版叢集

    • 若需要建立叢集,選擇CSI儲存外掛程式時請同時選中建立預設NAS檔案系統和CNFS容器網路檔案系統動態儲存裝置類型

    • 若已建立叢集,但未選中建立預設NAS檔案系統和CNFS容器網路檔案系統動態儲存裝置類型,請使用CNFS託管NAS檔案系統。具體操作,請參見通過CNFS方式使用NAS檔案系統

  • 叢集已開啟公網訪問。

  • csi-plugin和csi-provisioner組件版本不低於v1.20.5-ff6490f-aliyun。關於如何升級CSI-Plugin和CSI-Provisioner組件,請參見升級CSI-Plugin和CSI-Provisioner

  • storage-operator組件版本不低於v1.18.8.56-2aa33ba-aliyun。關於如何升級storage-operator組件,請參見管理組件

步驟一:建立PVC並綁定到公網可訪問的Nginx

  1. 查看CNFS對象的狀態。

    需要確保CNFS對象的狀態為Available

    1. 執行以下命令查看CNFS對象。

      kubectl get cnfs

      預期輸出:

      NAME                                      AGE
      default-cnfs-nas-7938cef-20210907193713   21h
    2. 執行以下命令查看CNFS對象的狀態。

      kubectl get cnfs default-cnfs-nas-7938cef-20210907193713 -o yaml | grep Available

      預期輸出:

      status: Available
  2. 使用以下YAML樣本建立PVC。

    重要

    PVC對象的storageClassName引用CNFS的StorageClass。本例中PVC名稱為cnfs-nas-pvcstorageClassNamealibabacloud-cnfs-nas

    cat << EOF | kubectl apply -f -
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: cnfs-nas-pvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: alibabacloud-cnfs-nas
      resources:
        requests:
          storage: 30Gi
    EOF
  3. 使用以下YAML樣本建立Deployment。

    重要

    Deployment對象引用上個步驟建立的PVC。本樣本Deployment名稱為cnfs-nas-deployment,引用的PVC名稱為cnfs-nas-pvc,映射到容器的路徑為/app,並開啟名稱為http的容器連接埠8080。

    cat << EOF | kubectl apply -f -
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: cnfs-nas-deployment
      labels:
        app: nginx
    spec:
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          securityContext:
            runAsUser: 0
          containers:
          - name: nginx
            image: docker.io/bitnami/nginx:1.16.1-debian-9-r56
            volumeMounts:
            - mountPath: "/app"
              name: cnfs-nas-pvc
            ports:
            - containerPort: 8080
              name: http
          volumes:
          - name: cnfs-nas-pvc
            persistentVolumeClaim:
              claimName: cnfs-nas-pvc
    EOF
  4. 使用以下YAML樣本為Deployment對象建立Service。

    說明

    建立Loadbalancer類型的Service,SLB會暴露公網IP,可通過SLB的公網IP訪問Deployment。本樣本建立名為nginx-default的Service,類型為LoadBalancer,該Service將公網暴露的HTTP請求轉寄到labelapp:nginx的Pod上。

    cat << EOF | kubectl apply -f -
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-default
      labels:
        app: nginx
    spec:
      type: LoadBalancer
      externalTrafficPolicy: "Cluster"
      ports:
        - name: http
          port: 80
          targetPort: http
      selector:
        app: nginx
    EOF
  5. 將Nginx的歡迎頁面加入到啟動狀態的Pod的/app路徑下。

    1. 執行以下命令查看Pod。

      kubectl get pod 

      預期輸出:

      NAME                                   READY   STATUS    RESTARTS   AGE
      cnfs-nas-deployment-597bc9fb45-cmkss   1/1     Running   0          3h23m
    2. 執行以下命令進入Pod cnfs-nas-deployment-597bc9fb45-cmkss的/app路徑。

      kubectl exec cnfs-nas-deployment-597bc9fb45-cmkss -ti sh
      cd /app
    3. 執行以下命令將index.html寫入到/app路徑下。

      cat << EOF >> index.html
      <!DOCTYPE html>
      <html>
      <head>
      <title>Welcome to nginx!</title>
      <style>
      html { color-scheme: light dark; }
      body { width: 35em; margin: 0 auto;
      font-family: Tahoma, Verdana, Arial, sans-serif; }
      </style>
      </head>
      <body>
      <h1>Welcome to nginx!</h1>
      <p>If you see this page, the nginx web server is successfully installed and
      working. Further configuration is required.</p>
      
      <p>For online documentation and support please refer to
      <a href="http://nginx.org/">nginx.org</a>.<br/>
      Commercial support is available at
      <a href="http://nginx.com/">nginx.com</a>.</p>
      
      <p><em>Thank you for using nginx.</em></p>
      </body>
      </html>
      EOF
    4. 執行以下命令退出Pod。

      exit
  6. 執行以下命令擷取SLB的公網IP。

    kubectl get svc

    預期輸出:

    NAME            TYPE           CLUSTER-IP        EXTERNAL-IP      PORT(S)        AGE
    nginx-default   LoadBalancer   192.168.XX.XX     47.115.XX.XX     80:30989/TCP   20h
  7. 在瀏覽器地址欄輸入公網IP,可以看到Nginx的歡迎頁面。

    本樣本中公網IP為47.115.XX.XX訪問nginx

步驟二:驗證CNFS資源回收筒的恢複功能

以下樣本介紹在刪除檔案的情境下,如何通過CNFS託管的NAS儲存卷的資源回收筒恢複檔案。

  1. 執行以下命令刪除index.html檔案。

    kubectl exec cnfs-nas-deployment-597bc9fb45-cmkss -- rm -rf /app/index.html

    重新整理瀏覽器再次查看Nginx的歡迎頁面,可以看到頁面提示403 Forbiddennginx403

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

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

  4. 儲存卷頁面,在目標儲存卷右側操作列單擊資源回收筒

    CNFS託管的NAS預設開啟資源回收筒,可以在控制台恢複Nginx的index.html檔案。

    本樣本的PV名稱為nas-ecaf6018-5250-4e19-b570-5d9e657d23bcNAS儲存卷Nginx

  5. 在目標檔案系統資源回收筒頁簽,單擊已刪除檔案和目錄頁簽,在目標刪除路徑的右側操作列單擊恢複

    恢複刪除檔案

    選擇恢複至原路徑,並單擊確定恢複至原路徑

  6. 重新整理瀏覽器可以看到Nginx的歡迎頁面已恢複正常。

    表示Nginx的index.html檔案已恢複。訪問nginx

相關文檔

如需關閉並清空資源回收筒,請參見更多操作