nginx-ingress蓝绿部署权重测试

kubernetes基于nginx-ingress进行蓝绿部署/金丝雀发布
测试结果汇总分析:
1、正式/灰度各一个pod ,canary权重设置 30%
发送500个请求 ,canary占147个
发送1000个请求,canary占293个

2、正式pod1个/canary 2个 ,canary权重占比 30%
发送500个请求,canary占71+72=143个
发送1000个请求,canary占139 + 138 = 277个

[root@master1 test]# cat xc-test-ingress.yaml
# source: kubernetes/templates/ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ops-sre-ngconf2
  namespace: yidian-prod
  annotations:
    kubernetes.io/ingress.class: ingress-nginx1
    nginx.ingress.kubernetes.io/configuration-snippet: |
      add_header Cache-Control no-cache;
      access_log /var/log/nginx/test.int.test.com.access.log upstreaminfo;
      error_log  /var/log/nginx/test.int.test.com.error.log;
spec:
  rules:
    - host: "test.int.test.com"
      http:
        paths:
          - path: /
            backend:
              serviceName: ops-sre-ngconf2
              servicePort: 80
[root@master1 test]# cat xc-test-canary-ingress.yaml
# source: kubernetes/templates/ingress.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ops-sre-ngconf2-canary
  namespace: yidian-prod
  annotations:
    kubernetes.io/ingress.class: ingress-nginx1
    nginx.ingress.kubernetes.io/canary: "true"
    nginx.ingress.kubernetes.io/canary-weight: "30"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      access_log /var/log/nginx/test.int.test.com.access.log upstreaminfo;
      error_log  /var/log/nginx/test.int.test.com.error.log;
spec:
  rules:
    - host: "test.int.test.com"
      http:
        paths:
          - path: /
            backend:
              serviceName: ops-sre-ngconf2-canary
              servicePort: 80

----------------------------------

3、要求:所有带有“version:canary”请求头的请求,都打到灰度的pod上面

实现逻辑:

  1. 在ingress的配置文件中添加配置
    nginx.ingress.kubernetes.io/canary-by-header: "version"
    nginx.ingress.kubernetes.io/canary-by-header-value: "canary"
  2. 测试的ingress配置文件
    [root@master1 test]# cat xc-test-canary-ingress.yaml
    # source: kubernetes/templates/ingress.yaml
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: ops-sre-ngconf2-canary
      namespace: yidian-prod
      annotations:
        kubernetes.io/ingress.class: ingress-nginx1
        nginx.ingress.kubernetes.io/canary: "true"
        nginx.ingress.kubernetes.io/canary-by-header: "version"
        nginx.ingress.kubernetes.io/canary-by-header-value: "canary"
        nginx.ingress.kubernetes.io/canary-weight: "30"
        nginx.ingress.kubernetes.io/configuration-snippet: |
          access_log /var/log/nginx/test.int.test.com.access.log upstreaminfo;
          error_log  /var/log/nginx/test.int.test.com.error.log;
    spec:
      rules:
        - host: "test.int.test.com"
          http:
            paths:
              - path: /
                backend:
                  serviceName: ops-sre-ngconf2-canary
                  servicePort: 80

     3、测试命令及结果

                  命令:curl -H "version:canary" test.int.test.com/index.html

                  结果:压测500次,所有请求都打到了灰度的pod上面

4、要求:对请求头的内容进行正则匹配

实现逻辑:

  1. 在ingress的配置文件中添加配置
    nginx.ingress.kubernetes.io/canary-by-header-pattern: "canary*"
     
     
    ⚠️:当使用正则进行配置时,一定要将canary-by-header-value去掉,否则正则匹配将被忽略
  2. 测试的ingress配置文件
    [root@master1 test]# cat xc-test-canary-ingress.yaml
    # source: kubernetes/templates/ingress.yaml
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      name: ops-sre-ngconf2-canary
      namespace: yidian-prod
      annotations:
        kubernetes.io/ingress.class: ingress-nginx1
        nginx.ingress.kubernetes.io/canary: "true"
        nginx.ingress.kubernetes.io/canary-by-header: "version"
        #nginx.ingress.kubernetes.io/canary-by-header-value: "canary"
        nginx.ingress.kubernetes.io/canary-by-header-pattern: "canary*"
        nginx.ingress.kubernetes.io/canary-weight: "30"
        nginx.ingress.kubernetes.io/configuration-snippet: |
          access_log /var/log/nginx/test.int.test.com.access.log upstreaminfo;
          error_log  /var/log/nginx/test.int.test.com.error.log;
    spec:
      rules:
        - host: "test.int.test.com"
          http:
            paths:
              - path: /
                backend:
                  serviceName: ops-sre-ngconf2-canary
                  servicePort: 80
  3.  测试命令及结果

    命令:for  i in `seq 100`;do curl -H "version:canary123123" test.int.test.com/index.html ;done
    结果:压测500次,所有请求都打到了灰度的pod上面

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值