作者 |
徐迪、李傳雲、黃珂、汪萌海、張曉宇、何淋波 、陳有坤、李鵬
稽核 | 陳俊
更多雲原生技術資訊可關注
阿裡巴巴雲原生技術圈 。上遊重要進展
1. Kubernetes v1.17 版本釋出
功能穩定性是第一要務。v1.17 包含 22 個增強功能:14 個增強功能已逐漸穩定,4 個增強功能已進入 beta 版,4 個增強功能已進入 alpha 版本。
Major Theme
- 雲提供商标簽達到 GA
這個自 1.2 版本就引入的 label,在 1.17 版本終于 GA。之前舊的 label 已經被廢棄掉:以下 3 個舊的 label 已經被廢棄掉了:
- Volume Snapshot 進入 beta
在 1.12 版本中首次以 v1alpha 版本引入,在 1.13 中更新為 v2alpha(不相容 v1alpha 版本),目前在 1.17 版本正式進入 beta 版;
從 1.14 開始遷移 alpha。
特性穩定
将 kube-scheduler 所關心的 Node 狀态從 Conditions(例如:OutOfDiskMemoryPressure)轉化到 Taints。Taints 成為 kube-scheduler 判斷 Node 狀态的唯一來源,同時使用者也可以在 Pod 上通過聲明 Tolerations 來容忍排程到有這些 Taints 的節點。
Pod 内所有容器共享 PID Namespace 特性 GA。該特性将友善 Pod 内程序信号傳遞(如 Sidecar 容器中的日志程序完成日志輪轉後,通知業務容器程序使用新的日志)以及 Pod 内僵屍程序回收等。
Damoneset 的 pod 的排程從 daemonset controller 遷移到 kube-scheduler 來做排程,進而支援 PodAffnity、PodAntiAffinit 等能力。
該特性是為了支援排程感覺單個 Node 上可以挂載的 Volume 個數的上限,且每個 Node 的上限可由存儲插件自己動态設定。一般雲廠商提供的雲主機對某些存儲卷(如塊存儲)能挂載的數量有限制,該特性支援排程器在選擇 Node 時排除那些挂載的存儲卷已經超過該 Node 支援的 Maximum Volume Count 的 Node 節點。
通過 CSI 實作的存儲插件支援存儲拓撲排程感覺特性,即可以通過 Pod 被排程到的 Node 對應的拓撲位置資訊(如 Node 所屬的 Region/Zone/Rack 等等)決定動态建立的雲存儲的拓撲位置,也可以通過 StorageClass 限制動态建立的存儲的拓撲位置,還可以通過 Pod 使用的 PV 的拓撲限制決定 Pod 可被排程的 Node 節點。
subPath 用在單個 Pod 多個容器或者一個容器中多個 mountPath 在共享同一個 volume 時以建子目錄的方式在同一個 Volume 上做目錄隔離。而 subPathExpr 字段可以從 Downward API 環境變量構造 subPath 目錄名,可更加靈活地動态生成對應的子目錄名。
Custom Resource 目前缺乏 default 機制,而 default 值對 API 的相容性影響重大。這個功能通過 OpenAPI v3 的校驗機制來為 CRD 添加預設值。
Lease api 進入 GA 階段,kubelet 使用 lease api 周期性彙報心跳,相比 NodeStatus,lease 對象更小,可以降低 kube-apiserver 壓力。
kubernetes-test.tar.gz 之前打包内嵌了各個平台的二進制檔案。現在發行的 Kubernetes-test 包将以平台為機關,分拆成多個包。
kube-apiserver 通過增加 Bookmark 事件通知 watcher 伺服器端目前最新 resourceVersion,可以降低 watcher 重新開機時對 kube-apiserver 造成的壓力。
一緻性測試架構進行修改以支援定義行為測試。行為測試是一組基于經驗,代碼檢查,API 模型為視角的測試定義。而測試本身是具體對行為進行驗證。此功能讓兩者進行分離。
增加 finalizer 去做 Load Balancer 類型的 Service 删除保護,確定 Service 這種資源對象在 Load Balancer 被摘除之後才能被删除。
之前多個用戶端 watch 同一個對象時,需要對同一個對象序列化多次,引入該特性後,同一個對象隻需要序列化一次,在 5000 個節點的測試環境中,可以減少 5% 的 CPU 和 15% 的記憶體消耗。
重要變化
Add IPv4/IPv6 Dual Stack Support添加 IPv4/IPv6 雙協定棧支援。即允許将 IPv4 和 IPv6 位址配置設定給 Pods 和服務。預計會在 1.18 版本對 kube-proxy 支援 IPv4/IPv6 雙協定棧,代碼正在 review 中;
其他重要特性
- Topology Aware Routing of Services (Alpha) : 即讓 Service 可以實作就近轉發,比如同節點、同 AZ、同 Region 等等;
- RunAsUserName for Windows :增強 windows 容器的安全性,通過 feature gate 開啟。1.16 版本 alpha 功能引入,在 1.17 已經變成 beta 版本(預設自動開啟)。
2. Knative變更
目前第一次啟動時總是啟動一個,用來檢查使用者代碼是否正常工作,但在某些場景下不想啟動任何執行個體。建議實作一個全局配置,并且可以在 revision 級别覆寫配置,如果不啟動執行個體,則馬上把狀态設定為 ready,如果有流量過來按冷啟動流程啟動執行個體。
還沒有足夠的理由添加這些屬性。
從 Broker/Trigger 模型中删除 ingress channel。目前 Broker 會建立 2 個 channels: trigger 和 ingress. ingress channel 用于接收 trigger 的響應結果,然後發送給 ingress service. 但是目前看起來是額外的多了一跳,引入了延遲和可靠性的問題,比較好的方式是直接将響應結果發送給 ingress service.
開源項目推薦
dive
一個 docker image 分析工具,幫助快速分析各 layer 的内容,有助于減小整個鏡像的大小。
2. amazon-vpc-cni-k8s
aws 上基于 ENI 的網絡插件。
3. Draino
負責 cordon 和 drain 節點,提供了 dry run 模式。
4. Apache Dubbo-go
dubbo 的 golang 實作。
本周閱讀推薦
文章主要講述了如何去定位一個 deployment 無法正常工作的問題。
本文提出了一種 Kubernetes 自動化審計日志分析器的願景,但這一願景遠不止于此。使用機器學習之類的工具甚至可以實時地自動檢測日志中潛在的威脅。此外,以使用者可了解的方式彙總稽核日志中的資訊,使稽核員可以快速驗證已識别的模式,并幫助調查其他隐藏的可疑活動。
很多人開始嘗試把業務遷移到 Kubernetes 上,那麼 Kubernetes 到底能帶來哪些改變呢?通過 uSwitch 的這個案例研究,可以給你帶來不一樣的思考。
- 《Building Large Kubernetes Clusters》
- 随着叢集越來越多,叢集的搭建和管理是個很頭疼的問題。LINE 分享了自研的一套架構 Caravan。
- 《Kubernetes is the future of Computing. What You Should Know About the New Trend》
越來越多的人開始使用 Kubernetes,有人說它是下一代的“作業系統”,“雲計算的未來”。快通過這篇文章了解下這個大趨勢吧。
“ 阿裡巴巴雲原生 關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的技術圈。”