首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Istio停止负载平衡,当添加离群点检测的信任时

Istio停止负载平衡,当添加离群点检测的信任时
EN

Stack Overflow用户
提问于 2020-11-04 09:58:08
回答 2查看 362关注 0票数 1

团队,

我一直在玩isito1.7和离群点探测,下面是我发现的一些奇怪的东西

代码语言:javascript
复制
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: recommendation
spec:
  hosts:
    - "recommendation-demo.com"
  gateways:
    - istio-system/monitoring-gateway
  http:
  - name: "other-account-route"
    route:
    - destination:
        host: recommendation
        subset: v2
      weight: 100
    - destination:
        host: recommendation
        subset: v1
      weight: 0
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: recomm-dr
spec:
  host: recommendation
  subsets:
  - name: v2
    labels:
      version: v2
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN
      connectionPool:
        tcp: {}
        http: {}
      outlierDetection:
        consecutiveErrors: 2
        interval: 1s
        baseEjectionTime: 30s
        maxEjectionPercent: 10
  - name: v1
    labels:
      version: v1

因此,如果目标规则中没有配置孤立点检测,负载平衡就会成功地工作,就像

代码语言:javascript
复制
kubectl -n micro exec -it $CLIENT_POD -c istio-proxy – sh -c ‘while true; do curl -L recommendation-demo.com; sleep 1; done’
recommendation v2 from ‘recommendation-v2-57ddf9cd95-wb7rj’: 45
recommendation v2 from ‘recommendation-v2-57ddf9cd95-skkgd’: 851
recommendation v2 from ‘recommendation-v2-57ddf9cd95-jtkrz’: 44
recommendation v2 from ‘recommendation-v2-57ddf9cd95-wb7rj’: 46
recommendation v2 from ‘recommendation-v2-57ddf9cd95-skkgd’: 852
recommendation v2 from ‘recommendation-v2-57ddf9cd95-jtkrz’: 45
recommendation v2 from ‘recommendation-v2-57ddf9cd95-wb7rj’: 47
recommendation v2 from ‘recommendation-v2-57ddf9cd95-skkgd’: 853
recommendation v2 from ‘recommendation-v2-57ddf9cd95-jtkrz’: 46
recommendation v2 from ‘recommendation-v2-57ddf9cd95-wb7rj’: 48
recommendation v2 from ‘recommendation-v2-57ddf9cd95-jtkrz’: 47
recommendation v2 from ‘recommendation-v2-57ddf9cd95-skkgd’: 854

但在我把这部分加进去之后

代码语言:javascript
复制
outlierDetection:
consecutiveErrors: 2
interval: 1s
baseEjectionTime: 30s
maxEjectionPercent: 50

我唯一得到的结果是

代码语言:javascript
复制
recommendation v2 from ‘recommendation-v2-57ddf9cd95-skkgd’: 1321
recommendation v2 from ‘recommendation-v2-57ddf9cd95-skkgd’: 1322
recommendation v2 from ‘recommendation-v2-57ddf9cd95-skkgd’: 1323
recommendation v2 from ‘recommendation-v2-57ddf9cd95-skkgd’: 1324
recommendation v2 from ‘recommendation-v2-57ddf9cd95-skkgd’: 1325
recommendation v2 from ‘recommendation-v2-57ddf9cd95-skkgd’: 1326
recommendation v2 from ‘recommendation-v2-57ddf9cd95-skkgd’: 1327

和BTW在我添加了离群点配置,然后扩大部署后,最年轻的吊舱就可以成功地路由了。

代码语言:javascript
复制
recommendation v2 from ‘recommendation-v2-57ddf9cd95-xhq4n’: 32
recommendation v2 from ‘recommendation-v2-57ddf9cd95-xhq4n’: 33
recommendation v2 from ‘recommendation-v2-57ddf9cd95-skkgd’: 1364
recommendation v2 from ‘recommendation-v2-57ddf9cd95-xhq4n’: 34
recommendation v2 from ‘recommendation-v2-57ddf9cd95-skkgd’: 1365
recommendation v2 from ‘recommendation-v2-57ddf9cd95-xhq4n’: 35
recommendation v2 from ‘recommendation-v2-57ddf9cd95-skkgd’: 1366
recommendation v2 from ‘recommendation-v2-57ddf9cd95-xhq4n’: 36

