Container Service for Kubernetes (ACK) クラスターでワークロードを実行する場合、アプリケーションデータの永続ストレージ、機密データと構成データのストレージ、ストレージリソースの動的プロビジョニングなど、ストレージ要件が発生する可能性があります。ACK クラスターは、Container Storage Interface (CSI) プラグインに基づいてコンテナーストレージ機能を提供します。この機能は、Alibaba Cloud ストレージサービスを使用して、静的または動的にプロビジョニングされたボリュームを提供および管理します。
サポートされているボリューム
Kubernetes コミュニティでは、CSI プラグインを使用することを推奨しています。ACK のコンテナーストレージ機能は、CSI プラグインに基づいて実装されています。この機能は、Elastic Block Storage (EBS)、File Storage NAS (NAS)、Object Storage Service (OSS)、およびローカルディスクと統合されています。 emptyDir ボリューム、hostPath ボリューム、Secrets、ConfigMap などの Kubernetes ネイティブストレージサービスと完全に互換性があります。次の図は、CSI プラグインでサポートされているボリュームを示しています。
Alibaba Cloud ACK では、ポッドを Alibaba Cloud ディスク、NAS、OSS、ローカルボリュームなどのストレージサービスに自動的に関連付けることができます。次の表は、ボリュームの主な機能、使用シナリオ、および課金ルールを示しています。
CSI プラグインを使用すると、静的および動的にプロビジョニングされたボリュームをマウントできます。静的にプロビジョニングされたボリュームをマウントするには、永続ボリューム (PV) と永続ボリューム要求 (PVC) を手動で変更および作成する必要があります。多数の PV と PVC が必要な場合は、動的にプロビジョニングされたボリュームを作成およびマウントできます。PV と PVC の定義:
PV
PV は、Kubernetes クラスター内のストレージリソースです。 PV のライフサイクルは、PV がマウントされているポッドのライフサイクルとは無関係です。さまざまなタイプの StorageClass を使用して、さまざまなタイプの PV をプロビジョニングできます。
PVC
PVC は、クラスター内のストレージのリクエストです。 PV は、ポッドによって消費されるノードリソースです。 PVC は、PV を消費する要求です。 PV が不足している場合、PVC は PV を動的にプロビジョニングできます。
ストレージサービス | 静的にプロビジョニングされたボリューム | 動的にプロビジョニングされたボリューム | デフォルトの ACK ストレージ | 主な機能 | シナリオ | 課金 |
Alibaba Cloud ディスク | サポート | サポート | はい | 非共有ストレージ。ディスクは 1 つのノードにのみマウントできます。 |
詳細については、「ディスクボリューム」をご参照ください。 | ディスクの課金項目の詳細については、「ブロックストレージデバイス」をご参照ください。ディスクの価格設定の詳細については、ECS 製品ページをご覧ください。 |
NAS | サポート | サポート | はい | 高パフォーマンスと高スループットを提供する共有ストレージ。 |
詳細については、「NAS ボリューム」をご参照ください。 | |
OSS | サポート | サポート | はい | ユーザー空間でファイルシステムをサポートする共有ストレージ。 |
説明 OSS ボリュームは、ユーザー空間 (FUSE) でファイルシステムとして実装されている ossfs を使用してマウントされます。 OSS ボリュームを使用する場合、書き込みパフォーマンスは制限されます。書き込みパフォーマンスの高いシナリオでは、他のボリュームを使用することをお勧めします。 詳細については、「OSS ボリューム」をご参照ください。 |
Alibaba Cloud ストレージサービスごとに、ボリュームの使用量に異なる制限があります。詳細については、以下のセクションをご参照ください。
制限
ACK クラスターで CSI プラグインを使用する場合は、CSI プラグインと Alibaba Cloud ストレージサービスの制限に注意してください。
クラスターバージョンの制限
ACK クラスターで CSI プラグインを使用する場合は、ACK クラスターで Kubernetes 1.14 以降が実行されており、kubelet の --enable-controller-attach-detach
パラメーターが true
に設定されていることを確認してください。 ACK クラスターの更新方法の詳細については、「ACK クラスターを手動で更新する」をご参照ください。
CSI プラグインの制限
Alibaba Cloud CSI は Kubernetes コミュニティでオープンソースであり、ACK クラスターをサポートしています。 CSI は、クラスター構成、権限管理、ネットワークの違いなどの理由により、Alibaba Cloud 環境にデプロイされていないクラスターや Alibaba Cloud のセルフマネージドクラスターなどの非 ACK クラスターをシームレスにサポートしていません。クラスターが非 ACK クラスターの場合は、ソースコードを読み取り、CSI の構成を変更して、CSI がクラスターをサポートできるようにすることができます。詳細については、alibaba-cloud-csi-driver をご参照ください。
ボリュームの制限
ボリュームタイプ | 制限 |
ディスクボリューム |
|
NAS ボリューム |
|
OSS ボリューム |
|
コンテナーストレージ機能
次の表に、さまざまな ACK クラスターでサポートされているストレージ機能を示します。
ストレージタイプ | 機能 | ACK マネージドクラスターと ACK 専用クラスター | ACK Serverless クラスター | サンドボックスコンテナーをサポートする ACK クラスター |
EBS | ディスクのマウントとアンマウント | |||
オンラインサイズ変更 | ||||
スナップショット | ||||
コンテナー I/O 監視 | ||||
ファイルシステム | XFS と ext4 がサポートされています。 | XFS と ext4 がサポートされています。 | XFS と ext4 がサポートされています。 | |
ブロックデバイスとベアメタルデバイス | ||||
スナップショットからのデータ復元 | ||||
ディスクキュー設定 | ||||
カスタマー マネージド キー (CMK) ベースの暗号化と Bring Your Own Key (BYOK) ベースの暗号化 | ||||
複数ゾーン対応 | ||||
カスタムラベル | ||||
クロスホスト移行 | ||||
NAS | NAS ファイルシステムの作成、マウント、およびアンマウント | |||
Samba ファイルシステムのマウントとアンマウント | ||||
ゴミ箱 (CNFS) | ||||
動的にプロビジョニングされたボリュームのサブディレクトリまたは共有ディレクトリ (CNFS) | ||||
CMK ベースの暗号化 (CNFS および超高速型 NAS ファイルシステム) | ||||
クォータ制限 (CNFS) |
| |||
容量と I/O の監視 (CNFS) | ||||
オンラインサイズ変更 (CNFS) | ||||
OSS | OSS バケットのマウントとアンマウント | |||
BYOK ベースの暗号化 | ||||
ローカルストレージ | Linux Volume Manager (LVM) 管理ブロックストレージ | |||
自動ボリュームグループ | ||||
LVM 管理容量対応スケジューリング | ||||
直接アクセス可能な永続メモリ (PMem) | ||||
LVM 管理 PMem |
CNFS
コンテナー ネットワーク ファイル システム (CNFS) を使用して、ACK Pro マネージドクラスター内のコンテナー ストレージ リソースを管理できます。CNFS は、NAS および OSS ボリュームのパフォーマンスを向上させ、サービス品質 (QoS) を適用できます。CNFS を使用すると、ACK は Kubernetes CustomResourcecDefinitions (CRD) を使用して、Alibaba Cloud の個々のファイルストレージの作成、削除、記述、マウント、監視、およびスケーリングを実行できます。CNFS は、ゴミ箱、リソース クォータ、ボリュームの I/O パフォーマンス監視などの機能も提供します。CNFS の詳細については、「CNFS」、「NAS ファイルシステムのライフサイクルを管理する」、および「OSS バケットのライフサイクルを管理する」をご参照ください。
CSI コンポーネント
CSI プラグインには、ボリュームを自動的に作成、マウント、およびアンマウントするために使用される csi-plugin および csi-provisioner コンポーネントが含まれています。デフォルトでは、CSI コンポーネントは ACK マネージドクラスターおよび ACK 専用クラスターにデプロイされます。 CSI コンポーネントとコンポーネントの更新方法の詳細については、「CSI プラグインの管理」をご参照ください。
RBAC 権限
PV はクラスターレベルのリソースですが、PVC は名前空間レベルのリソースです。 管理者や O&M エンジニアなど、ACK によって提供されるデフォルトのロールがアクセスコントロール要件を満たしていない場合は、カスタム RBAC ルールを構成できます。たとえば、O&M エンジニアロールは、承認された名前空間内の PVC に対する読み取りおよび書き込み権限と、クラスター全体の PV に対する読み取り専用アクセスを付与します。ただし、このロールは、新しい PV の作成などの操作を制限します。このような場合は、RBAC ルールをカスタマイズできます。
詳細については、「RBAC を使用してクラスター内のリソースに対する操作権限を管理する」をご参照ください。
よくある質問
クラスターで使用されているストレージプラグインを確認するにはどうすればよいですか?
クラスターで使用されているストレージプラグインを確認するには、ACK コンソールでノードアノテーションを確認するか、kubectl で kubelet パラメーターを確認します。
ACK コンソールでノードアノテーションを確認する
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、変更するクラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
ノードページで、管理するノードを見つけ、[操作] 列の [詳細] をクリックし、[詳細] を選択します。
[概要] タブで、ノードのアノテーションを確認します。
volumes.kubernetes.io/controller-managed-attach-detach: true
アノテーションが存在する場合、クラスターは CSI プラグインを使用しています。それ以外の場合、クラスターは FlexVolume プラグインを使用しています。
kubectl で kubelet パラメーターを確認する
次のコマンドを実行して、kubelet パラメーターを確認します。
ps -ef | grep kubelet
予期される出力:
--enable-controller-attach-detach=true
--enable-controller-attach-detach
パラメーターの値がtrue
の場合、クラスターは CSI プラグインを使用しています。--enable-controller-attach-detach
パラメーターの値がfalse
の場合、クラスターは FlexVolume プラグインを使用しています。
CSI プラグインに手動で権限を付与するにはどうすればよいですか?
CSI プラグインを使用してボリュームをマウント、アンマウント、作成、および削除するには、プラグインに他のクラウドリソースにアクセスするための権限を付与する必要があります。ほとんどの場合、CSI プラグインはデフォルトでクラスターにインストールされ、関連する権限が付与されます。クラスター内の CSI プラグインに手動で権限を付与する場合は、AccessKey ペアまたは Resource Access Management (RAM) ロールを使用できます。デフォルトでは、システムは RAM ロールを使用して CSI プラグインに権限を付与します。
AccessKey ペアを使用する
CSI デプロイメントテンプレートで AccessKey ペアを指定します。
AccessKey ペアを環境変数として渡す Secret を作成します。
RAM ロールを使用する: CSI プラグインは、AliyunCSManagedCsiRole ロールを使用して、他の Alibaba Cloud サービスのリソースにアクセスします。詳細については、「ACK ロール」をご参照ください。 RAM ロールに権限を付与する方法の詳細については、「RAM ロールに権限を付与する」をご参照ください。
ACK マネージドクラスター: CSI プラグインで使用される RAM ロールのトークンは、addon.csi.token という名前の Secret に格納されます。 RAM ロールを使用して CSI プラグインに権限を付与し、プラグインが API 操作を呼び出せるようにするには、Secret をプラグインにマウントするだけで済みます。
ACK 専用クラスター: CSI プラグインは、ポッドが存在する Elastic Compute Node (ECS) ノードに割り当てられた RAM ロールを使用します。