全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:使用回收站功能恢复NAS文件数据

更新时间:Apr 18, 2025

容器网络文件系统CNFS支持NAS文件回收站功能,避免文件误删除。本文介绍如何通过CNFS回收站功能恢复被删除的NAS文件,以公网可访问的Nginx应用为例。

使用说明

  • 费用说明

    回收站功能本身不收取任何费用,但是暂存在回收站中的文件将按照删除前的存储类型收取存储费用。为节省不必要的存储费用,请您合理配置文件保留时间。计费详情,请参见通用型NAS计费低频介质计费说明

  • 权限说明

    只有文件系统的拥有者及授予了文件系统回收站使用权限的RAM用户才能使用回收站功能。更多信息,请参见授予RAM用户对文件系统回收站的管理权限

前提条件

操作步骤

使用CNFS的StorageClass创建示例目录并绑定Nginx。删除index.html文件后,Nginx无法访问欢迎页。通过控制台回收站恢复index.html文件,即可恢复Nginx的欢迎页。

步骤一:创建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文件,并刷新浏览器查看Nginx的欢迎页(提示403 Forbidden)。

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

    nginx403

  2. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  3. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择存储 > 存储卷

  4. 存储卷页面,在目标存储卷右侧操作列单击回收站

    CNFS托管的NAS默认开启回收站,可以在控制台恢复Nginx的index.html文件。

    本示例的PV名称为nas-ecaf6018-5250-4e19-b570-5d9e657d23bcNAS存储卷Nginx

  5. 在目标文件系统回收站页签,单击已删除文件和目录页签,在目标删除路径的右侧操作列单击恢复

    恢复删除文件

    选择恢复至原路径,并单击确定恢复至原路径

  6. 刷新浏览器,确认Nginx的欢迎页已恢复正常。

    表示Nginx的index.html文件已恢复。访问nginx

相关文档

如需了解更多关于NAS回收站功能的信息(例如如何关闭并清空回收站),请参见回收站