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