自建K8SクラスタでのAlibaba Cloud分散ストレージの使用
Categories:
序論
本文は2024年6月14日に執筆され、Alibaba Cloudの自建クラスタでAlibaba Cloud分散ストレージを使用する方法を紹介します。最後にドキュメントへのリンクを添付します。Alibaba Cloudの公式ドキュメントは中国語ですが、Alibaba CloudストレージプラグインのインストールはGitHub上にあり、現在は英語のドキュメントしかありません。条件が許せば、読者は原文を読むことをお勧めします。
ストレージプラグインのインストール
- カスタム権限ポリシーの作成: https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/ram-policies/disk.json
- RAMロールの作成、カスタム権限ポリシーの付与、
accesskeyとsecretを一時保存kubectl create secret -n kube-system generic csi-access-key --from-literal=id='{id}' --from-literal=secret='{secret}'
- CSIドライバのインストール、helm chartはありません。ローカルでのみインストール可能(20240613)
git clone https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver.gitcd alibaba-cloud-csi-driver/deploy- Alibaba CloudのECS上に構築した自建クラスタの場合は、次のコマンドを直接実行してください。そうでない場合は、https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/install.md を読んでください。
helm upgrade --install alibaba-cloud-csi-driver ./chart --values chart/values-ecs.yaml --namespace kube-system
- 確認、
watch kubectl get pods -n kube-system -l app=csi-plugin
ストレージタイプ選定の参考
- ECSクラウドディスクの最小容量は20GB、IOPSは3000です。この容量は比較的大きく、あまり割安ではありません。
- クラウドディスク動的ストレージボリューム
- 公式ドキュメント:
- クラウドディスクは可用域をまたいで使用できず、共有ストレージではなく、同時に1つのPodにのみマウントできます。(実測では同じdeploymentの複数Podにマウント可能)
- クラウドディスクタイプとECSタイプは一致していなければマウントできません。一致しない場合はマウント失敗します。クラウドディスクタイプとECSタイプの対応関係については、インスタンス仕様ファミリをご参照ください。
- アプリケーションの展開時に、StorageClassを使用してPVを自動作成し、クラウドディスクを購入します。すでにクラウドディスクを購入している場合は、クラウドディスク静的ストレージボリュームの使用を推奨します。
- クラウドディスクの申請サイズは、単一ディスク容量範囲を超えてはなりません。
- Podが再作成された場合、元のクラウドディスクが再マウントされます。他の制限により元の可用域にスケジューリングできない場合、PodはPending状態になります。
- 動的に作成されたクラウドディスクは従量課金制です。
- その他のテストまとめ:
- クラウドディスクは複数Podにマウント可能ですが、1つのPodのみが読み書きでき、他のPodは読み書きできません。したがって、PVCの
accessModesはReadWriteOnceに設定する必要があります。変更しても正しい結果は得られません。 - StorageClassの
reclaimPolicyがDeleteに設定されている場合、PVCを削除するとクラウドディスクも自動削除されます。 - StorageClassの
reclaimPolicyがRetainに設定されている場合、PVCを削除してもクラウドディスクは自動削除されず、クラスタとAlibaba Cloudコンソールで手動削除が必要です。
- クラウドディスクは複数Podにマウント可能ですが、1つのPodのみが読み書きでき、他のPodは読み書きできません。したがって、PVCの
- 適切な使用シナリオを見つけるのが難しいです。
- 公式ドキュメント:
- クラウドディスク静的ストレージボリューム
- 公式ドキュメント:
- PVとPVCを手動で作成
- クラウドディスクは可用域をまたいで使用できず、共有ストレージではなく、同時に1つのPodにのみマウントできます。
- クラウドディスクタイプとECSタイプは一致していなければマウントできません。一致しない場合はマウント失敗します。
- クラスタと同じリージョンと可用域で、マウント待ち状態のクラウドディスクを選択できます。
- 公式ドキュメント:
- クラウドディスク動的ストレージボリューム
- NASの操作レイテンシは大きく、最良で2ms、深いストレージで10ms、従量課金制、OSSオブジェクトストレージに比べて読み書き性能が高いです。
- OSSストレージボリューム、https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/oss-volume-overview-1?spm=a2c4g.11186623.0.0.43166a351NbtvU
- OSSは共有ストレージで、複数のPodに同時に共有ストレージサービスを提供できます。
- (20240613)現在、CentOS、Alibaba Cloud Linux、ContainerOS、龍蜥OSをサポートしています。
- データボリュームを使用する際は、各アプリケーションに個別のPV名を使用します。
- OSSデータボリュームはossfsファイルを使用してマウントされるFUSEファイルシステムです。
- 設定ファイル、動画、画像ファイルなどを読むシナリオに適しています。
- ファイルを書き込むアプリケーションシナリオには適していません。ファイルを書き込む必要がある場合は、SDKを使用して書き込み操作を実装するか、NASストレージボリュームサービスを使用することをお勧めします。
- ossfsは設定パラメータを調整することで、キャッシュや権限などの面でのパフォーマンスを最適化できます。
- ossfsの使用制限
- ランダムまたは追記書き込み操作により、すべてのファイルが再書き込みされます。
- OSSサーバーにリモートアクセスが必要なため、list directoryなどのメタデータ操作のパフォーマンスが劣ります。
- ファイルやフォルダのrename操作はアトミックではありません。
- 複数のクライアントが同じOSS Bucketをマウントする場合、ユーザーが各クライアントの動作を調整する必要があります。たとえば、複数のクライアントが同じファイルに書き込むことを避けるなどです。
- ハードリンク(Hard Link)はサポートされていません。
- CSI pluginのバージョンがv1.20.7未満の場合、ローカルの変更のみを検出し、他のクライアントやツールの外部変更を検出できません。
- システムの負荷上昇を避けるため、高並列読み書きシナリオでの使用は避けてください。
- ハイブリッドクラスタ(一部のノードがAlibaba Cloudに属さない)の場合は、NASとOSSの静的ボリュームのみ使用可能です。
- クラウドディスク、NAS、OSSはすべてリージョン制限があります。
まとめると、クラウドディスクはディスク全体の形で申請・マウントされ、共有が不便です。OSSはファイル単位での操作粒度で、高並列読み書きではパフォーマンスの問題があります。サポートされているシステムも限定的です。
- クラウドディスクは大量のスペースと高性能を必要とするデータベースなどのシナリオに適しています。
- それ以外のパフォーマンス要件が高くないシナリオはすべてNASを選択できます。
- OSSはAlibaba Cloudクラスタの高並列書き込みシナリオには適していませんが、並列読み込みシナリオには適用できます。
Alibaba Cloudの公式ドキュメントは場所が統一されておらず、相互に矛盾する点があるため、読者はドキュメントの日付に基づいて自分で判断する必要があります。バージョンの更新により、すでにサポートされているかもしれない特性がサポートされていないと宣言されている場合があります。自分でいくつか試す必要があります。
操作手順
これはAlibaba Cloudの公式ガイドドキュメントです。上記の指示に従ってAlibaba Cloudストレージプラグインをインストールした後、NAS静的ストレージボリュームの使用に従って展開テストを行います。
注意: k3sユーザーはlocal-path-storageの問題に遭遇する可能性があり、エラーメッセージは次のようになります。
- failed to provision volume with StorageClass “local-path”: claim.Spec.Selector is not supported
- Waiting for a volume to be created either by the external provisioner ’localplugin.csi.alibabacloud.com’ or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered.
persistentVolumeClaimのstorageClassNameを空に設定し、k3sのデフォルトlocal-path-storageの使用を避けてください。
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-nas
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
selector:
matchLabels:
alicloud-pvname: pv-nas
storageClassName: ""
参考
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/disk.md
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/install.md
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/ram-policies/disk.json
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/deploy/chart/values.yaml
- https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/use-dynamically-provisioned-disk-volumes?#6d16e8a415nie
- https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/mount-statically-provisioned-nas-volumes?spm=a2c4g.11186623.0.0.125672b9VnrKw6