File Storage NAS (NAS) ボリュームに、Container Network File System (CNFS) で管理されている自動拡張ポリシーを定義して、ストレージ使用量がしきい値を超えたときに NAS ボリュームを自動的に拡張できます。このトピックでは、CNFS を使用して NAS ボリュームを自動的に拡張する方法について説明します。
前提条件
クラスターは、CNFS を使用して NAS ファイルシステムを管理できます。詳細については、「CNFS を使用して NAS ファイルシステムを管理する(推奨)」をご参照ください。
クラスターは CSI プラグインを使用しており、ストレージ関連のコンポーネントは次の要件を満たしている必要があります。
csi-plugin および csi-provisioner のバージョンが 1.20.5-ff6490f-aliyun 以降であること。 csi-plugin および csi-provisioner の更新方法の詳細については、「csi-plugin および csi-provisioner を更新する」をご参照ください。
csi-plugin のデフォルトの
dnsPolicy
はClusterFirst
です。CNFS を使用して NAS ボリュームを自動的に拡張するには、デフォルトの dnsPolicy をClusterFirst
からClusterFirstWithHostNet
に変更する必要があります。storage-operator のバージョンが 1.18.8.56-2aa33ba-aliyun 以降であること。詳細については、「storage-operator」をご参照ください。
手順 1:storage-operator自動拡張 コンポーネントを設定し、を有効にする
storage-operator コンポーネントのデフォルトの storage-auto-expander は、ストレージリソースの自動拡張を担当します。クラスターに接続し、次のコマンドを実行して storage-operator の ConfigMap ファイルを変更し、自動拡張機能を有効にします。
kubectl patch configmap/storage-operator \
-n kube-system \
--type merge \
-p '{"data":{"storage-auto-expander":"{\"imageRep\":\"acs/storage-auto-expander\",\"imageTag\":\"\",\"install\":\"true\",\"template\":\"/acs/templates/storage-auto-expander/install.yaml\",\"type\":\"deployment\"}"}}'
手順 2:自動拡張ポリシーを設定する
CNFS オブジェクトのステータスを表示します。[使用可能] 状態であることを確認します。
CNFS オブジェクトをクエリします。
kubectl get cnfs
予想される出力:
NAME AGE default-cnfs-nas-837d6ea-20210819155623 14d
CNFS オブジェクトのステータスを表示します。
kubectl get cnfs <前の手順でクエリした CNFS オブジェクト> -o yaml | grep Available
予想される出力:
status: Available
次の YAML テンプレートを使用して、NAS ボリュームの自動拡張ポリシーを作成します。
cat << EOF | kubectl apply -f - apiVersion: storage.alibabacloud.com/v1alpha1 kind: StorageAutoScalerPolicy metadata: name: hybrid-expand-policy spec: pvcSelector: matchLabels: app: nginx # 永続ボリューム要求 (PVC) と、NAS ボリュームがマウントされているデプロイメントに追加されるラベルを指定する必要があります。この例では、app: nginx を指定します。 namespaces: - default - nginx conditions: - name: condition1 key: volume-capacity-used-percentage operator: Gt values: - "80" actions: - name: action1 type: volume-expand params: scale: 100% limits: 500Gi EOF
パラメーター
説明
pvcSelector
拡張ポリシーと、NAS ボリュームのマウントに使用される PVC を照合するために使用されるラベル。この例では、nginx が使用されています。
namespaces
NAS ボリュームのマウントに使用される PVC の名前空間。複数の名前空間を指定する場合、名前空間間の論理演算子は OR です。デフォルト値:default。この例では、default と nginx が指定されています。
conditions
アクションをトリガーする条件。複数の conditions 間の論理演算子は AND です。各 condition には、次のパラメーターが含まれます。
key:メトリックのタイプ。
volume-capacity-used-percentage:ストレージ使用量のしきい値をパーセンテージで表すことを指定します。
operator:演算子。Gt(より大きい)、Lt(より小さい)、Eq(等しい)、または Ne(等しくない)を指定できます。パラメーター値は大文字と小文字を区別しません。
values:しきい値。
この例では、PVC のストレージ使用率が 80% を超えると action がトリガーされるように条件が指定されています。
actions
上記の conditions が満たされたときに実行されるアクション。複数のアクションが許可されます。各アクションには、次のパラメーターが含まれます。
type:アクションのタイプ。volume-expand のみがサポートされています。
scale:ボリュームに追加するストレージのサイズ。有効な単位:GiB およびパーセンテージ (%)。
limits:action が実行された場合の PVC の最大容量。
アクション セクションで複数の アクション が指定されている場合、条件が満たされた最初の アクション が実行されます。その他の アクション はスキップされます。
この例では、action1 は、条件が満たされた場合、NAS ボリュームが 100% 拡張されることを指定しています。NAS ボリュームは最大 500 GiB まで拡張できます。
次の YAML テンプレートを使用して、PVC とデプロイメントを作成します。
重要自動拡張ポリシーは、指定されたラベルを持つ PVC とデプロイメントに適用されます。この例では、自動拡張ポリシーで pvcSelector.matchLabels が
app: nginx
に設定されています。この場合、ポリシーは labels パラメーターがapp: nginx
に設定されている PVC とデプロイメントに適用されます。cat << EOF | kubectl apply -f - kind: PersistentVolumeClaim apiVersion: v1 metadata: name: cnfs-nas-pvc labels: app: nginx # 拡張ポリシーの YAML テンプレートの pvcSelector.matchLabels パラメーターと同じ値を指定する必要があります。この例では、app: nginx を指定します。 spec: accessModes: - ReadWriteMany storageClassName: alibabacloud-cnfs-nas resources: requests: storage: 50Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: cnfs-nas-deployment labels: app: nginx spec: selector: matchLabels: app: nginx # 拡張ポリシーの YAML テンプレートの pvcSelector.matchLabels パラメーターと同じ値を指定する必要があります。この例では、app: nginx を指定します。 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 volumeMounts: - mountPath: "/data" name: cnfs-nas-pvc volumes: - name: cnfs-nas-pvc persistentVolumeClaim: claimName: cnfs-nas-pvc EOF
手順 3:NAS ボリュームが自動的に拡張できることを確認する
[default] 名前空間のすべてのポッドをクエリします。
kubectl get pod
予想される出力:
NAME READY STATUS RESTARTS AGE cnfs-nas-deployment-56dbcc7fb7-wh79z 1/1 Running 0 20m
アプリケーション ポッドにログオンし、NAS ボリュームがマウントされているディレクトリに 50 GiB のデータを書き込みます。
cd /data dd if=<データパス> of=<マウントパス> kubectl exec -it cnfs-nas-deployment-56dbcc7fb7-wh79z -ti -- dd if=/dev/zero of=/data/test1 bs=1G count=50
ボリューム拡張に関連するイベントを確認します。
kubectl get events
次の出力は、NAS ボリュームのストレージ使用量が 80% を超え、ボリューム拡張がトリガーされたことを示しています。NAS ボリュームは 50 GiB から 100 GiB に拡張されます。
12s Warning StartExpand persistentvolumeclaim/cnfs-nas-pvc Start to expand of pvc cnfs-nas-pvc from 50Gi to 100Gi, usedCapacityPercentage:96%, freeSize:2048MB. 12s Normal ExternalExpanding persistentvolumeclaim/cnfs-nas-pvc waiting for an external controller to expand this PVC 12s Normal Resizing persistentvolumeclaim/cnfs-nas-pvc External resizer is resizing volume nas-462db2b2-717d-44fe-b0b6-fb4db03a**** 12s Normal VolumeResizeSuccessful persistentvolumeclaim/cnfs-nas-pvc Resize volume succeeded
CSI NAS ダッシュボードでボリュームの使用状況情報を確認します。
ACK コンソール にログオンします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターを見つけ、その名前をクリックします。左側のペインで、 を選択します。
[Prometheus モニタリング] ページで、
を選択します。[CSI NAS] タブで、NAS ストレージボリュームが配置されている名前空間と PVC を選択します。次に、合計容量セクションで NAS ボリュームの容量を表示できます。
この例では、[名前空間] を [default] に設定し、[PVC] を [cnfs-nas-pvc] に設定します。
上記のグラフは、10:23:30 に拡張が発生し、NAS ボリュームが 100 GiB に拡張されたことを示しています。