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 實現。
本周閱讀推薦
文章主要講述了如何去定位一個 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 等技術領域、聚焦云原生流行技術趨勢、云原生大規模的落地實踐,做最懂云原生開發者的技術圈。”
總結
以上是生活随笔為你收集整理的Kubernetes v1.17 版本解读 | 云原生生态周报 Vol. 31的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开放下载 | 《Knative 云原生应
- 下一篇: 阿里云叔同:以容器为代表的云原生技术,已