Kubernetes v1.17 版本解讀 | 雲原生生態週報 Vol. 31

做者 | 徐迪、李傳雲、黃珂、汪萌海、張曉宇、何淋波 、陳有坤、李鵬
審覈 | 陳俊node

上游重要進展

1. Kubernetes v1.17 版本發佈

功能穩定性是第一要務。v1.17 包含 22 個加強功能14 個加強功能已逐漸穩定,4 個加強功能已進入 beta 版,4 個加強功能已進入 alpha 版本git

Major Theme

  • 雲提供商標籤達到 GA

這個自 1.2 版本就引入的 label,在 1.17 版本終於 GA。以前舊的 label 已經被廢棄掉:如下 3 箇舊的 label 已經被廢棄掉了:github

beta.kubernetes.io/instance-type (deprecated) -> node.kubernetes.io/instance-typegolang

failure-domain.beta.kubernetes.io/region  (deprecated) ->  topology.kubernetes.io/regiondocker

failure-domain.beta.kubernetes.io/zone  (deprecated) -> topology.kubernetes.io/zoneapache

  • Volume Snapshot 進入 beta

在 1.12 版本中首次以 v1alpha 版本引入,在 1.13 中升級爲 v2alpha(不兼容 v1alpha 版本),目前在 1.17 版本正式進入 beta 版;windows

從 1.14 開始遷移 alpha。api

特性穩定

將 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 中;

其餘重要特性

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 沒法正常工做的問題。

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

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

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

不少人開始嘗試把業務遷移到 Kubernetes 上,那麼 Kubernetes 到底能帶來哪些改變呢?經過 uSwitch 的這個案例研究,能夠給你帶來不同的思考。

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

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

愈來愈多的人開始使用 Kubernetes,有人說它是下一代的「操做系統」,「雲計算的將來」。快經過這篇文章瞭解下這個大趨勢吧。

阿里巴巴雲原生關注微服務、Serverless、容器、Service Mesh 等技術領域、聚焦雲原生流行技術趨勢、雲原生大規模的落地實踐,作最懂雲原生開發者的技術圈。」
相關文章
相關標籤/搜索