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 版;

從 1.14 開始遷移 alpha。

特性穩定

將 kube-scheduler  所關心的 Node 狀態從 Conditions(例如:OutOfDisk\MemoryPressure)轉化到 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 中;

其他重要特性

2. Knative變更

目前第一次啓動時總是啓動一個,用來檢查用戶代碼是否正常工作,但在某些場景下不想啓動任何實例。建議實現一個全局配置,並且可以在 revision 級別覆蓋配置,如果不啓動實例,則馬上把狀態設置爲 ready,如果有流量過來按冷啓動流程啓動實例。

還沒有足夠的理由添加這些屬性。

從 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 實現。

本週閱讀推薦

  1. 《A visual guide on troubleshooting Kubernetes deployments》

文章主要講述瞭如何去定位一個 deployment 無法正常工作的問題。

  1. 《Kubernetes Audit: Making Log Auditing a Viable Practice Again》

本文提出了一種 Kubernetes 自動化審計日誌分析器的願景,但這一願景遠不止於此。使用機器學習之類的工具甚至可以實時地自動檢測日誌中潛在的威脅。此外,以用戶可理解的方式彙總審覈日誌中的信息,使審覈員可以快速驗證已識別的模式,並幫助調查其他隱藏的可疑活動。

  1. 《How Kubernetes Has Been "Transformational"  to Productivity and Culture at uSwitch》

很多人開始嘗試把業務遷移到 Kubernetes 上,那麼 Kubernetes 到底能帶來哪些改變呢?通過 uSwitch 的這個案例研究,可以給你帶來不一樣的思考。

  1. 《Building Large Kubernetes Clusters》
    隨着集羣越來越多,集羣的搭建和管理是個很頭疼的問題。LINE 分享了自研的一套框架 Caravan。

  2. 《Kubernetes is the future of Computing. What You Should Know About the New Trend》

越來越多的人開始使用 Kubernetes,有人說它是下一代的“操作系統”,“雲計算的未來”。快通過這篇文章瞭解下這個大趨勢吧。

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

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