所以我的问题是,

  1. 这是否一种预期的行为?在这种情况下,假设我们在一段时间内有3个吊舱,并应用我们更好的信任,那么请求只会被发送到最小的pod建议-v2-57ddf9cd95-skkgd。
  2. 我们有rs和离群者的信任,然后我们增加额外的吊舱,他们可以成功地负载?
  3. 有人能成功地为离群人吐露心声吗?非常感谢您的回复!
EN

回答 2

Stack Overflow用户

发布于 2020-11-12 13:22:04

下面我用youtube上的视频 github存储库创建了下面的示例。

它是基于1部署的服务和适当的网关,虚拟服务和目标规则。

用istio 1.7.4在gke上进行测试。

比如山毛鸟。

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: recommendation
    version: v2
  name: recommendation-v2
spec:
  replicas: 2
  selector:
    matchLabels:
      app: recommendation
      version: v2
  template:
    metadata:
      labels:
        app: recommendation
        version: v2
      annotations:
        sidecar.istio.io/inject: "true"
    spec:
      containers:
      - env:
        - name: JAVA_OPTIONS
          value: -Xms15m -Xmx15m -Xmn15m
        name: recommendation
        image: quay.io/rhdevelopers/istio-tutorial-recommendation:v2.2
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
          name: http
          protocol: TCP
        - containerPort: 8778
          name: jolokia
          protocol: TCP
        - containerPort: 9779
          name: prometheus
          protocol: TCP
        resources:
          requests:
            memory: "80Mi"
            cpu: "200m" # 1/5 core
          limits:
            memory: "120Mi"
            cpu: "500m"
        livenessProbe:
          exec:
            command:
            - curl
            - localhost:8080/health/live
          initialDelaySeconds: 5
          periodSeconds: 4
          timeoutSeconds: 1
        readinessProbe:
          exec:
            command:
            - curl
            - localhost:8080/health/ready
          initialDelaySeconds: 6
          periodSeconds: 5
          timeoutSeconds: 1
        securityContext:
          privileged: false

---


apiVersion: v1
kind: Service
metadata:
  name: recommendation
  labels:
    app: recommendation
spec:
  ports:
  - name: http
    port: 8080
  selector:
    app: recommendation


---            

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: my-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
      - "*"

---

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: recommendation
spec:
  hosts:
    - "*"
  gateways:
    - "my-gateway"
  http:
  - name: "other-account-route"
    route:
    - destination:
        host: recommendation
        subset: v2
      weight: 100


---

apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: recomm-dr
spec:
  host: recommendation
  subsets:
  - name: v2
    labels:
      version: v2
    trafficPolicy:
      loadBalancer:
        simple: ROUND_ROBIN
      outlierDetection:
        consecutiveErrors: 1
        interval: 1s
        baseEjectionTime: 60s
        maxEjectionPercent: 100

1.这是否一种预期的行为?在这种情况下,假设我们在一段时间内有3个吊舱,并应用我们更好的信任,那么请求只会被发送到最小的pod建议-v2-57ddf9cd95-skkgd。

不,应用这个outlierDetection之后,它应该像以前一样工作,除非它们返回503。

2.我们有rs和离群人的信息,然后在rs中添加额外的吊舱,它们可以成功地被负载平衡?

是的,它们应该被成功地负载平衡。

有来自以上山雀的测试。

添加在outlierDetection下面

代码语言:javascript
复制
  outlierDetection:
    consecutiveErrors: 1
    interval: 10s
    baseEjectionTime: 90s
    maxEjectionPercent: 100

有2个副本和outlierDetection。

代码语言:javascript
复制
recommendation v2 from 'recommendation-v2-7f76b4c8cc-6tvmj': 1
recommendation v2 from 'recommendation-v2-7f76b4c8cc-htz56': 1
recommendation v2 from 'recommendation-v2-7f76b4c8cc-6tvmj': 2
recommendation v2 from 'recommendation-v2-7f76b4c8cc-htz56': 2
recommendation v2 from 'recommendation-v2-7f76b4c8cc-6tvmj': 3
recommendation v2 from 'recommendation-v2-7f76b4c8cc-htz56': 3
recommendation v2 from 'recommendation-v2-7f76b4c8cc-6tvmj': 4
recommendation v2 from 'recommendation-v2-7f76b4c8cc-htz56': 4
recommendation v2 from 'recommendation-v2-7f76b4c8cc-6tvmj': 5
recommendation v2 from 'recommendation-v2-7f76b4c8cc-htz56': 5
recommendation v2 from 'recommendation-v2-7f76b4c8cc-6tvmj': 6

