第三十六章 九析带你轻松完爆 Istio - 网络弹性之重试(retry)

系列文章:


总目录索引:九析带你轻松完爆 istio 服务网格系列教程

目录

1 前言

2 邀约

3 网络弹性介绍

4 重试介绍

5 重试样例

    5.1 jiuxi-client.yaml 文件

    5.2 jiuxi-deploy.yaml

    5.3 jiuxi-svc.yaml

    5.4 jiuxi-vs.yaml

6 重试实例部署

    6.1 Istio 注入

    6.2 部署 k8s service

    6.3 部署 Istio 虚拟服务

7 重试实例设置

8 重试实例验证


1 前言

        如果你对博客有任何疑问,请告诉我。

1.png


2 邀约

        你可以从 b 站搜索 “九析”,获取免费的、更生动的视频资料:

clipboard2.png


3 网络弹性介绍

        网络弹性也称为运维弹性,是指网络在遇到灾难事件时快速恢复和继续运行的能力。灾难事件的范畴很广泛,比如长时间停电、网络设备故障、恶意***等。


4 重试介绍

        你爱上一个玉女,你想把她变成欲女。于是你疯狂地追求了她。第一次,她拒绝了,你不死心;你又追求她第二次,结果她又拒绝了你,你依旧不死心;你又追求她第三次,结果她又拒绝了你,这次你不再死缠烂打,你改变了策略。你去了整型医院,你整成她的模样,结果你在夜深人静的时候你对着镜子疯狂爱抚自己。你胜利了。

很多时候,换个角度,也许你就可以解决问题,只是很多人都想不到而已……

        好了,不扯淡了。言归正传。

        Istio 重试机制就是如果调用服务失败,Envoy 代理尝试连接服务的最大次数。而默认情况下,Envoy 代理在失败后并不会尝试重新连接服务,除非我们启动 Istio 重试机制。


5 重试样例

        本样例中在一次调用服务失败后最多配 3 次重试。

        本样例需要结合 Istio 故障注入模拟被调用服务宕机,假如不了解故障注入也没关系,直接执行我的样例就行。下面先展示一下整个实例的架构图:

spacer.gifclipboard3.png

        架构说明如下,本实例模拟客户端调用 nginx,nginx 将请求转发给 tomcat。tomcat 通过故障注入而中止对外服务,nginx 设置如果访问 tomcat 失败则会重试 3 次。

        该实例资源文件一共有 4 个,分别如下:

jiuxi-client.yaml

jiuxi-deploy.yaml

jiuxi-svc.yaml

jiuxi-vs.yaml

5.1 jiuxi-client.yaml 文件

        资源内容如下图所示:

spacer.gifclipboard4.png

5.2 jiuxi-deploy.yaml

        内容如下:

spacer.gifclipboard5.png

5.3 jiuxi-svc.yaml

        内容如下:

spacer.gifclipboard6.png

5.4 jiuxi-vs.yaml

        内容如下:

spacer.gifclipboard7.png

        此虚拟服务有两个知识点。

        第一:故障注入。该虚拟服务的作用对象就是 tomcat-svc。使用此故障注入后,在网格中该 tomcat 就是不可用的。

http:

- fault:

     abort:

         percentage:

             value: 100

         httpStatus: 503

        该设置说明每次调用 tomcat-svc,都会调用失败,并且返回错误状态码 503。

        第二:重试。代码如下:

http:

- route:

   - destination:

          host: nginx-svc

   reties:

      attempts: 3

        该设置说明每次调用 nginx-svc,如果调用失败的话就会重试 3 次。


6 重试实例部署

6.1 Istio 注入

        需要对 client 和 deploy 资源进行 Istio 注入,将 client、nginx、tomcat 都放到网格中。本人是手工注入 Istio,如果你设置了自动资源注入也不会有影响,一样可以轻松完爆。

istioctl kube-inject -f jiuxi-client.yaml | kubectl apply -f -

istioctl kube-inject -f jiuxi-deploy.yaml | kubectl apply -f -

        执行成功后,通过 kubectl get pods 查看 Istio 注入情况:

spacer.gifclipboard8.png

6.2 部署 k8s service

        部署 jiuxi-svc.yaml:

kubectl apply -f jiuxi-svc.yaml

6.3 部署 Istio 虚拟服务

        部署 jiuxi-vs.yaml

kubectl apply -f jiuxi-vs.yaml


7 重试实例设置

        因为要用到 nginx 到 tomcat 的转发功能,因此需要对 nginx 做一些设置:

        登录 nginx pod:

kubectl exec -it nginx-7559f7d487-79q9p -- sh

        编辑 nginx 配置文件:

vi /etc/nginx/conf.d/default.conf

        添加和修改如下内容:

spacer.gifclipboard9.png

        编辑完成后,再执行如下语句验证配置和让配置生效:

spacer.gifclipboard10.png

        自此,整个样例配置和部署完毕。


8 重试实例验证

        登录 client,执行如下语句:

kubectl exec -it client-5b77d5949f-nzdtl -- sh # 别照抄本人 pod,根据各自情况修改

        执行如下语句:

wget -q -O - http://nginx-svc

        执行如下语句首先将 nginx 的日志打印到控制台:

kubectl logs -f nginx-7559f7d487-79q9p -c istio-proxy

        执行结果如下图所示:

spacer.gifclipboard11.png

        由上图可知,重试设置生效。

        自此,九析带你轻松完爆了 Istio 的重试(retry)机制。

猜你喜欢

转载自blog.51cto.com/14625168/2498681