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 オープンソースプロジェクトページをご覧ください。