Kubernetes アプリケーションでは、データを保存するために永続ストレージが必要となることがよくあります。Alibaba Cloud Container Service for Kubernetes (ACK) は、標準的な Container Storage Interface (CSI) を介して、Elastic Block Storage (EBS)、Object Storage Service (OSS)、Network Attached Storage (NAS)、Cloud Parallel File Storage (CPFS) などの複数の Alibaba Cloud ストレージサービスと統合されています。また、ACK は Kubernetes ネイティブのストレージメカニズムとも互換性があり、さまざまなビジネスシナリオに合わせたストレージソリューションを提供します。ACK は Container Storage Interface (CSI) を通じて複数の Alibaba Cloud ストレージサービスと統合されており、Kubernetes ネイティブのボリュームタイプもサポートしています。これにより、一時的および永続的なワークロードの両方に対して柔軟なストレージオプションが提供されます。
ストレージソリューションの選択
ACK では、以下の 2 種類のストレージソリューションを提供しています。
Kubernetes ネイティブボリューム:一時データ、構成管理、またはノードレベルでの連携を目的として設計されています。そのライフサイクルは Pod に紐付いており、アプリケーションデータの永続化には対応していません。
Alibaba Cloud 永続ボリューム:Container Storage Interface (CSI) コンポーネントを介して統合され、ワークロードに対して安定的かつ信頼性の高いデータ永続化を提供します。そのライフサイクルは Pod とは独立しており、ステートフルアプリケーションをサポートします。
コンテナストレージを使用する前に、ボリューム、PersistentVolume (PV)、PersistentVolumeClaim (PVC) などの基本概念を理解しておく必要があります。詳細については、「ストレージの基本」をご参照ください。
Kubernetes ネイティブボリューム
Kubernetes ネイティブボリュームは、Pod に紐付いたライフサイクルを持ち、アプリケーションデータの永続化には適していません。
タイプ | 説明 | 主な特徴 |
emptyDir | Pod のライフサイクルと一致する一時的な空ディレクトリです。 | Pod が削除されるとデータは失われます。Pod 内のコンテナー間でのデータ交換や一時キャッシュに使用します。 |
HostPath | ホストノード上のファイルまたはディレクトリを Pod にマウントします。 詳細については、「HostPath ボリューム | データはノードに固定され、Pod と共に移動しません。高可用性および永続性を必要とするステートフルアプリケーション(例:データベースやキャッシュ)には適していません。 |
ConfigMap/Secret | 設定項目や機密認証情報をファイルとしてマウントします。 | 小容量の構成データ専用であり、業務データには使用できません。アプリケーションから構成を分離するために使用します。 |
Alibaba Cloud 永続ボリューム
永続データストレージを必要とするステートフルアプリケーションには、Alibaba Cloud 永続ボリュームを使用できます。これらのボリュームは Pod とは独立したライフサイクルを持ち、CSI を使用して Kubernetes と統合されています。
ソリューション比較
適切なオプションを迅速に選択できるよう、以下の表に各ストレージソリューションの主要属性を示すアイコンを記載しています。たとえば、EBS の場合:
クラウドディスク:ソリューションの詳細。(詳細を表示)をクリックすると詳細が表示されます。静的/動的: 静的プロビジョニング (PV/PVC) と動的プロビジョニング (StorageClass/PVC) を含む、サポートされているボリュームプロビジョニングメソッド。ステップバイステップの手順については、リンクをクリックしてください。
RWO: サポートされているアクセスモード (
accessModes) は、 RWO (ReadWriteOnce)、 RWX (ReadWriteMany)、および ROX (ReadOnlyMany) です。課金:課金の詳細。リンクをクリックすると詳細が表示されます。
ストレージオプション | 説明 | トレードオフと制限事項 |
|
| |
|
| |
RWX、ROX | 課金 |
|
|
|
| |
|
|
基本的なパフォーマンス以外にも、ストレージオプションはフェールリカバリ、容量管理、データ保護などの運用面で異なります。選択を絞り込むために、以下の質問を検討してください。
主要コンポーネントと基本概念
CSI コンポーネント (csi-plugin、csi-provisioner)
これらのコンポーネントは、Kubernetes コミュニティが推奨するストレージプラグインの実装です。ACK クラスターでは、デフォルトでプリインストール済みかつ有効になっています。コンポーネントは Alibaba Cloud ストレージ API と連携して、ボリュームの自動作成、マウント、アンマウントを含むライフサイクル全体を管理します。詳細については、「csi-plugin および csi-provisioner コンポーネントの管理」をご参照ください。
Container Network File System (CNFS)
CNFS は、ACK Pro マネージドクラスターで利用可能な強化ストレージ機能です。NAS、OSS、CPFS を Kubernetes のカスタムリソース定義 (CRD) として抽象化し、動的サブディレクトリ作成、クォータ管理、I/O パフォーマンス監視、ゴミ箱管理、分散キャッシュなどの詳細な管理を可能にします。詳細については、「Container Network File System (CNFS)」をご参照ください。
注意事項
CSI を使用する際は、以下の制限事項にご注意ください。
クラスターバージョン:クラスターは Kubernetes 1.14 以降を実行している必要があります。クラスターをアップグレードするには、「クラスターの手動アップグレード」をご参照ください。
クラスター環境:CSI は ACK クラスターで完全にテストおよび検証されています。Alibaba Cloud 以外の環境や Alibaba Cloud 上のセルフマネージドクラスターなど、ACK 以外のクラスターでは、構成、権限、ネットワークの違いにより、すぐに使用できる機能を提供できない場合があります。
alibaba-cloud-csi-driver のソースコードを確認し、ご利用の環境に合わせて調整することを推奨します。
ノード構成:kubelet パラメーター
--enable-controller-attach-detachはtrueに設定されている必要があります。オペレーティングシステム:Windows ノードはサポートされていません。
RBAC 権限:PersistentVolume (PV) はクラスタースコープのリソースです。PersistentVolumeClaim (PVC) は名前空間スコープです。RBAC 権限を付与する際は、これら 2 つのリソースタイプに必要なアクセスレベルの違いにご注意ください。
管理者や O&M エンジニアなどのデフォルトの ACK ロールが要件を満たさない場合は、カスタム権限を設定できます。たとえば、デフォルトの O&M エンジニアロールは、承認された名前空間内の PVC に対して読み取り/書き込みアクセスを許可しますが、クラスター全体の PV に対しては読み取り専用アクセスのみを許可します。そのため、このロールを使用して PV を手動で作成することはできません。詳細については、「RAM ユーザーまたは RAM ロールへの RBAC 権限の付与」をご参照ください。
よくある質問
クラスターが使用しているストレージプラグインを確認する方法を教えてください。
以下のいずれかの方法を使用できます。
ACK コンソールでノードのアノテーションを確認する
ACK クラスター ページで、ご利用のクラスター名をクリックします。クラスター詳細ページの左側ナビゲーションウィンドウで、 をクリックします。
ノードリストで管理対象のノードを見つけ、詳細 を 操作 列でクリックします。概要 タブで、ノードの アノテーション を確認します。
volumes.kubernetes.io/controller-managed-attach-detach: trueが存在する場合、ストレージプラグインは CSI です。存在しない場合、プラグインは FlexVolume です。
コマンドで kubelet パラメーターを確認する
ノードにログインし、kubelet パラメーターを確認します。
ps -ef | grep kubelet期待される出力:
--enable-controller-attach-detach=truetrue:ストレージプラグインは CSI です。false:ストレージプラグインは FlexVolume です。
CSI プラグインに手動で権限を付与する方法を教えてください。
CSI プラグインは、ボリュームのマウント、アンマウント、作成、削除時に他のクラウドリソースにアクセスするための権限を必要とします。デフォルトでは、ACK クラスターに CSI がインストールされ、必要な権限が設定されています。手動で権限を設定するには、以下の手順を実行します。
RAM ロールを使用して権限を付与する(デフォルト):CSI プラグインは、他の Alibaba Cloud サービスのリソースにアクセスするために AliyunCSManagedCsiRole を使用します。詳細については、「ACK サービスロール」をご参照ください。
ACK マネージドクラスター:ACK マネージドクラスターの場合、CSI が使用する RAM ロールのトークンは、addon.csi.token という名前の Secret に保存されています。この Secret をマウントすることで、権限を付与し、API アクセスを有効にできます。
ACK 専用クラスター:ACK 専用クラスターの場合、CSI はその Pod が実行されている ECS ノードに割り当てられた RAM ロールを継承します。
RAM ロールへの権限付与の詳細については、「RAM ロールの権限管理」をご参照ください。
AccessKey ペアを使用して権限を付与する
環境変数を使用:AccessKey ペアを Kubernetes Secret として作成し、環境変数として CSI Pod に注入します。これにより、デプロイメントテンプレート内に資格情報をプレーンテキストで露出させることを防げます。
YAML エントリーを直接使用:AccessKey ペアを CSI YAML ファイルに直接埋め込みます。この方法は本番環境では推奨されません。