Kubernetes v1.17 版本解读 | 云原生生态周报 Vol. 31
作者 | 徐迪、李傳云、黃珂、汪萌海、張曉宇、何淋波 、陳有坤、李鵬
審核 | 陳俊
上游重要進展
1. Kubernetes v1.17 版本發(fā)布
功能穩(wěn)定性是第一要務(wù)。v1.17 包含 22 個增強功能:14 個增強功能已逐漸穩(wěn)定,4 個增強功能已進入 beta 版,4 個增強功能已進入 alpha 版本。
Major Theme
- 云提供商標(biāo)簽達到 GA
這個自 1.2 版本就引入的 label,在 1.17 版本終于 GA。之前舊的 label 已經(jīng)被廢棄掉:以下 3 個舊的 label 已經(jīng)被廢棄掉了:
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。
特性穩(wěn)定
- Taint Node by Condition GA
將 kube-scheduler 所關(guān)心的 Node 狀態(tài)從 Conditions(例如:OutOfDisk\MemoryPressure)轉(zhuǎn)化到 Taints。Taints 成為 kube-scheduler 判斷 Node 狀態(tài)的唯一來源,同時用戶也可以在 Pod 上通過聲明 Tolerations 來容忍調(diào)度到有這些 Taints 的節(jié)點。
- Configurable Pod Process Namespace Sharing
Pod 內(nèi)所有容器共享 PID Namespace 特性 GA。該特性將方便 Pod 內(nèi)進程信號傳遞(如 Sidecar 容器中的日志進程完成日志輪轉(zhuǎn)后,通知業(yè)務(wù)容器進程使用新的日志)以及 Pod 內(nèi)僵尸進程回收等。
- ScheduleDaemonSet Pods by kube-scheduler
Damoneset 的 pod 的調(diào)度從 daemonset controller 遷移到 kube-scheduler 來做調(diào)度,從而支持 PodAffnity、PodAntiAffinit 等能力。
- DynamicMaximum Volume Count
該特性是為了支持調(diào)度感知單個 Node 上可以掛載的 Volume 個數(shù)的上限,且每個 Node 的上限可由存儲插件自己動態(tài)設(shè)置。一般云廠商提供的云主機對某些存儲卷(如塊存儲)能掛載的數(shù)量有限制,該特性支持調(diào)度器在選擇 Node 時排除那些掛載的存儲卷已經(jīng)超過該 Node 支持的 Maximum Volume Count 的 Node 節(jié)點。
- KubernetesCSI Topology Support
通過 CSI 實現(xiàn)的存儲插件支持存儲拓?fù)湔{(diào)度感知特性,即可以通過 Pod 被調(diào)度到的 Node 對應(yīng)的拓?fù)湮恢眯畔?如 Node 所屬的 Region/Zone/Rack 等等)決定動態(tài)創(chuàng)建的云存儲的拓?fù)湮恢?#xff0c;也可以通過 StorageClass 限制動態(tài)創(chuàng)建的存儲的拓?fù)湮恢?#xff0c;還可以通過 Pod 使用的 PV 的拓?fù)湎拗茮Q定 Pod 可被調(diào)度的 Node 節(jié)點。
- Provide Environment Variables Expansion in SubPathMount
subPath 用在單個 Pod 多個容器或者一個容器中多個 mountPath 在共享同一個 volume 時以建子目錄的方式在同一個 Volume 上做目錄隔離。而 subPathExpr 字段可以從 Downward API 環(huán)境變量構(gòu)造 subPath 目錄名,可更加靈活地動態(tài)生成對應(yīng)的子目錄名。
- Defaulting of Custom Resources
Custom Resource 目前缺乏 default 機制,而 default 值對 API 的兼容性影響重大。這個功能通過 OpenAPI v3 的校驗機制來為 CRD 添加默認(rèn)值。
- 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 之前打包內(nèi)嵌了各個平臺的二進制文件?,F(xiàn)在發(fā)行的 Kubernetes-test 包將以平臺為單位,分拆成多個包。
- Watch Bookmarks GA
kube-apiserver 通過增加 Bookmark 事件通知 watcher 服務(wù)器端當(dāng)前最新 resourceVersion,可以降低 watcher 重啟時對 kube-apiserver 造成的壓力。
- Behavior-Driven Conformance Testing
一致性測試框架進行修改以支持定義行為測試。行為測試是一組基于經(jīng)驗,代碼檢查,API 模型為視角的測試定義。而測試本身是具體對行為進行驗證。此功能讓兩者進行分離。
- Finalizer Protection For Service Loadbalancers
增加 finalizer 去做 Load Balancer 類型的 Service 刪除保護,確保 Service 這種資源對象在 Load Balancer 被摘除之后才能被刪除。
- Avoid Serializing The Same Object Independently ForEvery Watcher
之前多個客戶端 watch 同一個對象時,需要對同一個對象序列化多次,引入該特性后,同一個對象只需要序列化一次,在 5000 個節(jié)點的測試環(huán)境中,可以減少 5% 的 CPU 和 15% 的內(nèi)存消耗。
重要變化
Add IPv4/IPv6 Dual Stack Support 添加 IPv4/IPv6 雙協(xié)議棧支持。即允許將 IPv4 和 IPv6 地址分配給 Pods 和服務(wù)。預(yù)計會在 1.18 版本對 kube-proxy 支持 IPv4/IPv6 雙協(xié)議棧,代碼正在 review 中;
其他重要特性
- Topology Aware Routing of Services (Alpha): 即讓 Service 可以實現(xiàn)就近轉(zhuǎn)發(fā),比如同節(jié)點、同 AZ、同 Region 等等;
- RunAsUserName for Windows:增強 windows 容器的安全性,通過 feature gate 開啟。1.16 版本 alpha 功能引入,在 1.17 已經(jīng)變成 beta 版本(默認(rèn)自動開啟)。
2. Knative變更
- 安裝后不啟動實例
目前第一次啟動時總是啟動一個,用來檢查用戶代碼是否正常工作,但在某些場景下不想啟動任何實例。建議實現(xiàn)一個全局配置,并且可以在 revision 級別覆蓋配置,如果不啟動實例,則馬上把狀態(tài)設(shè)置為 ready,如果有流量過來按冷啟動流程啟動實例。
- 想在 revision 中添加 dnsPolicy 和 runtimeClassName
還沒有足夠的理由添加這些屬性。
- proposal to delete ingress channel
從 Broker/Trigger 模型中刪除 ingress channel。當(dāng)前 Broker 會創(chuàng)建 2 個 channels: trigger 和 ingress. ingress channel 用于接收 trigger 的響應(yīng)結(jié)果,然后發(fā)送給 ingress service. 但是目前看起來是額外的多了一跳,引入了延遲和可靠性的問題,比較好的方式是直接將響應(yīng)結(jié)果發(fā)送給 ingress service.
開源項目推薦
1. dive
一個 docker image 分析工具,幫助快速分析各 layer 的內(nèi)容,有助于減小整個鏡像的大小。
2. amazon-vpc-cni-k8s
aws 上基于 ENI 的網(wǎng)絡(luò)插件。
3. Draino
負(fù)責(zé) cordon 和 drain 節(jié)點,提供了 dry run 模式。
4. Apache Dubbo-go
dubbo 的 golang 實現(xiàn)。
本周閱讀推薦
文章主要講述了如何去定位一個 deployment 無法正常工作的問題。
本文提出了一種 Kubernetes 自動化審計日志分析器的愿景,但這一愿景遠不止于此。使用機器學(xué)習(xí)之類的工具甚至可以實時地自動檢測日志中潛在的威脅。此外,以用戶可理解的方式匯總審核日志中的信息,使審核員可以快速驗證已識別的模式,并幫助調(diào)查其他隱藏的可疑活動。
很多人開始嘗試把業(yè)務(wù)遷移到 Kubernetes 上,那么 Kubernetes 到底能帶來哪些改變呢?通過 uSwitch 的這個案例研究,可以給你帶來不一樣的思考。
《Building Large Kubernetes Clusters》
隨著集群越來越多,集群的搭建和管理是個很頭疼的問題。LINE 分享了自研的一套框架 Caravan。
《Kubernetes is the future of Computing. What You Should Know About the New Trend》
越來越多的人開始使用 Kubernetes,有人說它是下一代的“操作系統(tǒng)”,“云計算的未來”??焱ㄟ^這篇文章了解下這個大趨勢吧。
“阿里巴巴云原生關(guān)注微服務(wù)、Serverless、容器、Service Mesh 等技術(shù)領(lǐng)域、聚焦云原生流行技術(shù)趨勢、云原生大規(guī)模的落地實踐,做最懂云原生開發(fā)者的技術(shù)圈。”
總結(jié)
以上是生活随笔為你收集整理的Kubernetes v1.17 版本解读 | 云原生生态周报 Vol. 31的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开放下载 | 《Knative 云原生应
- 下一篇: 阿里云叔同:以容器为代表的云原生技术,已