天天看點

Knative Serving 0.11.0 版本變更前言主要變更其他變更參考

前言

Knative Serving v0.11.0 版本已經于 12 月 11 号正式釋出。本次版本繼續優化activator負載均衡能力,這次解決了并發數為10的場景,測試結果顯示大部分請求在0.14秒完成,具體細節見以下内容。

主要變更

改進在低并發下的負載均衡

點我檢視設計文檔

(google docs)

回顧上一個版本的變更,為了讓activator把請求更均勻發送到pod上,引入了two random choices算法,并且為了解決多個activator的場景,把pod配置設定給特定的activator來處理。舉個例子,假如有2個activator,5個pod,每個activator會配置設定到2個pod,最後剩下的按順序配置設定,也就是第一個activator負責3個pod,第二個負責兩個pod。這樣實作後,發現如果并發數是1的時候效果不錯,但并發數是10的時候效果不好。

目前的問題是如何處理剩下的pod如何平均配置設定流量。作者新的方案是去掉了two random choices算法,改用knative裡面的breaker來實作,通過設定容量達到平分的目的。具體算法如下,假設有2個activator,5個pod,并發數是10,則每個activator的容量為 5 * 10 / 2 = 25。另外每個pod的podIPTracker裡面有個breaker,根據之前的配置設定政策,每個activator獨自向兩個pod發送,podIPTracker裡面的breaker容量都是10,但還剩下一個pod,把這個pod的容量設定為10/2=5,也就是說對于這個pod,每個activator最多同時給它5個并發。

這次改動後,每次請求先判斷這個pod的容量是否滿了,如果沒滿會先發送給它處理,這樣會讓請求優先塞滿第一個pod,才會到第二個pod。作者認為這樣後面縮容時,可以針對空閑的進行縮容。

網絡接入層引入Kourier

Kourier

是第一個Knative原生的入口實作,直接調和knative網絡層CRD到Envoy裡面。它作為istio的替換品之一,更輕量的提供入口流量路由服務,目前在0.11版本中把Kourier作為Knative e2e內建測試的一個選項。

其他變更

擴縮容

  • 減少K8s services的數量,每個Revision3個減為2個,metrics service 改用 private service
  • 修複livenessProbe導緻無法縮容的問題
  • 修複Target annotation 可以覆寫預設值
  • 在HPA的PodAutoscalers也彙報desired/actual名額

核心API

  • 改進鏡像tag解析的錯誤資訊
  • 允許在PodSpec使用 

    imagePullSecrets

  • 分離 預設值和校驗的webhooks

網絡

  • 相容 Istio 1.4,這個版本引入了正規表達式的長度限制  #6058
  • 內建 istio/client-go #5969
  • 當VirtualService調解失敗後,更新LoadBalancerReady condition  #6048
  • 端口命名方式遵循Istio約定 #5070

參考

文章來自于對knative release note的翻譯和解讀

繼續閱讀