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 のすべてのサブネットがファイルシステムに接続できるようにします。

Figure 1 – ROSA Integration with Amazon FSx for NetApp ONTAP

 図 1 : ROSA と Amazon FSx for NetApp ONTAP の連携

前提条件

以下のリソースが必要になります。

ウォークスルー

  1. GitHub リポジトリをクローンする
  2. CloudFormation を使用して FSx for ONTAP ファイルシステムをプロビジョニングする
  3. ROSA クラスタ用の Trident CSI ドライバをインストールして設定する
  4. ROSA クラスタにサンプルの MySQL ステートフルアプリケーションをデプロイする
  5. MySQL アプリケーションの Pod をマルチアベイラビリティーゾーン間でスケールする
  6. 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 テンプレートで StorageCapacityThroughputCapacity パラメータを設定して、デフォルト値を上書きしてください。

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)が作成されていることを確認します。

Figure 2 – Creating storage virtual machine in the Amazon FSx Console

図 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

Figure 3 – Trident installation status

図 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 コンソールから取得することができます。

Figure 4 – Creating secret file in AWS Secrets Manager Console

図 4 : AWS Secrets Manager コンソールで作成したシークレットファイルを確認

以下のコマンドで、ROSA クラスタにシークレットを追加します。

oc apply -f svm_secret.yaml

ROSA クラスタにシークレットが追加されたことを確認するには、以下のコマンドを実行します。

oc get secrets -n trident |grep backend-fsx-ontap-nas

以下の出力が表示されます。

Section 3.1 - Create secret to store the SVM username and password in ROSA cluster

3.2 Trident CSI バックエンドを FSx for ONTAP に設定する

Trident バックエンド 設定は、Trident がストレージシステム(この場合は FSx for ONTAP)と、どのように通信するかを指示します。ここでは、ontap-nas ドライバを使用してストレージボリュームをプロビジョニングします。

まず、クローンした Git リポジトリの fsx ディレクトリに移動してください。backend-ontap-nas.yaml ファイルを開きます。以下のスクリーンショットに示すように、そのファイル内の managementLIFdataLIF を、Amazon FSx ストレージ仮想マシンの管理 DNS 名NFS DNS 名に置き換え、svm を SVM の名前に置き換えます。

:ManagementLIF と DataLIF は、以下に示すように、Amazon FSx コンソールの “ストレージ仮想マシン” から確認することができます。

Figure 5 – Management LIF from SVM details page

図 5 : SVM 詳細ページの管理 LIF

次に、端末で以下のコマンドを実行して、ROSA クラスタに Trident バックエンドを構成します。

cd fsx 
oc apply -f backend-ontap-nas.yaml

バックエンド構成を確認します。

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

Section 3.3 Create storage class in ROSA cluster

これで、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 名前空間を作成します。

cd mysql 
oc create namespace mysql 
oc apply -f mysql-secrets.yaml

シークレットが作成されたことを確認してください。

oc get secrets -n mysql

Section 4 - Deploy sample MySQL stateful application-screenshot1

次に、MySQL StatefulSet アプリケーションを ROSA クラスタにデプロイします。mysql/mysql-statefulset.yaml を開き、詳細(メタデータ、レプリカ、ストレージクラス名)を確認してください。そして、以下のコマンドを実行します。

oc apply -f mysql-statefulset.yaml

アプリケーションのデプロイを確認します。

oc get pods -n mysql

Section 4 - Deploy sample MySQL stateful application-screenshot2

MySQL アプリケーションによって PVC が作成されていることを確認します。

oc get pvc -n mysql

Section 4 - Deploy sample MySQL stateful application-screenshot3

4.1 StatefulSet アプリケーション用のサービスを作成する

kubernetes サービスは、Pod の論理セットと Pod にアクセスするためのポリシーを定義します。StatefulSet は現在、Pod のドメインを制御し、安定した DNS エントリを使用して各 Pod に直接到達するためのヘッドレスサービスを必要としています clusterIP に “None” を指定することで、ヘッドレスサービスを作成することができます。

oc apply -f mysql-service.yaml

サービスを確認します。

oc get svc -n mysql

Section 4.1 Create a service for the StatefulSet application

4.2 MySQL 用の MySQL クライアントを作成する

MySQL クライアントは、先ほどデプロイした MySQL アプリケーションにアクセスするためのものです。mysql-client.yaml の内容を確認します。以下のコマンドを使用して MySQL クライアントをデプロイします。

oc apply -f mysql-client.yaml

Pod の状態を確認します。

oc get pods

Section 4.2 Create MySQL client for MySQL

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 – DNS Endpoint of the FSx for ONTAP – SVM page

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 のコンテナコンソールに戻ってください。

MySQL [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+ |
| erp                |
+--------------------+
MySQL [(none)]> select * from erp.Persons;
+------+-----------+----------+
| ID   | FirstName | Lastname |
+------+-----------+----------+
| 1234 | John      | Doe      |
+------+-----------+----------+

このウォークスルーより、スナップショットを使用してステートフルアプリケーションをほぼ瞬時にリストアすることがいかに迅速かつ簡単であるかを確認できました。

まとめ

この Blog では、NetApp Trident CSI ドライバを使用して、 ROSA クラスタの共有ファイルシステムとして FSx for ONTAP を統合する方法を説明しました。また、 FSx for ONTAP ファイルシステムを使用してマルチ AZ にステートフルアプリケーションをデプロイする方法についても説明しました。さらに、NetApp の豊富なスナップショット機能を使用して、ステートフルアプリケーションをすばやく簡単に保護およびリストアする方法も説明しました。FSx for ONTAP のすべての機能と、ミリ秒未満のレイテンシ、マルチ AZ の可用性を組み合わせた FSx for ONTAP は、AWS 上の ROSA で実行されているコンテナ化されたアプリケーションに最適なストレージオプションです。このソリューションの詳細については、NetApp Trident のドキュメントを参照してください。

翻訳はプロフェッショナルサービス本部の葉山が担当しました。

Vani Eswarappa

Vani Eswarappa

Vani Eswarappa は、AWS のプリンシパルアーキテクトで、コンテナ、AI/ML、エンタープライズアーキテクチャの経験があります。技術リーダーとして、Vani は AWS のお客様やパートナー様と一緒に、ビジネスニーズを満たすためのクラウドジャーニーに取り組んでいます。余暇には、家族と一緒にアウトドアや新しい場所を探索することを楽しんでいます。

Haofei Feng

Haofei Feng

Haofei は AWS のシニアクラウドアーキテクトで、コンテナ、DevOps、IT インフラの分野で 16 年以上の経験を積んでいます。お客様のクラウドジャーニーを支援することに喜びを感じています。また、AWS 上でスケーラブルで安全かつ最適化されたコンテナワークロードを設計、構築するお客様を支援することに熱心です。余暇は家族と愛犬のボーダーコリーと過ごしています。Haofei は、オーストラリアのシドニーに拠点を置いています。