Container Network File System (CNFS) は、誤って削除されたファイルを復元するために使用されるゴミ箱機能をサポートしています。このトピックでは、CNFS のゴミ箱機能を使用して削除されたファイルを復元する方法について説明します。インターネットアクセスを持つ NGINX アプリケーションを例として使用します。
背景情報
この例では、CNFS StorageClass を使用してボリュームを要求し、ボリュームを NGINX アプリケーションのポッドにマウントしてから、index.html ファイルをボリュームから削除します。 index.html ファイルが削除されると、NGINX ウェルカムページにアクセスできなくなります。 NGINX ウェルカムページを回復するには、CNFS のゴミ箱機能を使用して index.html ファイルを復元します。
注意事項
課金
ゴミ箱機能の有効化には課金されません。ただし、ゴミ箱に一時的に保存されているファイルによって占有されるストレージ容量に対しては課金されます。ストレージ料金は、ファイルが削除される前のファイルのストレージタイプに基づいて計算されます。ストレージコストを削減するために、ファイルの保持期間を指定することをお勧めします。詳細については、「汎用型 NAS ファイルシステムの課金」および「汎用型 NAS ファイルシステムの課金」をご参照ください。
権限
ファイルシステムの所有者または承認された Resource Access Management (RAM) ユーザーのみがゴミ箱機能を使用できます。詳細については、「RAM ポリシーに基づいてアクセス制御を実行する」をご参照ください。
前提条件
クラスターは、NAS ファイルシステムの管理に CNFS を使用します。詳細については、「CNFS を使用して NAS ファイルシステムを管理する」をご参照ください。
クラスターにはインターネット経由でアクセスできます。詳細については、「API サーバーのインターネットアクセスを有効にする」をご参照ください。
クラスターは Container Storage Interface (CSI) コンポーネントを使用します。 CSI コンポーネントは、次の要件を満たしている必要があります。
csi-plugin および csi-provisioner のバージョンが 1.20.5-ff6490f-aliyun 以降であること。詳細については、「csi-plugin および csi-provisioner を更新する」をご参照ください。
storage-operator のバージョンが 1.18.8.56-2aa33ba-aliyun 以降であること。詳細については、「storage-operator コンポーネントを管理する」をご参照ください。
手順
CNFS 用の StorageClass を使用してサンプルボリュームを作成し、そのボリュームを NGINX アプリケーションのポッドにマウントします。ボリュームに保存されている index.html ファイルを削除すると、NGINX ウェルカムページにアクセスできなくなります。 NGINX ウェルカムページを回復するには、CNFS のゴミ箱機能を使用して index.html ファイルを復元します。
手順 1:永続ボリューム要求 (PVC) を作成し、NGINX アプリケーションに関連付ける
CNFS オブジェクトのステータスを表示します。
CNFS オブジェクトが [使用可能] 状態であることを確認します。
次のコマンドを実行して、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 を作成します。
重要CNFS StorageClass は、PVC の storageClassName フィールドで参照されます。この例では、PVC の名前は [cnfs-nas-pvc] で、storageClassName フィールドで参照される StorageClass は [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 テンプレートを使用してデプロイメントを作成します。
重要デプロイメントは、前の手順で作成された PVC を参照するために使用されます。この例では、デプロイメントの名前は [cnfs-nas-deployment] で、参照される PVC の名前は [cnfs-nas-pvc] です。 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 テンプレートを使用して、デプロイメントのサービスを作成します。
説明次の YAML テンプレートは、LoadBalancer サービスを作成するために使用されます。 Server Load Balancer (SLB) インスタンスは、パブリック IP アドレスを介してサービスを公開するために使用され、デプロイメントにアクセスするために使用できます。この例では、[nginx-default] という名前の LoadBalancer サービスが作成されます。このサービスは、インターネットからの HTTP リクエストを app:nginx ラベル が追加されたポッドに転送するために使用されます。
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実行中のポッドの
/appパスに NGINX ウェルカムページファイルを書き込みます。次のコマンドを実行して、ポッドをクエリします。
kubectl get pod予期される出力:
NAME READY STATUS RESTARTS AGE cnfs-nas-deployment-597bc9fb45-cmkss 1/1 Running 0 3h23m次のコマンドを実行して、
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次のコマンドを実行して、ポッドを終了します。
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です。
手順 2:CNFS のゴミ箱機能を確認する
次の例では、CNFS によって管理される NAS ボリュームのゴミ箱から削除されたファイルを復元する方法について説明します。
次のコマンドを実行して、index.html ファイルを削除します。次に、ブラウザを更新して NGINX ウェルカムページを表示します。
kubectl exec cnfs-nas-deployment-597bc9fb45-cmkss -- rm -rf /app/index.html
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけて、その名前をクリックします。左側のペインで、 を選択します。
[永続ボリューム] ページで、永続ボリューム (PV) を見つけ、[アクション] 列の [ゴミ箱] をクリックします。
デフォルトでは、CNFS によって管理される NAS ファイルシステムのゴミ箱機能は有効になっています。 NAS コンソールで index.html ファイルを復元できます。
この例では、PV の名前は [nas-ecaf6018-5250-4e19-b570-5d9e657d23bc] です。

NAS ファイルシステムの [ゴミ箱] タブで、[削除されたファイルとディレクトリ] タブをクリックし、[アクション] 列の [復元] をクリックします。

[元のパスに復元] をクリックし、[OK] をクリックします。

ブラウザで NGINX ウェルカムページを更新します。 NGINX ウェルカムページが表示されます。
これは、NGINX アプリケーションの index.html ファイルが復元されたことを示しています。

関連情報
NAS のゴミ箱機能の詳細については、「ゴミ箱」をご参照ください。