Container Network File System (CNFS) によって管理されるApsara File Storage NAS (NAS) ボリュームの自動拡張ポリシーを定義して、ストレージ使用量が特定のしきい値を超えたときにNASボリュームを自動的に拡張できます。 このトピックでは、CNFSを使用してNASボリュームを自動的に拡張する方法について説明します。
前提条件
Container Service for Kubernetes (ACK) が作成されました。 Container Storage Interface (CSI) プラグインは、クラスタのボリュームプラグインとして使用されます。
新しいクラスターを使用する場合は、クラスターを作成するときに、[CSIボリュームプラグイン] と [デフォルトのNASファイルシステムとCNFSを使用してボリュームを動的にプロビジョニングする] 、[NASごみ箱を有効にし、高速データ復元をサポートする] オプションを選択します。
既存のクラスターを使用し、デフォルトのNASファイルシステムとCNFSを使用してボリュームを動的にプロビジョニングし、NASごみ箱を有効にし、クラスターの作成時に高速データ復元をサポートするオプションが選択されていない場合は、CNFSを使用してNASファイルシステムを管理できます。 詳細については、「CNFSを使用したNASファイルシステムの管理」をご参照ください。
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: 自動スケールアップを有効にする
ストレージ・オペレータ・コンポーネント内のデフォルトのストレージ自動エクスパンダは、自動ストレージ拡張を管理します。 自動スケールアップを有効にするには、次のコマンドを実行して、ストレージオペレーターコンポーネントの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オブジェクトの状態がAvailableであることを確認します。
次のコマンドを実行してCNFSオブジェクトを照会します。
kubectl get cnfs
期待される出力:
NAME AGE default-cnfs-nas-837d6ea-20210819155623 14d
次のコマンドを実行して、CNFSオブジェクトのステータスを表示します。
kubectl get cnfs <The CNFS object queried in the previous step> -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 # You must specify the label that is added to the persistent volume claim (PVC) and the Deployment to which the NAS volume is mounted. In this example, app: nginx is specified. 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が使用されます。
名前空間
NASボリュームのマウントに使用されるPVCの名前空間。 複数の名前空間を指定した場合, 名前空間間の論理演算子はORです。 デフォルト値: Default。 この例では、defaultとnginxが指定されています。
条件
アクションをトリガーする条件。 複数の条件間の論理演算子はANDです。 各条件には、次のパラメータが含まれます。
key: メトリックのタイプ。
volume-capacity-used-percentage: ストレージ使用量のしきい値をパーセンテージで表すことを指定します。
演算子: Gt (より大きい) 、Lt (より小さい) 、Eq (等しい) 、またはNe (等しくない) とすることができる演算子。 パラメーター値は大文字と小文字を区別しません。
values: しきい値。
この例では、条件は、PVCのストレージ使用率が80% を超えたときにアクションがトリガーされることを指定します。
アクション
上記の条件が満たされたときに実行されるアクション。 複数のアクションが許可されます。 各アクションには以下のパラメータが含まれます。
type: アクションのタイプ。 ボリューム拡張のみがサポートされています。
scale: ボリュームに追加するストレージのサイズ。 有効な単位: GiBとパーセンテージ (%) 。
limits: アクションが実行された場合のPVCの最大容量。
actionsセクションで複数のアクションが指定されている場合、条件が満たされている最初のアクションが実行されます。 その他のアクションはスキップされます。
この例では、action1は、条件が満たされた場合、NASボリュームが100% 拡張されることを指定します。 NASボリュームは最大500 GiBまで拡張できます。
次のYAMLテンプレートを使用して、PVCとデプロイを作成します。
重要自動拡張ポリシーは、指定されたラベルを持つPVCと展開に適用されます。 この例では、自動拡張ポリシーでpvcSelector.matchLabelsが
app: nginx
に設定されています。 この場合、ポリシーは、labelsパラメーターがapp: nginx
に設定されているPVCとDeploymentに適用されます。cat << EOF | kubectl apply -f - kind: PersistentVolumeClaim apiVersion: v1 metadata: name: cnfs-nas-pvc labels: app: nginx # You must specify the same value as the pvcSelector.matchLabels parameter in the YAML template of the expansion policy. In this example, app: nginx is specified. 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 # You must specify the same value as the pvcSelector.matchLabels parameter in the YAML template of the expansion policy. In this example, app: nginx is specified. 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
次のコマンドを実行して、アプリケーションポッドにログインします。
kubectl exec cnfs-nas-deployment-56dbcc7fb7-wh79z -ti sh
次のコマンドを実行して、NASボリュームがマウントされているディレクトリに50 GiBのデータを書き込みます。
cd /data dd if=<data path> of=<mounted path>
次のコマンドを実行して、ボリューム拡張に関連するイベントを確認します。
kubectl get events
期待される出力:
default 0s Warning NotEnoughDiskSpace persistentvolumeclaim/cnfs-nas-pvc Pvc cnfs-nas-pvc is not enough disk space, namespace: default, totalSize:50Gi, usedSize:49Gi, usedPercentage:98.00%, threshold:85.00% default 1s Warning StartExpand persistentvolumeclaim/cnfs-nas-pvc Start to expand of pvc cnfs-nas-pvc from 50Gi to 100Gi, usedCapacityPercentage:98%, freeSize:1024MB. default 0s Normal Resizing persistentvolumeclaim/cnfs-nas-pvc External resizer is resizing volume nas-1acba306-e626-46f3-8441-110c10a6**** default 0s Warning ExternalExpanding persistentvolumeclaim/cnfs-nas-pvc Ignoring the PVC: didn't find a plugin capable of expanding the volume; waiting for an external controller to process this PVC. default 0s Normal FileSystemResizeRequired persistentvolumeclaim/cnfs-nas-pvc Require file system resize of volume on node default 0s Normal FileSystemResizeSuccessful pod/cnfs-nas-deployment-56dbcc7fb7-wh79z MountVolume.NodeExpandVolume succeeded for volume "nas-1acba306-e626-46f3-8441-110c10a6****"
上記の出力は、NASボリュームのストレージ使用量が80% を超えたことを示しています。 NASボリュームは50 GiBから100 GiBに拡張されます。
CSIノードダッシュボードでCNFSに関するモニタリング情報を確認します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
Prometheusモニタリングページで、ストレージモニタリングタブをクリックし、CSI-ノードタブをクリックします。
[CSI-ノード] タブで、NASボリュームに基づいて [StorageType] と [名前空間] を設定し、NASボリュームのマウントに使用するPVCを選択します。 次に、[合計容量] チャートでNASボリュームの容量を確認できます。
この例では、StorageTypeをnas、名前空間をdefault、Pvcをcnfs-nas-pvcに設定します。
上のグラフは、16:55:30に拡張が発生し、NASボリュームが100 GiBに拡張されたことを示しています。