Kubernetes v1.17 版本解讀 | 雲原生生態週報 Vol. 31
作者 | 徐迪、李傳雲、黃珂、汪萌海、張曉宇、何淋波 、陳有坤、李鵬
稽核 | 陳俊
上游重要進展
1. Kubernetes v1.17 版本釋出
功能穩定性是第一要務。v1.17 包含 22 個增強功能:14 個增強功能已逐漸穩定,4 個增強功能已進入 beta 版,4 個增強功能已進入 alpha 版本。
Major Theme
- 雲提供商標籤達到 GA
這個自 1.2 版本就引入的 label,在 1.17 版本終於 GA。之前舊的 label 已經被廢棄掉:以下 3 箇舊的 label 已經被廢棄掉了:
beta.kubernetes.io/instance-type
(deprecated) -> node.kubernetes.io/instance-type
failure-domain.beta.kubernetes.io/region
(deprecated) -> topology.kubernetes.io/region
failure-domain.beta.kubernetes.io/zone
(deprecated) -> topology.kubernetes.io/zone
- Volume Snapshot 進入 beta
在 1.12 版本中首次以 v1alpha 版本引入,在 1.13 中升級為 v2alpha(不相容 v1alpha 版本),目前在 1.17 版本正式進入 beta 版;
- in-tree 儲存外掛遷移到 CSI 已是 beta
從 1.14 開始遷移 alpha。
特性穩定
- Taint Node by Condition GA
將 kube-scheduler 所關心的 Node 狀態從 Conditions(例如:OutOfDisk\MemoryPressure)轉化到 Taints。Taints 成為 kube-scheduler 判斷 Node 狀態的唯一來源,同時使用者也可以在 Pod 上通過宣告 Tolerations 來容忍排程到有這些 Taints 的節點。
- Configurable Pod Process Namespace Sharing
Pod 內所有容器共享 PID Namespace 特性 GA。該特性將方便 Pod 內程序訊號傳遞(如 Sidecar 容器中的日誌程序完成日誌輪轉後,通知業務容器程序使用新的日誌)以及 Pod 內殭屍程序回收等。
- ScheduleDaemonSet Pods by kube-scheduler
Damoneset 的 pod 的排程從 daemonset controller 遷移到 kube-scheduler 來做排程,從而支援 PodAffnity、PodAntiAffinit 等能力。
- DynamicMaximum Volume Count
該特性是為了支援排程感知單個 Node 上可以掛載的 Volume 個數的上限,且每個 Node 的上限可由儲存外掛自己動態設定。一般雲廠商提供的雲主機對某些儲存卷(如塊儲存)能掛載的數量有限制,該特性支援排程器在選擇 Node 時排除那些掛載的儲存卷已經超過該 Node 支援的 Maximum Volume Count 的 Node 節點。
- KubernetesCSI Topology Support
通過 CSI 實現的儲存外掛支援儲存拓撲排程感知特性,即可以通過 Pod 被排程到的 Node 對應的拓撲位置資訊(如 Node 所屬的 Region/Zone/Rack 等等)決定動態建立的雲端儲存的拓撲位置,也可以通過 StorageClass 限制動態建立的儲存的拓撲位置,還可以通過 Pod 使用的 PV 的拓撲限制決定 Pod 可被排程的 Node 節點。
- Provide Environment Variables Expansion in SubPathMount
subPath 用在單個 Pod 多個容器或者一個容器中多個 mountPath 在共享同一個 volume 時以建子目錄的方式在同一個 Volume 上做目錄隔離。而 subPathExpr 欄位可以從 Downward API 環境變數構造 subPath 目錄名,可更加靈活地動態生成對應的子目錄名。
- Defaulting of Custom Resources
Custom Resource 目前缺乏 default 機制,而 default 值對 API 的相容性影響重大。這個功能通過 OpenAPI v3 的校驗機制來為 CRD 新增預設值。
- Move Frequent Kubelet Heartbeats To Lease Api
Lease api 進入 GA 階段,kubelet 使用 lease api 週期性彙報心跳,相比 NodeStatus,lease 物件更小,可以降低 kube-apiserver 壓力。
- Break Apart The Kubernetes Test Tarball
kubernetes-test.tar.gz 之前打包內嵌了各個平臺的二進位制檔案。現在發行的 Kubernetes-test 包將以平臺為單位,分拆成多個包。
- Watch Bookmarks GA
kube-apiserver 通過增加 Bookmark 事件通知 watcher 伺服器端當前最新 resourceVersion,可以降低 watcher 重啟時對 kube-apiserver 造成的壓力。
- Behavior-Driven Conformance Testing
一致性測試框架進行修改以支援定義行為測試。行為測試是一組基於經驗,程式碼檢查,API 模型為視角的測試定義。而測試本身是具體對行為進行驗證。此功能讓兩者進行分離。
- Finalizer Protection For Service Loadbalancers
增加 finalizer 去做 Load Balancer 型別的 Service 刪除保護,確保 Service 這種資源物件在 Load Balancer 被摘除之後才能被刪除。
- Avoid Serializing The Same Object Independently ForEvery Watcher
之前多個客戶端 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,如果有流量過來按冷啟動流程啟動例項。
- 想在 revision 中新增 dnsPolicy 和 runtimeClassName
還沒有足夠的理由新增這些屬性。
- proposal to delete ingress channel
從 Broker/Trigger 模型中刪除 ingress channel。當前 Broker 會建立 2 個 channels: trigger 和 ingress. ingress channel 用於接收 trigger 的響應結果,然後傳送給 ingress service. 但是目前看起來是額外的多了一跳,引入了延遲和可靠性的問題,比較好的方式是直接將響應結果傳送給 ingress service.
開源專案推薦
1. dive
一個 docker image 分析工具,幫助快速分析各 layer 的內容,有助於減小整個映象的大小。
2. amazon-vpc-cni-k8s
aws 上基於 ENI 的網路外掛。
3. Draino
負責 cordon 和 drain 節點,提供了 dry run 模式。
4. Apache Dubbo-go
dubbo 的 golang 實現。
本週閱讀推薦
- 《A visual guide on troubleshooting Kubernetes deployments》
文章主要講述瞭如何去定位一個 deployment 無法正常工作的問題。
- 《Kubernetes Audit: Making Log Auditing a Viable Practice Again》
本文提出了一種 Kubernetes 自動化審計日誌分析器的願景,但這一願景遠不止於此。使用機器學習之類的工具甚至可以實時地自動檢測日誌中潛在的威脅。此外,以使用者可理解的方式彙總稽核日誌中的資訊,使稽核員可以快速驗證已識別的模式,並幫助調查其他隱藏的可疑活動。
- 《How Kubernetes Has Been "Transformational" to Productivity and Culture at uSwitch》
很多人開始嘗試把業務遷移到 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 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,做最懂雲原生開發者的技術圈。”