Categories
程式開發

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


前言

《雲原生生態週報》由阿里雲容器平台聯合螞蟻金服共同發布,每週一期。眾多一線社區專家與您一起“跟踪動態,讀懂社區”,分享雲原生社區項目進展、活動發布、精選博客等信息。以下是第四十期雲原生生態週報的內容。

業界要聞

  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 版本有著眾多演進和增強,本文對其一一進行了解讀。

相關閱讀

雲原生生態週報 Vol. 39:Golang 1.14 發布
雲原生生態週報 Vol. 38:Apache Flink 1.10.0 發布
雲原生生態週報 Vol. 37:國內首個 Kubernetes SIG-Cloud-Provider 子項目揭秘
雲原生生態週報 Vol. 36:CNCF 公佈 2020 年 TOC 選舉結果
雲原生生態週報 Vol. 35:Falco 進入 CNCF Incubator 項目
雲原生生態週報 Vol. 34:VMware 完成 27 億美元的 Pivotal 收購
雲原生生態週報 Vol. 33:CNCF 宣布 TUF 畢業
雲原生生態週報 Vol. 32:Istio 1.5 版本開發中
雲原生生態週報 Vol. 31:Kubernetes v1.17 版本解讀
雲原生生態週報 Vol. 30:Rancher 新版本默認支持 Kubernetes 1.16
雲原生生態週報 Vol. 29:Kubernetes 擬支持 Cgroup v2
雲原生生態週報 Vol. 28:Mirantis 收購 Docker 企業業務
雲原生生態週報 Vol. 27:Helm 3 發布
雲原生生態週報 Vol. 26:2019 年容器生態統計報告發布
雲原生生態週報 Vol. 25:Canonical 開源 MicroK8
雲原生生態週報 Vol. 24:Ubuntu 19.10 發布
雲原生生態週報 Vol. 23:全球首個開放應用模型 OAM 開源
雲原生生態週報 Vol. 22:Knative 暫時不會捐給任何基金會
雲原生生態週報 Vol. 21:Traefik 2.0 正式發布
雲原生生態週報 Vol. 20:Kubernetes v1.16 發布
雲原生生態週報 Vol. 19:Helm 推薦用戶轉向 V3
雲原生生態週報 Vol. 18:獨家解讀 etcd 3.4 新特性
雲原生生態週報 Vol. 17 :Helm 3 發布首個 beta 版本
雲原生生態週報 Vol. 16:CNCF 歸檔 rkt,容器運行時“上古”之戰老兵凋零
雲原生生態週報 Vol. 15:K8s 安全審計報告發布
雲原生生態週報 Vol. 14:K8s CVE 修復指南
雲原生生態週報 Vol. 13 | Forrester 發布企業級容器平台報告
雲原生生態週報 Vol. 12 |K8s 1.16 API 重大變更
雲原生生態週報 Vol. 11 | K8s 1.16 早知道
雲原生生態週報 Vol. 10 | 數據庫能否運行在 K8s 當中?
雲原生生態週報 Vol. 9 | K8s 1.15 後的性能提升
雲原生生態週報 Vol. 8 | Gartner 發布雲原生趨勢
雲原生生態週報 Vol. 7 | Docker 再爆 CVE
雲原生生態週報 Vol. 6 | KubeCon EU 亮點匯總
雲原生生態週報 Vol. 5 | etcd 性能知多少
雲原生生態週報 Vol.4 | Twitter 從 Mesos 全面轉向 Kubernetes
雲原生生態週報 Vol. 3 | Docker Hub 遭入侵,Java 8 開始提供良好的容器支持
雲原生生態週報 Vol. 2 | Godaddy 開源 KES、CNCF 提供免費云原生課程
雲原生生態週報 Vol. 1 | Google 發布 Cloud Run,開源項目 Kubecost 讓 K8s 花費一目了然

本文轉載自阿里巴巴雲原生微信公眾號(ID:Alicloudnative)。