Categories
程式開發

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


前言

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

上游重要進展

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(例如: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,有人說它是下一代的“操作系統”,“雲計算的未來”。快通過這篇文章了解下這個大趨勢吧。

相關閱讀

雲原生生態週報 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),作者:徐迪、李傳云、黃珂、汪萌海、張曉宇、何淋波 、陳有坤、李鵬。