天天看點

knative serving 0.10.0 版本變更前言主要變更其他變更參考

前言

Knative Serving v0.10.0 版本已經于 10 月 29 号正式釋出。本次版本主要優化了activator負載均衡等能力,具體細節見以下内容。

主要變更

Activator半理想的負載均衡優化

這部分的設計文檔見  

Better Load Balancing in Activator

 (google doc)

在對activator負載均衡的優化中,設定 

containerConcurrency: 1

 後因為排隊導緻的錯誤已經解決。在有容器并發數(CC,Container Concurrency)感覺負載均衡的activator中,實際看到通過activator比直接通路使用者容器有更低的延遲(一般來說增加額外一跳會增加延遲)。目前隻實作了CC=1的場景,CC=10的還沒完成。

之前版本做過一次優化,由于iptable重新整理時間間隔的問題,通過service clusterip發現pod ip會有延遲,如果clusterIP沒準備好,會向pod ip直接發送請求。這次的負載均衡優化隻是針對向pod ip發送請求的場景,如何均衡的向每個pod發送請求。

作者想到的方案有兩個,一個是把請求配置設定到目前負載最低的那個,第二個是

two random choices

 算法。有文章建議第一種方案可能更糟糕,第二種方案的實作方式是随機選擇兩個節點,然後從中選擇一個低負載的。測試下來後,當隻有一個activator的時候,效果很明顯,但是包含多個activator的時候,還是有比較大的延時。作者認為的原因是:1,不同的activator會配置設定請求到相同的pod,導緻排隊 2,activator自己的流量不均勻。我了解第一個原因是各個activator沒有共享目前pod負載情況,是以導緻算法失效,有可能某個pod的請求相對多一些。

解決方案是把pod清單分片,每個activator隻向部分pod發送請求。

Kubernetes最低支援版本為1.14

這樣可以同時支援多個CRD版本以及試驗其他Kubernetes CRD新功能。如果檢測到低版本,安裝會失敗。

使用Go1.13

Serving已經切換到 Go 1.13,在同步上有更好的性能,錯誤包裝(error wrapping)和其他功能,比如 

Duration.Milliseconds

其他變更

擴縮容

  • Service名稱不再使用GenerateName,我們在建立metrics和private K8s Service名稱使用GenerateName,導緻在測試和可靠性上很多問題,是以放棄使用。
  • Activator重構和負載均衡,在  @greghaynes  的幾個變更後,允許探測和路由請求到獨立的pod,可以顯著的簡化代碼,移除重複和不高效的部分。
  • 顯著提升內建測試,減少偶爾的報錯

核心API

  • 切換到 K8s 1.15.3 用戶端庫  #5570  ,這個用戶端版本可以讓Knative使用K8s的新特性,選擇這個版本的原因是它相容1.14,并且因為相容K8s 1.16,可以使用更長時間。
  • 切換回原來單一的安裝方式,同時支援所有API版本,因為支援的K8s最低版本為1.14,這個版本已經解決了CRD多版本共存的問題,是以切換回之前的安裝方式。
  • 跳過複制last-applied-configuration注解到 Route
  • ConfigMaps現在可以并行的校驗了
  • 分别為編輯和檢視添加ClusterRole
  • 在Configuration和Route裡添加注解 /creator and /lastModifier
  • Service和Route加上duck.knative.dev/addressable=true标簽,給eventing使用  #5874

網絡

  • Activator優雅退出  #5542 ,activator在退出的時候,健康檢查還傳回成功,導緻請求依然路由到退出中的activator,我們讓SIGTERM信号觸發健康檢查失敗,允許退出中的activator可以處理完剩餘的請求。
  • 在AutoTLS關閉的時候,避免建立通配符證書  #5636 ,在v0.9.0,我們嘗試建立通配符證書甚至cert-manager沒有部署,導緻在建立新namespace時證書建立錯誤。
  • 結束ClusterIngress遷移  #5689
  • 改進健康檢查支援HTTPS重定向,HTTPS,HTTP2和自定義端口    #5223 ,之前的健康檢查依賴寫入VirtualService特定的域名,現在可以探測實際的資料鍊路,允許使用真正服務的域名探測。
  • 修複cluster-local的可見性問題  #5734
  • 避免給cluster-local service建立錯誤的證書  #5611

監控

  • 添加容器和pod标簽到revision和activator的名額裡

參考

本文内容大部分來自于 Knative Serving release note 的解讀