Container Network File System (CNFS) は、誤って削除されたNASファイルを復元するために使用されるごみ箱機能をサポートしています。 このトピックでは、CNFSのごみ箱機能を使用して削除されたNASファイルを復元する方法について説明します。 インターネットアクセスを有するNGINXアプリケーションが、例として使用される。
背景情報
この例では、CNFS StorageClassを使用してボリュームを要求し、ボリュームをNGINXアプリケーションのポッドにマウントしてから、ボリュームに格納されているindex.htmlファイルを削除します。 index.htmlファイルを削除すると、NGINXウェルカムページにアクセスできなくなります。 NGINXウェルカムページを復元するには、CNFSのごみ箱機能を使用してindex.htmlファイルを復元します。
使用上の注意
課金
ごみ箱機能の有効化には課金されません。 ただし、ごみ箱に一時的に保存されたファイルが占有するストレージスペースに対して課金されます。 ストレージ料金は、ファイルが削除される前のファイルのストレージタイプに基づいて計算されます。 ストレージコストを削減するために、ファイルの保存期間を指定することを推奨します。 詳細については、「汎用NASファイルシステムの課金」および「IAストレージクラスの課金」をご参照ください。
権限
ごみ箱機能を使用できるのは、ファイルシステムの所有者または許可されたRAM (Resource Access Management) ユーザーのみです。 詳細については、「RAMポリシーに基づくアクセス制御の実行」をご参照ください。
前提条件
ACKクラスターが作成されます。 Container Storage Interface (CSI) プラグインがボリュームプラグインとして使用されます。 詳細については、「ACK管理クラスターの作成」をご参照ください。
新しいクラスターを使用する場合は、クラスターの作成時にCSIボリュームプラグインと [デフォルトのNASファイルシステムとCNFSを使用して動的にボリュームをプロビジョニング] を選択します。
クラスターの作成時に [デフォルトのNASファイルシステムとCNFSを使用したボリュームの動的プロビジョニング] を選択しない場合、CNFSを使用してNASファイルシステムを管理できます。 詳細については、「CNFSを使用したNASファイルシステムの管理」をご参照ください。
クラスターはインターネット経由でアクセスできます。
クラスター作成時にインターネットアクセスを有効にする方法の詳細については、「クラスター作成時にEIPをAPIサーバーに関連付ける」をご参照ください。
既存のクラスターのインターネットアクセスを有効にする方法の詳細については、「クラスターの作成後にEIPをAPIサーバーに関連付ける」をご参照ください。
csi-pluginとcsi-provisionerのバージョンは1.20.5 ff6490f-aliyun以降です。 詳細については、「CSIプラグインのインストールとアップグレード」をご参照ください。
storage-operatorのバージョンは1.18.8.56-2aa33ba-aliyun以降です。 詳細については、「コンポーネントの管理」をご参照ください。
ステップ1: 永続ボリュームクレーム (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を作成します。
重要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を参照するために使用されます。 この例では、Deploymentの名前は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サービスが作成されます。 サービスは、インターネットからapp:nginxラベルが追加されたポッドにHTTPリクエストを転送するために使用されます。
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ウェルカムページファイルを、[実行中] 状態のポッドの /appパスに書き込みます。
次のコマンドを実行してポッドを照会します。
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の Welcome ページが表示されます。
この例では、パブリックIPアドレスは
47.115.XX.XX
です。
ステップ2: CNFSのごみ箱機能を確認する
CNFSが管理するNASボリュームのごみ箱から削除したファイルをリストアする例を次に示します。
次のコマンドを実行して、index.htmlファイルを削除します。
kubectl exec cnfs-nas-deployment-597bc9fb45-cmkss -- rm -rf /app/index.html
ブラウザでNGINXウェルカムページを更新します。 403禁止エラーが表示されます。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[永続ボリューム] ページで、永続ボリューム (PV) を見つけ、[操作] 列の [ごみ箱] をクリックします。
デフォルトでは、CNFSによって管理されるNASファイルシステムのごみ箱機能が有効になっています。 NASコンソールでindex.htmlファイルを復元できます。
この例では、PVの名前はnas-ecaf6018-5250-4e19-b570-5d9e657d2 3bcです。
NASファイルシステムの [ごみ箱] タブで、[削除されたファイルとディレクトリ] タブをクリックし、[操作] 列の [復元] をクリックします。
[元のパスに復元] をクリックし、[OK] をクリックします。
ブラウザでNGINXウェルカムページを更新します。 NGINXの Welcome ページが表示されます。
NGINXアプリケーションのindex.htmlファイルが復元されたことを示します。
関連ドキュメント
ごみ箱を無効にして空にする方法については、「ごみ箱」をご参照ください。