API Server 負載均衡問題被解決 | 雲原生生態週報 Vol. 40

週報40.png

作者 | 何淋波、李鵬、陳俊、高相林、孫健波

業界要聞

  1. CNCF 宣佈 2020 年中國 KubeCon 取消

由於新冠疫情影響,外國企業、開發者到訪中國存在不確定性,加上召集演講人、贊助商及參會者所遇到的困難,CNCF 宣佈原定於 2020 年 7 月在上海舉辦的 KubeCon + CloudNativeCon + 開源峯會取消。

同時,原計劃於 3 月 30 日 - 4 月 2 日在荷蘭阿姆斯特丹舉辦的 KubeCon + CloudNativeCon 峯會歐洲場也因疫情影響,被推遲到 2020 年 7 月或 8 月舉行。而 KubeCon + CloudNativeCon North America 2020 則將按計劃在 2020 年 11 月 17 日至 20 日在波士頓舉行。

  1. Kubeflow 1.0 發佈

可以基於 Kubernetes 高效地構建、訓練和部署AI應用。此次發佈中包括的核心組件如下:

  • Jupyter Notebook controller: 用戶可以方便使用 Jupyter Notebook 開發工具來開發新的機器學習模型;
  • TFJob and PyTorch Operator:用於模型訓練;
  • kfctl:用於部署和管理 Kubeflow;
  • KFServing:機器學習模型的部署和管理;
  • Kubeflow UI:集中儀表板。
  1. 阿里雲 ACK 1.16 版本正式灰度上線

阿里雲 ACK 整合阿里雲虛擬化、存儲、網絡和安全能力,打造雲端最佳容器化應用運行環境。Gartner 競爭格局國內唯一入選,Forrester 報告國內排名第一。歡迎試用!歡迎廣大讀者前來試用!

上游重要進展

Kubernetes

  1. 阿里經濟體工程師解決困擾 K8s 社區多年的 API Server 負載均衡問題

由於 API Server 和 client 是使用 HTTP2 協議連接,HTTP2 的多個請求都會複用底層的同一個 TCP 連接並且長時間不斷開。而在 API Server 發生 RollingUpdate 或者某個 API Server 實例重啓時,又或者 API Server 使用 MaxSurge=Replica 方式升級後, Load Balance 沒有及時的將所有副本掛載完畢,client 能敏感的感知到連接的斷開並立刻發起新的請求,這時候很容易引起較後啓動(或者較後掛載 Load Balance)的 API Server 沒有一點流量,並且可能永遠都得不到負載均衡。

螞蟻金服的同學對這個問題做了修復,增加了一種通用的 HTTP filter,API Server 概率性(建議 1/1000)的隨機關閉和 Client 的鏈接(向 Client 發送 GOAWAY)。關閉是優雅的關閉,不會影響  API Server 和 client 正在進行中的長時間請求(如 Watch 等),但是收到 GOAWAY 之後,client 新的請求就會重新建立一個新的 TCP 鏈接去訪問 API Server 從而能讓 Load Balance 再做一次負載均衡。

這個修復增加了通用的 HTTP filter,能輕易的 port 回老版本的 Kubernetes,其它 HTTP2 server 也有類似問題也可以快速 port 這個通用的 filter(只依賴較新版本 golang.org/x/net package)。

  1. add KEP for cgroups v2 support

給 kubelet 增加 cgroups v2 的支持。

  1. Disable HTTP2 while proxying a "Connection: upgrade" request

針對 proxy connection upgrade 請求,強制採用 http1.1 協議。

  1. Fix ExternalTrafficPolicy support for Service ExternalIPs

Service ExternalIPs 遵守 ExternalTrafficPolicy=local 規則,從而達到保留 Client 源 IP 目的。

  1. Allow signing controller to return intermediate certs

由於 kubelet 證書輪轉機制要求給 kubelet 返回簽發的證書時,同時也帶上籤發者的 CA 信息,用於解決 kube-controller-manager 和 kube-apiserver 的 CA 配置不一致的問題。該 PR 只解決 kube-controller-manager 這塊的問題,後續 kubelet 還需要配合修改。

  1. Use ip address from CNI output

目前主要從容器的 eth device 獲取容器 IP 信息,但是針對只使用 lo 和非 device(如: unix domain socket file)的容器當前的實現無法 cover,該 PR 利用 cni ADD 命令結果中返回的容器 IP 信息,而不從容器 eth device 獲取 IP 信息。

Knative 

  1. Knative Functions 支持

Knative 當前輕鬆支持基於 HTTP 和事件驅動的容器擴縮容,但是爲什麼不往前一步支持 FaaS 呢? 別急,Knative 社區已經開始計劃支持通過 Events 和 HTTP 觸發“function”。

開源項目推薦

  1. apiserver-network-proxy

基於 grpc 的隧道實現,用於定製 kube-apiserver 的 proxy 請求轉發。

  1. kubectl-debug

新啓動一個容器和目標 Pod 共享 pid/network/user/ipc 命名空間的方式,在新啓動容器爲目標 pod 定位問題。該工具可以以 kubectl plugin 方式運行。

本週閱讀推薦

  1. 《Bring your ideas to the world with kubectl plugins》

推薦使用 kubectl-plugin 的方式往 kubectl 擴展用戶的需求和功能。

  1. 《When You Do (and Don’t Need) a Service Mesh》

從微服務數量、導入的緊迫性以及時機等方面分析是否需要使用 Service Mesh。

  1. 《從零開始入門 K8s | Kubernetes 網絡模型進階》

本文將基於之前介紹的基本網絡模型,進行了更深入的瞭解,希望給予讀者一個更廣更深的認知。

  1. 《Kubernetes 1.16 與 1.14 性能對比》

本文主要從三個方面對 Kubernetes 1.16 與 1.14 的性能進行了對比,分析了 1.16 版本和 1.14 版本的區別。

  1. 《Kubernetes Release Note 解讀(1.15, 1.16)》

Kubernetes 1.16 版本相較於 1.14 版本有着衆多演進和增強,本文對其一一進行了解讀。

2羣直播海報.png

阿里巴巴雲原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的技術圈。”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章