IBM Cloud Docs
Iter8 によるアプリケーション・コードおよび待ち時間の検証

Iter8 によるアプリケーション・コードおよび待ち時間の検証

Iter8 は、 Kubernetes のリリースエンジニアリングツールで、 Kubernetes アプリケーションのサービスレベル目標(SLO)の検証、A/B テスト、プログレッシブアップデートを可能にします。 この度、IBM Cloud® Code Engine アプリケーションが低遅延かつエラー・フリーで実行されることを検証するために Iter8 を使用できるようになりました。 5 分間で Iter8 について詳しく理解しましょう。

開始前に

  • セットアップ Docker をローカル・システムにセットアップする。
  • Code Engine アプリケーションを作成します。 作成方法がわからない場合は、 アプリケーションのデプロイのチュートリアルを試してください。

Code Engine アプリケーションの URL の確認

CLI を使用してアプリケーションの URL を調べるには、ibmcloud ce application get コマンドを -output url オプションを指定して実行します。 例えば、myapp というアプリケーションの URL を調べるには次のようにします。

ibmcloud ce application get -n myapp -output url

出力例

https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud

Code Engine コンソールを使用してアプリケーションの URL を調べるには、アプリケーションの概要ページに移動します。 Ready状態のアプリケーションは、**「アプリケーション URL を開く」**をクリックして Web ページで開くことができます。 その URL を保存してください。

Iter8 Docker コンテナーの実行

Iter8 は、Iter8を実行するために必要なすべての依存関係を含む Docker コンテナーとして提供されます。 その Docker コンテナーを次のコマンドで起動します。

docker run --name ind --privileged -d iter8/ind:0.7.4

Iter8 Docker コンテナーの初期化

この Docker コンテナーを初期化するときには、次のコマンドを使用することで、Docker コンテナー内部でローカルの Kubernetes クラスターを起動し、コンテナー内部に Iter8 をインストールします。

docker exec ind ./iter8.sh

All systems go...という出力が表示されることを確認します。

サービス・レベル目標 (SLO) の検証

対象の Code Engine アプリケーションが、そのアプリケーションについて決定した待ち時間とエラー・ベースのサービス・レベル目標 (SLO) を満たしていることを検証します。 次のコマンドを使用すると、Code Engine アプリケーションに対する要求を生成し、アプリケーションの待ち時間とエラー・プロファイルを構成し、指定した SLO をアプリケーションが満たしていることを検証できます。

<URL-OF-YOUR-APPLICATION> を、ステップ 1で取得した URL に置き換えます。 アプリケーションの評価に使用される 3 つのメトリックに対してカスタム制限を設定することもできます。以下の例では、アプリケーションの平均待ち時間が 200.0 ミリ秒未満であること、エラー率が 1% 未満であること (この 0.0 を設定できます)、および 95thパーセンタイルのテール待ち時間が 500.0 ミリ秒未満であることを確認します。

docker exec ind helm install \
--set URL=<URL-OF-YOUR-APPLICATION> \
--set LimitMeanLatency=200.0 \
--set LimitErrorRate=0.01 \
--set Limit95thPercentileLatency=500.0 \
codeengine /iter8/helm/conformance

出力例

NAME: codeengine
LAST DEPLOYED: Wed Jun 30 01:10:14 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None

SLO 検証結果の取得

次のコマンドにより、Code Engine アプリケーションの SLO 検証の結果が出力されます。

docker exec ind \
bash -c "kubectl get experiment my-experiment -o yaml | iter8ctl describe -f -"

出力例

以下の例のような出力が表示されない場合は、もう少し長く待ってから前のコマンドをもう一度試してください。 目標のセクションに、指定した SLO をアプリケーションが満たしているかどうかが報告されます。 メトリックのセクションには、アプリケーションについて Iter8 で観測されたメトリックが報告されます。

****** Overview ******
Experiment name: my-experiment
Experiment namespace: default
Target: my-app
Testing pattern: Conformance
Deployment pattern: Progressive

****** Progress Summary ******
Experiment stage: Completed
Number of completed iterations: 1

****** Winner Assessment ******
> If the version being validated; i.e., the baseline version, satisfies the experiment objectives, it is the winner.
> Otherwise, there is no winner.
Winning version: my-app

****** Objective Assessment ******
> Identifies whether or not the experiment objectives are satisfied by the most recently observed metrics values for each version.
+--------------------------------------+--------+
|              OBJECTIVE               | MY-APP |
+--------------------------------------+--------+
| iter8-system/mean-latency <=         | true   |
|                              200.000 |        |
+--------------------------------------+--------+
| iter8-system/error-rate <=           | true   |
|                                0.010 |        |
+--------------------------------------+--------+
| iter8-system/latency-95th-percentile | true   |
| <= 500.000                           |        |
+--------------------------------------+--------+

****** Metrics Assessment ******
> Most recently read values of experiment metrics for each version.
+--------------------------------------+--------+
|                METRIC                | MY-APP |
+--------------------------------------+--------+
| iter8-system/request-count           | 40.000 |
+--------------------------------------+--------+
| iter8-system/error-count             |  0.000 |
+--------------------------------------+--------+
| iter8-system/mean-latency            | 66.060 |
+--------------------------------------+--------+
| iter8-system/error-rate              |  0.000 |
+--------------------------------------+--------+
| iter8-system/latency-95th-percentile | 73.055 |
+--------------------------------------+--------+

リビジョンのロールバック

指定した試験目標を最新のリビジョンが満たしていなければ、通常は、その最新のリビジョンを削除し、前の安定したリビジョンに Code Engine を自動でロールバックさせることが必要になります。

CLI を使用して最新のリビジョンを削除するには、ibmcloud ce revision delete コマンドを実行します。

コンソールから最新のリビジョンを削除するには、Code Engine コンソールに移動します。 プロジェクト-> 自分のプロジェクト-> アプリケーション -> 自分のアプリケーション-> リビジョンとトラフィックを選択します。 失敗したリビジョンを削除します。Code Engineは、前の安定したリビジョンに自動的にロールバックします。

Iter8 コンテナーの削除

不要になったら Iter8-in-Docker コンテナーとイメージを削除してローカル・システムをクリーンアップすることができます。

docker rm -f -v ind

Iter8 の次のステップ

このチュートリアルは Iter8 オープンソース・プロジェクトを基にしています。 詳しくは、 Iter8 オープンソースプロジェクトページをご覧ください。