Istio 故障注入之延时(fixedDelay)

Istio 故障注入

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

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

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

停止:模拟服务故障而致使调用服务不可用。停止一般以 HTTP 错误代码或 TCP 链接失败表示网络


Istio 故障注入实例

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

client.yamlspa

nginx-svc.yaml3d

nginx-deploy.yamlcode

nginx-vs.yamlserver

客户端资源文件

client.yaml 内容以下:blog

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

相关文章
相关标签/搜索