前言
Istio Ingress Gateway作為服務網格的核心元件,對外提供服務統一的服務入口,gateway的能力對業務至關重要,但由于涉及到資源配置及費用開銷等問題,ACK叢集中預設安裝istio的相關元件,不會做在資源層面做特定的配置,是以存在如下可能影響性能的點:
- 預設部署資源規格小
- 預設replica執行個體數少
- 預設入口service slb執行個體規格低
- 預設和其他業務pod混部
- 預設主控端核心sysctl部分參數并未調整到最适合大流量場景
如果隻是簡單開發測試體驗下istio的功能,無需為這些點做專門的調優;但是如果以生産為目标,為了使ingress gateway能夠擁有更強的能力,我們需要根據我們的業務場景,有選擇性的對每個點進行适當的調整。
調整資源規格
預設的istio ingress gateway deployment中pod的資源規格如下:
resources:
limits:
cpu: '2'
memory: 2G
requests:
cpu: 200m
memory: 256Mi
我們可以根據實際情況,将該資源的規格适當調大,gateway是計算敏感型業務,資源可适當多配置設定一些CPU資源
resources:
limits:
cpu: '4'
memory: 4G
requests:
cpu: '4'
memory: 4G
擴充執行個體個數
預設的istio ingress gateway deployment中replica的個數為1,預設有80% cpu門檻值做hpa,建議上來2個replica起步,另外加上hpa使之具備一定彈性。如果考慮采用本文所述的獨立部署,可不做hpa彈縮gateway。
spec:
replicas: 1
調優入口service slb執行個體規格
預設ingress gateway的service對應的slb規格是slb.s1.small,該規格執行個體的最大連接配接數為5000,每秒查詢數為1000 QPS,建議可按照實際需求調整slb執行個體規格,具體slb執行個體規格可參考:
https://help.aliyun.com/document_detail/27695.html注意:修改slb執行個體規格請不要在SLB控制台上手動修改,規格的變更請在service的yaml中以annotation方式進行修改,例如:
annotations:
service.beta.kubernetes.io/alibaba-cloud-loadbalancer-spec: slb.s3.small
獨立部署
為避免ingress gateway和其他業務pod混部場景下出現南北向及東西向流量互相幹擾的場景,可考慮将ingress gateway獨立部署于某幾台規格較高的節點上,使得gateway和業務pod之間隻存在南北向的流量,在此處,我們建議獨立部署于計算型ECS資源上(如前所述,gateway是計算型業務,cpu開銷較大),步驟可參考如下:
- 在叢集中擴容兩新ECS節點,擴容時可同時給節點打上label及污點taint(添加已有節點,也請做同樣的操作)
kubectl label node nodename app=istio-ingressgateway
kubectl taint node nodename istio=ingressgateway:NoExecute
- 給ingress gateway的deployment添加node selector及對應的容忍:
nodeSelector: app: istio-ingressgateway
tolerations: - effect: NoExecute key: istio operator: Equal value: ingressgateway
- 重新開機gateway的pod,使之能排程到專屬的獨立節點上去。
優化sysctl核心參數
為了使ingress gateway能有更強的處理高并發的能力,建議可在ingress gateway所在的節點上調整一下核心參數:
sysctl -w net.netfilter.nf_conntrack_max=2097152
sysctl -w net.ipv4.tcp_mem="786432 2097152 3145728"
sysctl -w net.ipv4.tcp_rmem="4096 4096 16777216"
sysctl -w net.ipv4.tcp_wmem="4096 4096 16777216"
sysctl -w net.ipv4.tcp_max_syn_backlog=65535
terway容器網絡Pod獨占ENI(可選)
如果我們選擇的ACK叢集容器網絡為terway,且叢集中的機型能夠支援足夠多的彈性網卡ENI,我們的業務也允許我們使用Terway容器網絡下獨占ENI的模式(每台機器支援ENI的個數有限,慎用獨占模式,參考,
https://help.aliyun.com/document_detail/25378.html),那我們可以給ingress gateway及需要高性能的業務pod配置設定獨占ENI以提高性能。
總結
經過以上幾個點的調整後,可以有效提升istio ingress gateway的承載能力,為生産環境下可能出現的流量峰值提前做好準備,另外,為了應對峰值流量,gateway後端的服務也需要做相應的資源規劃及hpa的配套,實測結果顯示,端到端的優化配置可有效提升ingress gateway的可靠性及性能,推薦有istio生産需求的使用者參照本文提升istio的承載能力。
