Iter8로 애플리케이션 코드 및 대기 시간 유효성 검증

Iter8 는 Kubernetes 애플리케이션에 대한 서비스 수준 목표(SLO) 검증, A/B 테스트 및 점진적 업데이트를 지원하는 릴리스 엔지니어링 도구( Kubernetes )입니다. 이제, 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은 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(Service Level Objective) 유효성 검증

Code Engine 애플리케이션이 사용자 애플리케이션에서 판별한 대기 시간 및 오류 기반 SLO(Service Level Objective)를 충족하는지 확인하십시오. 다음 명령은 Code Engine 애플리케이션의 요청을 생성하고, 대기 시간 및 오류 프로파일을 구성하며, 애플리케이션이 지정된 SLO를 충족하는지 확인합니다.

<URL-OF-YOUR-APPLICATION>1단계에서 얻은 URL로 바꾸십시오. 또한 애플리케이션을 평가하는 데 사용되는 세 개의 메트릭에 대한 사용자 정의 한계를 설정할 수도 있습니다.다음 예에서는 애플리케이션의 평균 대기 시간이 200.0밀리초 미만이고 오류 비율이 1% 미만이며(0.0으로 만들 수 있음), 95번째 백분위수 테일 대기 시간이 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 오픈 소스 프로젝트 페이지를 참조하세요.