有2个副本,outlierDetection,然后添加2个kubectl scale deployment recommendation-v2 --replicas=4副本

代码语言:javascript
复制
recommendation v2 from 'recommendation-v2-7f76b4c8cc-htz56': 15
recommendation v2 from 'recommendation-v2-7f76b4c8cc-6tvmj': 17
recommendation v2 from 'recommendation-v2-7f76b4c8cc-htz56': 16
recommendation v2 from 'recommendation-v2-7f76b4c8cc-6tvmj': 18
recommendation v2 from 'recommendation-v2-7f76b4c8cc-htz56': 17
recommendation v2 from 'recommendation-v2-7f76b4c8cc-6tvmj': 19
recommendation v2 from 'recommendation-v2-7f76b4c8cc-htz56': 18
recommendation v2 from 'recommendation-v2-7f76b4c8cc-6tvmj': 20
recommendation v2 from 'recommendation-v2-7f76b4c8cc-htz56': 19
recommendation v2 from 'recommendation-v2-7f76b4c8cc-htz56': 20
recommendation v2 from 'recommendation-v2-7f76b4c8cc-ml9m7': 1
recommendation v2 from 'recommendation-v2-7f76b4c8cc-6tvmj': 21
recommendation v2 from 'recommendation-v2-7f76b4c8cc-htz56': 21
recommendation v2 from 'recommendation-v2-7f76b4c8cc-ml9m7': 2
recommendation v2 from 'recommendation-v2-7f76b4c8cc-htz56': 22
recommendation v2 from 'recommendation-v2-7f76b4c8cc-6tvmj': 22
recommendation v2 from 'recommendation-v2-7f76b4c8cc-ml9m7': 3
recommendation v2 from 'recommendation-v2-7f76b4c8cc-htz56': 23
recommendation v2 from 'recommendation-v2-7f76b4c8cc-kvqjk': 1
recommendation v2 from 'recommendation-v2-7f76b4c8cc-6tvmj': 23
recommendation v2 from 'recommendation-v2-7f76b4c8cc-htz56': 24
recommendation v2 from 'recommendation-v2-7f76b4c8cc-ml9m7': 4
recommendation v2 from 'recommendation-v2-7f76b4c8cc-ml9m7': 5
recommendation v2 from 'recommendation-v2-7f76b4c8cc-kvqjk': 2
recommendation v2 from 'recommendation-v2-7f76b4c8cc-kvqjk': 3
recommendation v2 from 'recommendation-v2-7f76b4c8cc-6tvmj': 24
recommendation v2 from 'recommendation-v2-7f76b4c8cc-htz56': 25

增加了两个新的副本,ml9m7和kvqjk。

有人能成功地为离群人吐露心声吗?非常感谢您的回复!

如果我正确地理解了它应该如何工作,那么上面的例子是正确的,如果您手动更改一个豆荚以返回503,那么它将从池中弹出,并在90年代后添加。

有一种方法从以上视频如何使推荐副本返回503。

代码语言:javascript
复制
kubectl exec -ti recommendation-v2-7f76b4c8cc-6tvmj -c recommendation /bin/bash
bash-4.4# curl localhost:8080/misbehave
Following requests to / will return a 503

如果您开始发送通信量,您可以检查部署副本的日志,该副本应该返回503

代码语言:javascript
复制
kubectl logs recommendation-v2-7f76b4c8cc-6tvmj -c recommendation --tail 10

每90年代有几个请求,在istio检测到503后,它将被outlierDetection弹出。90年代以后,istio会一次又一次地发送流量。

追加资源:

票数 0
EN

Stack Overflow用户

发布于 2021-04-26 02:21:14

所以这个问题似乎与局部负载均衡器有关

当未定义outlierDetection时,failover禁用->,因此不使用局部性。这就是为什么负载平衡器工作正常的原因。

但是在设置outlierDetection之后,在默认情况下启用了本地failover,因此请求在本地是负载平衡的。

如果您想确保:->:

代码语言:javascript
复制
    loadBalancer:
      simple: RANDOM
      localityLbSetting:
        enabled: false
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64677815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档