Istio参数调优

本篇介绍和Istio性能关系较大的几个参数。仅供参考。

1.keepaliveMaxServerConnectionAge
这是Helm部署参数。它控制的是这是参数控制sidecar连接Polit的最长时间。在Isiot1.1中,默认时间是30分钟。

我们知道,在istio中,sidecar是要和Polit进行通讯的。Polit的实例数量通常不止一个。这就带来一个问题:如果Istio的访问量突然增大,Polit启动HA,sidecar什么时候连接到新的Polit?

keepaliveMaxServerConnectionAge参数如果设置的太小,可能会造成访问流量的丢失(sidecar与Polit的重链接频繁),如果设置的太大,将会造成Polit负载不均衡。

目前关于这个参数的设置,社区里也做过一些测试,有开发者设置为6分钟。具体的设置数值,需要根据自身Istio的情况进行测试后获得。

目前在OpenShift上安装Istio,由于采用Operator的方式,这个参数的调整未开放。后续Istio on OCP有开放的可能。

2. global.proxy.concurrency
这是Helm部署参数。它控制Proxy worker的线程数量。它会影响sidecar的资源利用率和延迟。模式数值是2

这点其实好理解,我们给sidecar分配的cpu计算能力越强,它的性能就会越好、资源消耗会越大、应用延迟会月底。

如果将global.proxy.concurrency设置为0,也就是说,每个Proxy worker线程占用一个CPU core(如果打开CPU超线程,就是占用CPU硬件超线程)。默认数值是2,也就是说,两个Proxy worker的线程共享一个CPU core(如果打开CPU超线程,就是占用CPU硬件超线程)。

目前在OpenShift上安装Istio,由于采用Operator的方式,这个参数的调整未开放。后续Istio on OCP有开放的可能。

3.global.enableTracing
这是配置参数。可以通过configmap进行配置,然后重启pilot后生效。这个参数默认是关闭的。
启动tracing会造成大量的资源开销并影响吞吐量。Tracing的provider是jaeger。

生产环境建议disable此参数。

基于Openshift的istio可以调整此参数。Istio参数调优_第1张图片
4.Telemetry和Gateways HPA阈值
这是配置参数。它会影响istio的性能。在规模较小的Istio环境中,Gateway和Telemetry的HPA可以关闭(Istio On OCP默认是关闭的)。

在基于OpenShift的istio中,HPA是否打开取决于如下参数:Istio参数调优_第2张图片
参数具体设置如下:
CPU 资源的基本单位是 millicores,因为 CPU 资源其实准确来讲,指的是 CPU 时间。所以它的基本单位为 millicores,1 个核等于 1000 millicores。也代表了 kubernetes 可以将单位 CPU 时间细分为 1000 份,分配给某个容器。

Resources代表Telemetry pod request的CPU和和内存,limit代表Telemetry pod最多使用的cpu和内存。Resources 1000m代表一个cpu core。而CPU最多使用4800,也就是4.8core。Istio参数调优_第3张图片
HPA逻辑如下

  1. 收集该HPA控制下所有Pod最近的cpu使用情况(CPU utilization)
  2. 对比在扩容条件里记录的cpu限额(CPUUtilization)
  3. 调整实例数(必须要满足不超过最大/最小实例数)
  4. 每隔30s做一次自动扩容的判断

说明:

  • CPU utilization的计算方法是用cpu usage(最近一分钟的平均值,通过heapster可以直接获取到)除以cpurequest(这里cpu request就是我们在创建容器时制定的cpu使用核心数)得到一个平均值,这个平均值可以理解为:平均每个PodCPU核心的使用占比。
  • 最重要的步骤为3,这里即为HPA的算法,计算当前需要启动几个Pod
    Istio参数调优_第4张图片
    如果我们将Resources设置的太高,那么Telemetry和Gateways 扩容几乎应用不会发生,这就失去了HPA的意义,也浪费资源。如果设置的太低,频繁发生扩缩容,会降低istio的稳定性。Telemetry的ResourcesCPU和内存可以适当调小。

如果我们启用了Gateways 隔离,也可以将它的ResourcesCPU和内存可以适当调小。

此外,我们还可以配合OpenShift的limitrange、qouta等参数使用。为重要的组件预留更多的资源,对不太重要的组件限制资源。具体的数值要根据自身的情况进行测试验证。OCP的几个参数基本概念就不再赘述了。

参考文献:
HPA概念介绍参考了:https://www.jianshu.com/p/da5b5ee00a52

你可能感兴趣的:(Istio参数调优)