容器网络文件系统CNFS支持NAS文件回收站功能,避免文件误删除。本文以公网可访问的Nginx应用为例,介绍如何通过CNFS回收站恢复被删除的NAS文件。
背景信息
通过使用CNFS的StorageClass创建示例目录并绑定Nginx,然后在示例目录上删除index.html文件,此时Nginx无法访问欢迎页。然后可以通过控制台的回收站功能恢复index.html文件,同时也恢复了Nginx的欢迎页。
使用说明
费用说明
回收站功能本身不收取任何费用,但是暂存在回收站中的文件将按照删除前的存储类型收取存储费用。为节省不必要的存储费用,请您合理配置文件保留时间。计费详情,请参见通用型NAS计费和低频介质计费说明。
权限说明
只有文件系统的拥有者及授予了文件系统回收站使用权限的RAM用户才能使用回收站功能。更多信息,请参见授予RAM用户对文件系统回收站的管理权限。
前提条件
已创建Kubernetes集群,且存储插件选择为CSI。具体操作,请参见创建Kubernetes托管版集群。
若需要新建集群,选择CSI存储插件时请同时选中创建默认NAS文件系统和CNFS容器网络文件系统动态存储类型。
若已创建集群,但未选中创建默认NAS文件系统和CNFS容器网络文件系统动态存储类型,请使用CNFS托管NAS文件系统。具体操作,请参见通过CNFS方式使用NAS文件系统。
集群已开启公网访问。
关于创建集群时如何开启公网访问,请参见创建集群时绑定EIP。
关于已有集群如何开启访问,请参见创建集群后绑定公网IP。
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
查看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文件。
kubectl exec cnfs-nas-deployment-597bc9fb45-cmkss -- rm -rf /app/index.html
刷新浏览器再次查看Nginx的欢迎页,可以看到页面提示403 Forbidden。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在存储卷页面,在目标存储卷右侧操作列单击回收站。
CNFS托管的NAS默认开启回收站,可以在控制台恢复Nginx的index.html文件。
本示例的PV名称为nas-ecaf6018-5250-4e19-b570-5d9e657d23bc。
在目标文件系统回收站页签,单击已删除文件和目录页签,在目标删除路径的右侧操作列单击恢复。
选择恢复至原路径,并单击确定。
刷新浏览器可以看到Nginx的欢迎页已恢复正常。
表示Nginx的index.html文件已恢复。
相关文档
如需关闭并清空回收站,请参见更多操作。