IBM Cloud Docs
验证应用程序代码和延迟 Iter8

验证应用程序代码和延迟 Iter8

Iter8 是 Kubernetes 的发布工程工具,可对 Kubernetes 应用程序进行服务级目标 (SLO) 验证、A/B 测试和逐步更新。 现在,您可以使用 Iter8 验证您的 IBM Cloud® Code Engine 应用程序是否以较低的延迟运行且无差错。 在 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 在网页中打开。 保存 URL.

运行 Iter8 Docker 容器

Iter8 作为 容器提供,其中包含运行 所需的所有依赖项。Docker Iter8 以下命令将启动 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。

步骤 1 中得到的 URL 替换 <URL-OF-YOUR-APPLICATION>。 您还可以为用于评估应用程序的三个指标设置自定义限制。在下面的示例中,您要验证应用程序的平均延迟低于 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 开放源代码项目页面