生产环境测试

在生产环境中测试您的微服务!

测试单个微服务

  1. 从测试 Pod 向您的某个服务发出 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 检查 Pod 的状态。

  1. 终止一个 Pod 中的 details 服务。

    $ kubectl exec $(kubectl get pods -l app=details -o jsonpath='{.items[0].metadata.name}') -- pkill ruby
    
  2. 检查 Pod 状态

    $ 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
    

    请注意,第一个 Pod 重启了一次。

  3. 终止所有 Pod 中的 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. 检查 Pod 状态

    $ 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
    

    第一个 Pod 重启了两次,另外两个 details Pod 重启了一次。您可能会遇到 ErrorCrashLoopBackOff 状态,直到 Pod 达到 Running 状态。

  6. 在终端中使用 Ctrl-C 停止正在运行的无限循环以模拟流量。

在这两种情况下,应用程序都没有崩溃。details 微服务中的崩溃没有导致其他微服务失败。此行为意味着在这种情况下您没有发生级联故障。相反,您发生了逐步服务降级:尽管一个微服务崩溃了,但应用程序仍然可以提供有用的功能。它显示了评论和有关书籍的基本信息。

您已准备好 添加新版本的评论应用程序

此信息是否有用?
您是否有任何改进建议?

感谢您的反馈!