Amazon Web Services ブログ
Red Hat OpenShift Service on AWS の共有ストレージによるコンテナワークロードのスケーリング
このブログは 2023 年 1 月 20 日に Vani Eswarappa(Principal Architect)と Haofei Feng (Senior Cloud Architect)によって執筆された内容を日本語化したものです。原文はこちらを参照してください。
Kubernetes は、アプリケーションのデプロイで多くの開発者の間で人気があり、これらのデプロイの多くは、永続的な共有ストレージ レイヤーから恩恵を受けることができます。Red Hat OpenShift Service on AWS(ROSA)は、Red Hat が開発し、AWS と Red Hat が共同でサポートする AWS 上のマネージドな OpenShift 統合です。ROSA クラスタは通常、ローカルに接続された Amazon Elastic Block Store(Amazon EBS)ボリュームにデータを保存します。ただし、一部のお客様は、基盤となるデータを永続化し、複数のアベイラビリティーゾーン(AZ) にデプロイされたコンテナを含む複数のコンテナ間で共有することを必要としています。このようなお客様は、自動的にスケーリングし、オンプレミス環境とクラウド環境全体でワークロードを実行するための一貫したインターフェイスを提供するストレージソリューションを求めています。
ROSA は、NetApp の ONTAP ファイルシステム上に構築されたスケーラブルでフルマネージドの共有ストレージサービスである Amazon FSx for NetApp ONTAP(FSx for ONTAP)との統合を提供しています。FSx for ONTAP では、スナップショットや、FlexClone、 SnapMirror によるクロスリージョンレプリケーション、シームレスなフェイルオーバーによる高可用性ファイルサーバなど、人気のある ONTAP の機能を利用することができます。FSx for ONTAP は、ストレージディスク上の Kubernetes Persistent Volume Claims(PVC )を処理するための動的な Container Storage Interface(CSI)である NetApp Trident ドライバと統合されています。Trident CSI ドライバは、さまざまなデプロイ環境にわたるストレージボリュームのオンデマンドプロビジョニングを管理し、アプリケーションのデータ保護とスケーリングを容易にします。
この Blog では、 FSx for ONTAP を ROSA アプリケーションの永続ストレージレイヤとして使用する方法について説明します。ROSA クラスタへの NetApp Trident CSI ドライバのインストールと、 FSx for ONTAP ファイルシステムのプロビジョニング、サンプルのステートフルアプリケーションのデプロイ、動的永続ボリュームを使用したマルチ AZ ノード間での Pod のスケーリングデモをステップバイステップで説明していきます。最後に、アプリケーションのバックアップとリストアについて説明します。このソリューションを使用すると、AZ 全体でスケーリングし、Trident CSI ドライバを使用してデータのスケーリングと保護、リストアを容易にする共有ストレージソリューションをセットアップできます。
ソリューション概要
この図は、複数の AZ にデプロイされた ROSA クラスタを示しています。ROSA クラスタのマスターノード、インフラストラクチャノード、ワーカーノードは、お客様の VPC のプライベートサブネットで稼働しています。同じ VPC 内に FSx for ONTAP ファイルシステムを作成し、ROSA クラスタに Trident ドライバをインストールして、この VPC のすべてのサブネットがファイルシステムに接続できるようにします。
図 1 : ROSA と Amazon FSx for NetApp ONTAP の連携
前提条件
以下のリソースが必要になります。
- AWS アカウント
- Red Hat アカウント
- ROSA クラスタの作成とアクセスに適切な権限を持つ IAM ユーザ(詳細については ROSA ワークショップ を参照)
- OS に応じた AWS CLI をインストール
- OS に応じた ROSA CLI をインストール
- OpenShift コマンドラインインターフェイス(
oc
) - Helm 3 ドキュメント
- 作成された ROSA クラスタ(ROSA ワークショップを参照)
- Red Hat OpenShift Web コンソールへのアクセス
ウォークスルー
- GitHub リポジトリをクローンする
- CloudFormation を使用して FSx for ONTAP ファイルシステムをプロビジョニングする
- ROSA クラスタ用の Trident CSI ドライバをインストールして設定する
- ROSA クラスタにサンプルの MySQL ステートフルアプリケーションをデプロイする
- MySQL アプリケーションの Pod をマルチアベイラビリティーゾーン間でスケールする
- FSx for ONTAP ファイルシステムのボリュームをバックアップおよびリストアする
1. GitHub リポジトリをクローンする
github リポジトリ(https://github.com/aws-samples/rosa-fsx-netapp-ontap)のクローンを作成するには Git が必要になります。
Git をインストールしていない場合は、次のコマンドを使用して Git をインストールしてください。
sudo yum install git -y
Git リポジトリをクローンします。
git clone https://github.com/aws-samples/rosa-fsx-netapp-ontap.git
2. FSx for ONTAP をプロビジョニングする
ROSA クラスタと同じ VPC に、マルチ AZ 構成の FSx for ONTAP ファイルシステムを 作成します。
VPC ID と、ファイルシステムを配置するサブネットに対応する 2 つのサブネット ID、 ROSA VPC サブネットに関連付けられているすべてのルートテーブル ID をメモし、それらの値を以下のコマンドに入力してください。
FSxAllowedCIDR
は、アクセス制御のために FSx for ONTAP セキュリティグループのインバウンドルールに設定する、許可の CIDR レンジです。0.0.0.0/0
や適切な CIDR を使用して、FSx for ONTAP の特定ポートにアクセスするすべてのトラフィックを許可することができます。端末でコマンドを実行し、FSx for ONTAP ファイルシステムを作成します。
注:異なるストレージ容量とスループットでファイルシステムをプロビジョニングしたい場合は、Cfn テンプレートで StorageCapacity
と ThroughputCapacity
パラメータを設定して、デフォルト値を上書きしてください。
cd rosa-fsx-netapp-ontap\fsx aws cloudformation create-stack \ --stack-name ROSA-FSXONTAP \ --template-body file://./FSxONTAP.yaml \ --region <region-name> \ --parameters \ ParameterKey=Subnet1ID,ParameterValue=[subnet1_ID] \ ParameterKey=Subnet2ID,ParameterValue=[subnet2_ID] \ ParameterKey=myVpc,ParameterValue=[VPC_ID] \ ParameterKey=FSxONTAPRouteTable,ParameterValue=[routetable1_ID,routetable2_ID] \ ParameterKey=FileSystemName,ParameterValue=ROSA-myFSxONTAP \ ParameterKey=ThroughputCapacity,ParameterValue=256 \ ParameterKey=FSxAllowedCIDR,ParameterValue=[your_allowed_CIDR] \ ParameterKey=FsxAdminPassword,ParameterValue=[Define password] \ ParameterKey=SvmAdminPassword,ParameterValue=[Define password] \ --capabilities CAPABILITY_NAMED_IAM
Amazon FSx コンソールを使用して、ファイルシステムおよびストレージ仮想マシン(SVM)が作成されていることを確認します。
図 2 : Amazon FSx コンソールでストレージ仮想マシン作成を確認
3. ROSA クラスタ用の Trident CSI ドライバをインストールして設定する
Trident CSI ドライバを Openshift の “trident” 名前空間にインストールします。”trident” 名前空間を作成するには、コンピューターでコマンドラインインターフェイス(CLI)を開き、OpenShift CLI(oc
)ツールを使用して、ROSA クラスタにログインします。
oc create ns trident
次に、Trident CSI ドライバを Git からダウンロードします。次に、内容を展開してください。
curl -L -o trident-installer-22.10.0.tar.gz https://github.com/NetApp/trident/releases/download/v22.10.0/trident-installer-22.10.0.tar.gz
tar -xvf ./trident-installer-21.10.0.tar.gz
以下の helm コマンドを使用して、OpenShift クラスタの “trident” 名前空間に Trident CSI ドライバをインストールします。
cd trident-installer/helm helm install trident -n trident trident-operator-22.10.0.tgz
以下のコマンドを実行して、Trident CSI ドライバがインストールされたことを確認します。
helm status trident -n trident
図 3 : Trident のインストールステータス
3.1 SVM のユーザ名とパスワードを ROSA クラスタに保存するためのシークレットを作成する
SVM ユーザ名と管理者パスワードを使用して新しいファイルを作成し、svm_secret.yaml
として保存してください。サンプルの svm_secret.yaml
ファイルは fsx フォルダに格納されています。
svm_secret.yaml
apiVersion: v1 kind: Secret metadata: name: backend-fsx-ontap-nas-secret namespace: trident type: Opaque stringData: username: vsadmin password: step#2 password
注:SVM ユーザ名と管理者パスワードは、手順 2 で作成しています。以下のように、AWS Secrets Manager コンソールから取得することができます。
図 4 : AWS Secrets Manager コンソールで作成したシークレットファイルを確認
以下のコマンドで、ROSA クラスタにシークレットを追加します。
oc apply -f svm_secret.yaml
ROSA クラスタにシークレットが追加されたことを確認するには、以下のコマンドを実行します。
oc get secrets -n trident |grep backend-fsx-ontap-nas
以下の出力が表示されます。
3.2 Trident CSI バックエンドを FSx for ONTAP に設定する
Trident バックエンド 設定は、Trident がストレージシステム(この場合は FSx for ONTAP)と、どのように通信するかを指示します。ここでは、ontap-nas ドライバを使用してストレージボリュームをプロビジョニングします。
まず、クローンした Git リポジトリの fsx ディレクトリに移動してください。backend-ontap-nas.yaml ファイルを開きます。以下のスクリーンショットに示すように、そのファイル内の managementLIF と dataLIF を、Amazon FSx ストレージ仮想マシンの管理 DNS 名と NFS DNS 名に置き換え、svm を SVM の名前に置き換えます。
注:ManagementLIF と DataLIF は、以下に示すように、Amazon FSx コンソールの “ストレージ仮想マシン” から確認することができます。
図 5 : SVM 詳細ページの管理 LIF
次に、端末で以下のコマンドを実行して、ROSA クラスタに Trident バックエンドを構成します。
バックエンド構成を確認します。
oc get tbc -n trident
trident バックエンドの設定が成功したら、上記で作成したバックエンドを使用するストレージクラスを作成します。これは、Kubernetes クラスタで使用できる様々なストレージタイプから要求できるストレージタイプを記述し、分類したリソースオブジェクトです。fsx フォルダ内の storage-class-csi-nas.yaml ファイルを確認してください。
3.3 ROSA クラスタでストレージクラスを作成する
それでは、ストレージクラスを作成しましょう。
oc apply -f storage-class-csi-nas.yaml
trident-csi ストレージクラスの作成状況を確認します。
oc get sc
これで、Trident CSI ドライバのインストールと FSx for ONTAP ファイルシステムへの接続は完了しました。次に、FSx for ONTAP のファイルボリュームを使用して、サンプルの MySQL ステートフルアプリケーションを ROSA にデプロイします。
注:アプリケーションが Trident オペレータを使用して PV を作成できることを確認したい場合は、fsx フォルダにある pvc-trident.yaml ファイルを使用して PVC を作成します。
4. サンプルの MySQL ステートフルアプリケーションをデプロイする
このセクションでは、Kubernetes StatefulSet を使用して高可用性 MySQL アプリケーションを ROSA クラスタにデプロイし、Trident で PersistentVolume をプロビジョニングします。Kubernetes StatefulSet は、データの整合性と一貫性を保持するために元の PersistentVolume(PV)が再スケジュールされた際に同じ Pod ID にマウントされるようにします。MySQL アプリケーションのレプリケーション設定の詳細については、MySQL の公式ドキュメントを参照してください。
MySQL アプリケーションのデプロイを開始する前に、ユーザー名やパスワードなどのアプリケーションの機密情報をシークレット
に保存しておきます。ここでは、簡単なシークレットを作成します。
クローンした Git リポジトリの mysql フォルダーを開き、mysql-secrets.yaml ファイルを確認し、以下のコマンドを実行してシークレットを作成してください。
mysql 名前空間を作成します。
次に、MySQL StatefulSet アプリケーションを ROSA クラスタにデプロイします。mysql/mysql-statefulset.yaml
を開き、詳細(メタデータ、レプリカ、ストレージクラス名)を確認してください。そして、以下のコマンドを実行します。
oc apply -f mysql-statefulset.yaml
アプリケーションのデプロイを確認します。
oc get pods -n mysql
MySQL アプリケーションによって PVC が作成されていることを確認します。
oc get pvc -n mysql
4.1 StatefulSet アプリケーション用のサービスを作成する
kubernetes サービスは、Pod の論理セットと Pod にアクセスするためのポリシーを定義します。StatefulSet は現在、Pod のドメインを制御し、安定した DNS エントリを使用して各 Pod に直接到達するためのヘッドレスサービスを必要としています clusterIP に “None” を指定することで、ヘッドレスサービスを作成することができます。
oc apply -f mysql-service.yaml
サービスを確認します。
oc get svc -n mysql
4.2 MySQL 用の MySQL クライアントを作成する
MySQL クライアントは、先ほどデプロイした MySQL アプリケーションにアクセスするためのものです。mysql-client.yaml の内容を確認します。以下のコマンドを使用して MySQL クライアントをデプロイします。
oc apply -f mysql-client.yaml
Pod の状態を確認します。
oc get pods
MySQL クライアントの Pod にログインします。
oc exec --stdin --tty mysql-client -- sh
次に、MySQL クライアント ツールをインストールします。
apk add mysql-client
mysql-client の Pod から、MySQL サーバに接続してください。
mysql -u root -p -h mysql-set-0.mysql.mysql.svc.cluster.local
mysql-secrets.yaml に格納されているパスワードを入力します。接続したら、MySQL データベースでデータベースを作成します。
MySQL [(none)]> CREATE DATABASE erp; MySQL [(none)]> CREATE TABLE erp.Persons ( ID int, FirstName varchar(255),Lastname varchar(255)); MySQL [(none)]> INSERT INTO erp.Persons (ID, FirstName, LastName) values (1234 , "John" , "Doe"); MySQL [(none)]> commit; MySQL [(none)]> select * from erp.Persons; +------+-----------+----------+ | ID | FirstName | Lastname | +------+-----------+----------+ | 1234 | John | Doe | +------+-----------+----------+
5. StatefulSet の Pod をスケールする
以下のコマンドを使用して、MySQL StatefulSet アプリケーションを簡単にスケーリングできます。
oc scale statefulsets mysql-set --replicas=4 -n mysql
以下のコマンドを使用して、実行されている Pod の数を確認してください。
oc get pods -n mysql
これは、Statefulset Pod の水平スケーリングを示しています。
6. バックアップとリストア
FSx for ONTAP は、ボリュームのポイントインタイム読み取り専用イメージであるスナップショットをサポートしており、最小限のスペースを消費し、ほぼ瞬時に作成できます。スナップショットを使用して、ボリューム自体に格納されているデータのオンラインバックアップを作成できます。
FSx for ONTAP でデータの永続ボリュームをバックアップおよびリストアするには、「Amazon FSx for NetApp ONTAP および Amazon EKS を使用してコンテナ化されたアプリケーションを効率的に実行する」の Blog を参照してください。FSx for ONTAP スナップショット機能を活用して、ROSA クラスタ上のデータを即座にリストアする方法について説明します。
6.1 バックアップポイント 01 のスナップショット作成
ROSA データをホストしている SVM にログインし、スナップショットを作成します。これを行うには、AWS Secrets Manager から SVM の vsadmin 認証情報を取得します。FSx for ONTAP の IP または DNS エンドポイントは、次に示すように SVM のページから確認ができます。
Figure 6: FSx for ONTAP の DNS エンドポイント – SVM ページ
同じ VPC 内で EC2 インスタンスを起動して SVM にアクセスし、 SVM の管理 IP に SSH 接続して ONTAP CLI にアクセスします。
ssh vsadmin@198.19.XXX.YY Password: Last login time: XXXX SVM1::>
以下のコマンドを実行してボリュームを表示します。
vol show
以下のような出力が表示されます。
Vserver Volume Aggregate State Type Size Available Used% --------- ------------ ------------ ---------- ---- ---------- SVM1 trident_pvc_81731fc1_7e84_4f4f_9525_fb16125aeba0 aggr1 online RW 10GB 10.00GB 0%
次に、以下のコマンドを使用してスナップショットを作成します。
注:ボリューム名は PVC 名と一致させる必要があります。
SVM1::> snap create -volume trident_pvc_81731fc1_7e84_4f4f_9525_fb16125aeba0 -snapshot backup_point_01 SVM1::> snap show -volume trident_pvc_81731fc1_7e84_4f4f_9525_fb16125aeba0 ---Blocks--- Vserver Volume Snapshot Size Total% Used% -------- -------- ------------------------------------- -------- ------ ----- SVM1 trident_pvc_81731fc1_7e84_4f4f_9525_fb16125aeba0 backup_point_01 160KB 0% 49%
6.2 データベース erp を削除する
この手順では、6.1 でスナップショット(バックアップ)が作成された後に、データベース erp を削除します。
新しい端末を使用してコンテナのコンソールにログインします。(注:6.1 とは異なります)
oc exec --stdin --tty mysql-client -n mysql -- sh mysql -u root -p -h mysql-set-0.mysql.mysql.svc.cluster.local
erp データベースを削除します。
MySQL [(none)]> DROP DATABASE erp; Query OK, 1 row affected
6.3 SVM から backup_point_01 スナップショットのリストア
ONTAP CLI に戻り、先ほど作成した backup_point_01
スナップショットで、ボリュームをリストアします。
SVM1::> snap restore -volume trident_pvc_81731fc1_7e84_4f4f_9525_fb16125aeba0 -snapshot backup_point_01
6.4 リストアされたデータベースをすぐに検証する
6.3 でデータベースをリストアした直後に、データベースが期待どおりにリストアされたことを検証します。
6.2 のコンテナコンソールに戻ってください。
このウォークスルーより、スナップショットを使用してステートフルアプリケーションをほぼ瞬時にリストアすることがいかに迅速かつ簡単であるかを確認できました。
まとめ
この Blog では、NetApp Trident CSI ドライバを使用して、 ROSA クラスタの共有ファイルシステムとして FSx for ONTAP を統合する方法を説明しました。また、 FSx for ONTAP ファイルシステムを使用してマルチ AZ にステートフルアプリケーションをデプロイする方法についても説明しました。さらに、NetApp の豊富なスナップショット機能を使用して、ステートフルアプリケーションをすばやく簡単に保護およびリストアする方法も説明しました。FSx for ONTAP のすべての機能と、ミリ秒未満のレイテンシ、マルチ AZ の可用性を組み合わせた FSx for ONTAP は、AWS 上の ROSA で実行されているコンテナ化されたアプリケーションに最適なストレージオプションです。このソリューションの詳細については、NetApp Trident のドキュメントを参照してください。
翻訳はプロフェッショナルサービス本部の葉山が担当しました。