本番環境でのテスト

本番環境でマイクロサービスをテストしましょう!

個々のマイクロサービスのテスト

  1. テストポッドからサービスのいずれかにHTTPリクエストを発行します。

    $ kubectl exec $(kubectl get pod -l app=curl -o jsonpath='{.items[0].metadata.name}') -- curl -sS http://ratings:9080/ratings/7
    

カオステスト

本番環境でカオステストを行い、アプリケーションの反応を確認します。各カオス操作の後、アプリケーションのウェブページにアクセスして、何か変更があったかどうかを確認します。kubectl get podsを使用してポッドの状態を確認します。

  1. 1つのポッドでdetailsサービスを終了します。

    $ kubectl exec $(kubectl get pods -l app=details -o jsonpath='{.items[0].metadata.name}') -- pkill ruby
    
  2. ポッドの状態を確認します。

    $ kubectl get pods
    NAME                            READY   STATUS    RESTARTS   AGE
    details-v1-6d86fd9949-fr59p     1/1     Running   1          47m
    details-v1-6d86fd9949-mksv7     1/1     Running   0          47m
    details-v1-6d86fd9949-q8rrf     1/1     Running   0          48m
    productpage-v1-c9965499-hwhcn   1/1     Running   0          47m
    productpage-v1-c9965499-nccwq   1/1     Running   0          47m
    productpage-v1-c9965499-tjdjx   1/1     Running   0          48m
    ratings-v1-7bf577cb77-cbdsg     1/1     Running   0          47m
    ratings-v1-7bf577cb77-cz6jm     1/1     Running   0          47m
    ratings-v1-7bf577cb77-pq9kg     1/1     Running   0          48m
    reviews-v1-77c65dc5c6-5wt8g     1/1     Running   0          47m
    reviews-v1-77c65dc5c6-kjvxs     1/1     Running   0          48m
    reviews-v1-77c65dc5c6-r55tl     1/1     Running   0          47m
    curl-88ddbcfdd-l9zq4            1/1     Running   0          47m
    

    最初のポッドは1回再起動されました。

  3. すべてのポッドでdetailsサービスを終了します。

    $ for pod in $(kubectl get pods -l app=details -o jsonpath='{.items[*].metadata.name}'); do echo terminating "$pod"; kubectl exec "$pod" -- pkill ruby; done
    
  4. アプリケーションのウェブページを確認します。

    Bookinfo Web Application, details unavailable
    Bookinfo Webアプリケーション、詳細情報が利用できません。

    詳細セクションには、書籍の詳細情報ではなくエラーメッセージが表示されます。

  5. ポッドの状態を確認します。

    $ kubectl get pods
    NAME                            READY   STATUS    RESTARTS   AGE
    details-v1-6d86fd9949-fr59p     1/1     Running   2          48m
    details-v1-6d86fd9949-mksv7     1/1     Running   1          48m
    details-v1-6d86fd9949-q8rrf     1/1     Running   1          49m
    productpage-v1-c9965499-hwhcn   1/1     Running   0          48m
    productpage-v1-c9965499-nccwq   1/1     Running   0          48m
    productpage-v1-c9965499-tjdjx   1/1     Running   0          48m
    ratings-v1-7bf577cb77-cbdsg     1/1     Running   0          48m
    ratings-v1-7bf577cb77-cz6jm     1/1     Running   0          48m
    ratings-v1-7bf577cb77-pq9kg     1/1     Running   0          49m
    reviews-v1-77c65dc5c6-5wt8g     1/1     Running   0          48m
    reviews-v1-77c65dc5c6-kjvxs     1/1     Running   0          49m
    reviews-v1-77c65dc5c6-r55tl     1/1     Running   0          48m
    curl-88ddbcfdd-l9zq4            1/1     Running   0          48m
    

    最初のポッドは2回、他の2つのdetailsポッドは1回再起動されました。ポッドがRunning状態になるまで、ErrorCrashLoopBackOffの状態が発生する可能性があります。

  6. トラフィックをシミュレートするために実行されている無限ループを停止するには、ターミナルでCtrl-Cを使用します。

いずれの場合も、アプリケーションはクラッシュしませんでした。details マイクロサービスのクラッシュは、他のマイクロサービスの障害を引き起こしませんでした。この動作は、この状況でカスケード障害が発生しなかったことを意味します。代わりに、段階的なサービス劣化が発生しました。1つのマイクロサービスがクラッシュしたにもかかわらず、アプリケーションは依然として有用な機能を提供することができました。書籍のレビューと基本情報が表示されました。

レビューアプリケーションの新しいバージョンの追加の準備ができました。

この情報は役に立ちましたか?
改善のための提案はありますか?

ご意見ありがとうございます!