Amazon Web Services ブログ
Amazon EKS クラスターでアドオンを活用し、Amazon EBS スナップショットを永続ストレージに使用する
この記事は Using Amazon EBS snapshots for persistent storage with your Amazon EKS cluster by leveraging add-ons (記事公開日: 2022 年 7 月 28 日) を翻訳したものです。
もともとは、コンテナはステートレスなアプリケーションに最適化されたものでした。しかし、多くのユースケースでは永続ストレージが必要であり、それがなければステートフルなワークロードは実現できません。Kubernetes は当初ステートフルなワークロードのサポートを In-tree ボリュームプラグインとして導入していました。これはつまり、プラグインコードが Kubernetes のコアコードの一部であり、Kubernetes バイナリとともに提供されることを意味します。そのため、各々のストレージプラットフォームに Kubernetes のサポートを追加したいベンダーにとっては、サポートの追加を標準的な Kubernetes のリリースサイクルに合わせる必要があり、難しい問題と考えられていました。
それが、Kubernetes のようなコンテナオーケストレーションの上で任意のブロック・ファイルストレージシステムをコンテナ化したワークロードに公開するための規格である Container Storage Interface (CSI) の開発につながりました。
Amazon Elastic Block Stock (Amazon EBS) は、Amazon EC2 インスタンスから専用のストレージボリュームへのダイレクトアクセスを提供するブロックストレージサービスです。Amazon EBS スナップショットは、Amazon EBS ボリュームなどのブロックストレージデータを保護するために設計された、シンプルでセキュアなデータ保護ソリューションです。
先ほど述べたとおり、Amazon EBS の最初のサポートは In-tree ボリュームプラグインとして開始されました。
CSI の仕様が公開された時に、私たちは Amazon EBS に対応するドライバーの開発を開始しました。2018 年、私たちは Amazon EBS CSI ドライバーを GitHub にリリースしました。最初のリリースから様々なリリースを経て、最新のリリースとその機能はこちらからご覧いただけます。
さらに Amazon EBS CSI ドライバーは、Amazon EKS アドオンで一般に利用できるようになりました。Amazon EKS アドオンは、Kubernetes アプリケーションに運用をサポートする機能を提供するソフトウェアですが、アプリケーションに特化したものではありません。Amazon EKS アドオンと Amazon EBS CSI ドライバーの詳細については、こちらの記事を参照してください。
ソリューション概要
この記事では、Amazon EBS CSI ドライバーの特定の機能に焦点を当てます。それが Kubernetes ボリュームスナップショットです。Kubernetes ボリュームスナップショットを使用すると、特定の時点における Amazon EBS ボリュームのコピーを作成できます。このコピーを使用して、ボリュームを以前の状態に戻したり、新しいボリュームをプロビジョニングしたりすることができます。
Kubernetes バージョン 1.17 以降から、以下のコンポーネントを用いて、Amazon EBS のボリュームスナップショットを作成し Pod にアタッチすることができます。
前提条件
- このチュートリアルを完了させるための前提条件は、Kubernetes バージョン 1.20 またはそれ以降で実行されている Amazon EKS クラスターがあることです。Amazon EKS クラスターを起動する方法についての解説が必要な場合は、Amazon EKS のドキュメントを参照してください。
- Amazon EKS CSI ドライバーのスナップショット機能を使用するには、EKS アドオンをインストールする前に、external-snapshotter をインストールする必要があります。external-snapshotter は以下のコンポーネントを順にインストールする必要があります。
-
VolumeSnapshotClass、VolumeSnapshotおよびVolumeSnapshotContentの CustomResourceDefinition (CRD)- RBAC (
ClusterRole、ClusterRoleBindingなど) - コントローラーの Deployment
Custom Resource Definition (CRD) は、Kubernetes API (Application Programming Interface) の拡張機能で、デフォルトの Kubernetes インストールで利用できるとは限りません。CRD は特定の Kubernetes インストールの拡張を表現しています。しかし、現在では多くの Kubernetes コア機能がカスタムリソースを使用して構築されており、Kubernetes をよりモジュール化することができます。
ボリュームスナップショットコントローラーは、Kubernetes ボリュームスナップショット CRD をウォッチし、CSI エンドポイントに対して、CreateSnapshot/DeleteSnapshot をトリガーします。詳細については、GitHub の CSI Snapshotter を参照してください。
- CSI ドライバーのインストールプロセスには、IAM ポリシーと、ServiceAccount 作成プロセスの一部で使用する IAM ロールの作成が含まれています。AWS は
AmazonEBSCSIDriverPolicyと呼ばれる AWS 管理ポリシーを提供しています。IAM ロール、Service Account を作成し、必要な AWS 管理ポリシーをアタッチする方法の詳細は、こちらを参照してください。 - IAM ロールと ServiceAccount の作成が完了したら、ドキュメントに従って、Amazon EBS CSI ドライバーを EKS アドオンとしてインストールします。
すべてが正しくインストールされたことを確認するために、以下のコマンドを実行してください。






