zoukankan      html  css  js  c++  java
  • Istio 故障注入之延时(fixedDelay)

    Istio 故障注入

    Istio 故障注入与其他在网络层引入错误(例如延迟数据包或者直接杀死 Pod)的机制不同,Istio 允许在应用程序层注入故障。这使得可以注入更多相关的故障,比如 HTTP 错误代码等。

    Istio 可以注入两种类型的故障,而这两种故障都是使用虚拟服务来配置的:

    延迟:模拟增加网络延迟或上游服务过载。

    中止:模拟服务故障而导致调用服务不可用。中止通常以 HTTP 错误代码或 TCP 连接失败表示


    Istio 故障注入实例

    ​ 本实例包括 4 个资源文件,3 个 k8s 相关,1 个 istio 相关:

    client.yaml

    nginx-svc.yaml

    nginx-deploy.yaml

    nginx-vs.yaml

    客户端资源文件

    client.yaml 内容如下:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: client
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: client
      template:
        metadata:
          labels:
            app: client
        spec:
          containers:
          - name: busybox
            image: busybox
            imagePullPolicy: IfNotPresent
            command: ["/bin/sh", "-c", "sleep 3600"]
    

    ​ 执行如下语句进行 Istio 注入,注入后,此 client 将处于网格之内:

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

    Istio 注入成功成功如下图所示:

    spacer.gifclipboard5.png

    k8s 服务文件

    nginx-svc.yaml 内容如下:

    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-svc
    spec:
      selector:
        server: nginx
      ports:
      - name: http
        port: 80
        targetPort: 80
        protocol: TCP
    

    执行如下语句部署 service:

    kubectl apply -f nginx-svc.yaml

    部署工作负载(deployment)

    nginx-deploy.yaml 内容如下:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx
      labels:
        server: nginx
        app: web
    spec:
      replicas: 1
      selector:
        matchLabels:
          server: nginx
          app: web
      template:
        metadata:
          name: nginx
          labels: 
            server: nginx
            app: web
        spec:
          containers:
          - name: nginx
            image: nginx:1.14-alpine
            imagePullPolicy: IfNotPresent
    

    部署语句如下:

    kubectl apply -f nginx-deploy.yaml

    虚拟服务文件

    ​ 故障注入就在虚拟服务资源中,内容如下:

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      name: vs
    spec:
      hosts:
      - nginx-svc
      http:
      - fault:
          delay:
            percentage:
              value: 100
            fixedDelay: 10s
        route:
        - destination: 
            host: nginx-svc
    

    部署语句如下:

    kubectl apply -f nginx-vs.yaml

    自此,整个实例部署完毕。

    验证故障注入

    ​ 执行如下语句登录客户端:

    kubectl exec -it client-5b77d5949f-clrb7 -- sh

    ​ 使用 wget 访问 nginx-svc:

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

    ​ 发现延迟生效,因为设置的延迟时间是 5s。除去我中间操作花去了大约 3s,发现最终的延迟确实是 5s。如下图所示:

    spacer.gifclipboard9.png

  • 相关阅读:
    Java 传递参数时,传递一个变量快还是传递一个实体类?
    13 设计模式
    12 反射
    11.多线程&&并发
    10.输入输出
    9.异常Exception
    7.正则表达式
    5.数组
    6.常见对象
    上传本地项目到Github
  • 原文地址:https://www.cnblogs.com/Serverlessops/p/13537321.html
Copyright © 2011-2022 走看看