NAS 永続ボリュームの手動でのスケールアウトには、人間による介入が必要です。Container Network File System (CNFS) の自動スケーリング機能は、より効率的です。ストレージ使用量がしきい値に達したときに、自動的にスケールアウトをトリガーするポリシーを設定できます。これにより、弾力的な容量管理が実現されます。
仕組み
NAS 永続ボリュームの自動スケーリングは、storage-operator コンポーネントによって処理され、ビジネスコードの変更は不要です。コアワークフローは次のとおりです。
|
適用範囲
ストレージコンポーネントは、次の要件を満たしている必要があります。
csi-plugin および csi-provisioner: バージョン v1.20.5-ff6490f-aliyun 以降。
コンポーネントをアップグレードするには、「CSI コンポーネントのアップグレード」をご参照ください。
storage-operator: バージョン v1.18.8.56-2aa33ba-aliyun 以降。
コンポーネントをアップグレードするには、「storage-operator コンポーネントの管理」をご参照ください。
v1.33.1 より前の storage-operator バージョンを使用している場合は、自動スケーリング機能を有効にするために ConfigMap を手動で変更する必要もあります。
cnfs-controller: コンポーネントがインストールされています。
これはデフォルトでインストールされるマネージドコンポーネントです。アンインストールされていないことを確認してください。
CNFS が作成され、そのステータスが Available です。詳細については、「CNFS を使用した NAS ファイルシステムの管理」の CNFS の作成に関するセクションをご参照ください。
ステップ 1: NAS 永続ボリュームのスケールアウトポリシーの定義
スケールアウトポリシーの定義は、自動スケーリングの中心です。このステップでは、トリガー条件とスケールアウト動作を指定するポリシーを作成します。
次の YAML テンプレートを使用して、StorageAutoScalerPolicy を作成します。
このポリシーは、defaultまたはnginx名前空間内のapp: nginxというラベルが付いた PVC の容量使用量が 80% を超えたときに、自動スケーリング操作をトリガーします。各スケールアウトは、現在の容量を 100% 増加させ、最大 200 GiB まで拡張します。
cat << EOF | kubectl apply -f -
apiVersion: storage.alibabacloud.com/v1alpha1
kind: StorageAutoScalerPolicy
metadata:
name: hybrid-expand-policy
spec:
# Apply this policy to matching PVCs using a label selector.
pvcSelector:
matchLabels:
app: nginx # Must be the same as the labels configured for the PVC and deployment.
# The namespaces where the policy takes effect.
namespaces:
- default
- nginx
# The conditions that trigger a scale-out.
conditions:
- name: condition1
key: volume-capacity-used-percentage # Monitoring metric: capacity usage percentage.
operator: Gt # Comparison operator: Gt (Greater than).
values:
- "80" # Threshold: 80%.
# The actions to perform when the conditions are met.
actions:
- name: action1
type: volume-expand # Action type: scale out.
params:
scale: 100% # Scaling step size: Increase by 100% of the current capacity.
limits: 200Gi # Capacity limit: The total capacity after scaling out cannot exceed 200 GiB.
EOFパラメーター | 説明 |
| ラベルセレクターを使用して、このスケールアウトポリシーが適用される PVC と一致させます。 |
| ポリシーが有効になる名前空間のリストです。複数の名前空間には OR ロジックが適用されます。このパラメーターが構成されていない場合、デフォルト値は `default` です。 |
| 1 つ以上の条件付きステートメント (
|
|
|
ステップ 2: StorageClass の作成
既存の NAS ファイルシステムに基づいて永続ボリュームを動的に作成するためのストレージテンプレートを定義するために、StorageClass を作成します。永続ボリューム (PV) の明確な容量ベースラインを提供するために、allowVolumeExpansion パラメーターを true に設定する必要があります。自動スケーリングポリシーは、このベースラインに依存して使用量を計算します。
cat << EOF | kubectl apply -f -
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: alibabacloud-cnfs-nas # The name of the StorageClass. It will be referenced in the PVC later.
mountOptions:
- nolock,tcp,noresvport
- vers=3
parameters:
volumeAs: subpath
# The server field format is <nas-server-address>:/<path>.
server: "0cd8b4a576-g****.cn-hangzhou.nas.aliyuncs.com:/k8s"
archiveOnDelete: "true"
provisioner: nasplugin.csi.alibabacloud.com
reclaimPolicy: Retain
# Must be set to true to enable volume expansion. This is a prerequisite for the auto-scaling feature.
allowVolumeExpansion: true
EOFパラメーターの詳細については、「CNFS を使用した NAS ファイルシステムの管理」をご参照ください。
ステップ 3: アプリケーションと関連 PVC のデプロイ
ポリシーを作成したら、ポリシーを対応する PVC に関連付けるために、一致するラベルを持つアプリケーションをデプロイする必要があります。
次の YAML テンプレートを使用して、PVC と Deployment を作成します。両方のオブジェクトの labels (app: nginx) が、ポリシーの pvcSelector.matchLabels 構成と正確に一致していることを確認してください。
cat << EOF | kubectl apply -f -
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: cnfs-nas-pvc
labels:
app: nginx # Must be the same as the pvcSelector.matchLabels configuration in the scale-out policy.
spec:
accessModes:
- ReadWriteMany
# Reference the StorageClass created earlier.
storageClassName: alibabacloud-cnfs-nas
resources:
requests:
storage: 20Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: cnfs-nas-deployment
labels:
app: nginx
spec:
selector:
matchLabels:
app: nginx # Must be the same as the pvcSelector.matchLabels configuration in the scale-out policy.
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
volumeMounts:
- mountPath: "/data"
name: cnfs-nas-pvc
volumes:
- name: cnfs-nas-pvc
persistentVolumeClaim:
claimName: cnfs-nas-pvc
EOFステップ 4: 自動スケーリング結果の確認
ポリシーがデプロイされたら、アナログデータを書き込んでスケールアウトをトリガーします。その後、関連イベントとモニタリングメトリックを監視して、ポリシーが有効であることを確認します。
default 名前空間内のすべての Pod を表示します。
kubectl get pods -l app=nginx期待される出力:
NAME READY STATUS RESTARTS AGE cnfs-nas-deployment-56dbcc7fb7-wh79z 1/1 Running 0 20mアプリケーション Pod にログインし、マウントされたディレクトリに 20 GiB のテストデータを書き込みます。これにより、ストレージ使用量が 80% のしきい値を超えます。
書き込み操作には、ネットワークスループットやバックエンドストレージパフォーマンスなどの要因に応じて、時間がかかる場合があります。
kubectl exec -it <POD_NAME> -- dd if=/dev/zero of=/data/testfile bs=1G count=20スケールアウトをトリガーしたイベントを表示します。
kubectl get events | grep cnfs-nas-pvcスケールアウトがトリガーされると、システムは関連イベントを生成します。期待される出力には、
StartExpandやVolumeResizeSuccessfulなどのイベントが含まれるはずです。これらのイベントは、スケールアウトが正常にトリガーおよび完了し、容量が 20 GiB から 40 GiB にスケールアウトされたことを示します。12s Warning StartExpand persistentvolumeclaim/cnfs-nas-pvc Start to expand of pvc cnfs-nas-pvc from 20Gi to 40Gi, usedCapacityPercentage:99%, freeSize:204MB. 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 succeededkubectl get pvcを実行して、PVC の容量が更新されたかどうかを確認することもできます。CSI NAS モニタリングダッシュボードで永続ボリュームの使用状況情報を表示します。
Alibaba Cloud Prometheus Monitoring を有効にする必要があります。
[Prometheus Monitoring] ページで、[Storage Monitoring] タブをクリックし、次に [CSI NAS] タブをクリックします。
[CSI NAS] ダッシュボードで、NAS 永続ボリュームが配置されている [名前空間] および [PVC 名] を選択します。その後、[合計容量] エリアで NAS 永続ボリュームの現在の容量を表示できます。
この例では、[Namespace] を default に、[PVC] を cnfs-nas-pvc に設定します。

上記の図は、スケールアウトが 10:23:30 にトリガーされ、スケールアウト後の容量が 100 GiB であることを示しています。
本番環境での推奨事項
本番環境で NAS 永続ボリュームの自動スケーリング機能をより効果的に使用するには、次のベストプラクティスに従ってください。
ディメンション | 説明 |
コスト最適化 |
|
ポリシーと信頼性 |
|
パフォーマンスに関する考慮事項 | 容量とパフォーマンスのバランス: 自動スケーリングは容量の問題を解決しますが、パフォーマンスボトルネックは解決しません。1 秒あたりの入出力操作 (IOPS) や多数の小さなファイルの読み書き操作が原因でアプリケーションの速度が低下する場合は、より高いパフォーマンスを持つ NAS タイプを選択することを検討してください。 |