容器網路檔案系統CNFS支援NAS檔案資源回收筒功能,避免檔案誤刪除。本文介紹如何通過CNFS資源回收筒功能恢複被刪除的NAS檔案,以公網可訪問的Nginx應用為例。
使用說明
費用說明
資源回收筒功能本身不收取任何費用,但是暫存在資源回收筒中的檔案將按照刪除前的儲存類型收取儲存費用。為節省不必要的儲存費用,請您合理設定檔保留時間。計費詳情,請參見通用型NAS計費。
許可權說明
只有檔案系統的擁有者及授予了檔案系統資源回收筒使用許可權的RAM使用者才能使用資源回收筒功能。更多資訊,請參見授予RAM使用者對檔案系統資源回收筒的系統管理權限。
前提條件
叢集使用容器網路檔案系統CNFS來管理NAS檔案系統。更多資訊,請參見通過CNFS管理NAS檔案系統(推薦)。
叢集已開啟公網訪問。具體操作,請參見開啟API Server公網訪問。
儲存外掛程式使用CSI,且相關組件滿足以下版本要求:
csi-plugin和csi-provisioner組件版本不低於v1.20.5-ff6490f-aliyun。如需升級,請參見升級csi-plugin和csi-provisioner。
storage-operator組件版本不低於v1.18.8.56-2aa33ba-aliyun。如需升級,請參見管理storage-operator組件。
操作步驟
使用CNFS的StorageClass建立樣本目錄並綁定Nginx。刪除index.html檔案後,Nginx無法訪問歡迎頁面。通過控制台資源回收筒恢複index.html檔案,即可恢複Nginx的歡迎頁面。
步驟一:建立PVC並綁定到公網可訪問的Nginx
查看CNFS對象的狀態。
需要確保CNFS對象的狀態為Available。
查看CNFS對象。
kubectl get cnfs預期輸出:
NAME AGE default-cnfs-nas-7938cef-20210907193713 21h查看CNFS對象的狀態。
kubectl get cnfs default-cnfs-nas-7938cef-20210907193713 -o yaml | grep Available預期輸出:
status: Available
使用以下YAML樣本建立PVC。
重要PVC對象的storageClassName引用CNFS的StorageClass。本例中PVC名稱為cnfs-nas-pvc,storageClassName為alibabacloud-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使用以下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使用以下YAML樣本為Deployment對象建立Service。
說明建立Loadbalancer類型的Service,SLB會暴露公網IP,可通過SLB的公網IP訪問Deployment。本樣本建立名為nginx-default的Service,類型為LoadBalancer,該Service將公網暴露的HTTP請求轉寄到label為app: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將Nginx的歡迎頁面加入到啟動狀態的Pod的
/app路徑下。查看Pod。
kubectl get pod預期輸出:
NAME READY STATUS RESTARTS AGE cnfs-nas-deployment-597bc9fb45-cmkss 1/1 Running 0 3h23m進入Pod
cnfs-nas-deployment-597bc9fb45-cmkss的/app路徑。kubectl exec cnfs-nas-deployment-597bc9fb45-cmkss -ti sh cd /app將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退出Pod。
exit
擷取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在瀏覽器地址欄輸入公網IP,可以看到Nginx的歡迎頁面。
本樣本中公網IP為
47.115.XX.XX。
步驟二:驗證CNFS資源回收筒的恢複功能
以下樣本介紹在刪除檔案的情境下,如何通過CNFS託管的NAS儲存卷的資源回收筒恢複檔案。
刪除index.html檔案,並重新整理瀏覽器查看Nginx的歡迎頁面(提示403 Forbidden)。
kubectl exec cnfs-nas-deployment-597bc9fb45-cmkss -- rm -rf /app/index.html
登入Container Service管理主控台,在左側導覽列選擇叢集列表。
在叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇。
在儲存卷頁面,在目標儲存卷右側操作列單擊資源回收筒。
CNFS託管的NAS預設開啟資源回收筒,可以在控制台恢複Nginx的index.html檔案。
本樣本的PV名稱為nas-ecaf6018-5250-4e19-b570-5d9e657d23bc。

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

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

重新整理瀏覽器,確認Nginx的歡迎頁面已恢複正常。
表示Nginx的index.html檔案已恢複。

相關文檔
如需瞭解更多關於NAS資源回收筒功能的資訊(例如如何關閉並清空資源回收筒),請參見資源回收筒。