K8S 1.11 重磅發佈| 全面解讀 11 個重大功能更新

技術翻譯/評論:任我行、法師一枚,星空下的文仔node

編輯:夏天git

6 月 27 日,Kubernetes 2018 年的第二個版本 Kubernetes 1.11 正式發佈,繼續推進 Kubernetes 走向成熟。Kubernetes 1.11 的可擴展性和靈活性更強,飽含着技術團隊過去一年中在功能上做出的巨大努力。Kubernetes 1.11 加強了網絡方面的主要功能,爲 SIG-API Machinery 和 SIG-Node 提供了兩個主要功能用於 beta 測試,持續加強過去兩個版本關注的存儲功能。Kubernetes 1.11 功能的更新爲任何基礎架構,雲或內部部署都能嵌入到 Kubernetes 系統中增添了更多可能性。github

在新版本發佈的第一時間,K8sMeetup 中國社區邀請了一線研發工程師對 GitHub 權威 Release Notes 和 Kubernetes.io 版本發佈文章進行技術解讀和評論,但願能爲你們使用 Kubernetes 帶來一些有益參考。docker

Release Note 11 個重要更新編程

  1. SIG API Machinery

這次發佈,SIG API Machinery 主要集中在 CustomResoures 方面。好比,CustomResources 的子資源如今進入 beta 版本,而且默認開啓。根據這個變化, 對 /status 子資源的更新不容許修改除了 .status 外的全部其餘字段(不像之前那樣只容許對 .spec 和 .metadata 進行更新)。還有,在 /status 子資源 enable 的狀況下, Required 和 Description 可用在 CRD OpenAPI 驗證模式的根上。 另外,用戶能夠建立多版本的 CustomResourceDefinitions,可是不須要任何類型的自動轉換,並且 CustomResourceDefinitions 如今容許經過 spec.additionalPrinterColumns 字段爲 kubectl 提供附加列的規範。安全

  1. SIG Auth

此次發佈週期的工做主要集中在升級現有功能,以及讓用戶理解安全相關功能。服務器

1.9 版本引進的 RBAC,在這裏升級爲穩定版本, client-go credential plugins 也升級爲 beta 版本,同時支持從外部插件獲取 TLS 資格證書。Kubernetes 1.11 更容易看到事件信息,由於 API 請求信息的處理狀況能夠添加到 audit events 上了。網絡

Authorization 設置authorization.k8s.io/decision 註解,表示 authorization 決定(allow 或者 forbid),authorization.k8s.io/reason 註解,顯示爲何會作這個決定的描述。架構

PodSecurityPolicy admission 設置podsecuritypolicy.admission.k8s.io/admit-policypodsecuritypolicy.admission.k8s.io/validate-policy註解,包含接納 Pod 的策略名稱。(PodSecurityPolicy 同時能夠限制 hostPath volume mounts 爲 read-only)負載均衡

另外, NodeRestriction admission 插件阻止 kubelet 修改 Node API object 的 taints,這讓咱們更容易追蹤那些正在被使用的 Node。

  1. SIG CLI

SIG CLI 主要重構了 kubectl 內部結構,提高了 kubectl 命令行的可組合性,可讀性和可測性。這些重構將使團隊可以在下一個版本中提取出一種實現 kubectl (即插件)的可擴展性的機制。

  1. SIG Cluster Lifecycle 這方面主要經過添加一組維護 kubeadm 配置文件的命令來提高 kubeadm 的用戶體驗,API 版本提高到了v1alpha2。這些命令能夠處理配置版本遷移,打印默認配置,而且列出和拉取啓動一個集羣須要的容器鏡像。

其餘幾個值得注意的變化:

CoreDNS 代替 kube-dns 成爲默認的 DNS 提供商

提高了用戶環境體驗和支持除 docker 外其餘 CRI 運行時

支持了 kubelet 結構化配置

  1. SIG Instrumentation

Kubernetes 1.11 版本中採用新的 Kubernetes 監控模型,棄用 Heapster。仍在使用 Heapster 作自動彈性伸縮的集羣應該遷移到 metrics-server 和 custom metrics API。

  1. SIG Network

這次發佈中網絡部分重要的里程碑是基於 IPVS 的負載均衡和 CoreDNS 升級爲 GA。IPVS 是一個集羣內部,使用內核哈希表(in-kernel hash tables)的負載均衡的方案,替代先前的 iptables。 CoreDNS 是替代原來的 kube-dns 來作服務發現。

  1. SIG Node

Node 方面推進了一些特性開發,而且在一些關鍵主題上作了額外的提高。 動態調整 kubelet 配置特性升級到了 beta,默認啓用,簡化了節點對象的自我管理。配置與 CRI 一塊兒工做的 kubelet 可使用日誌滾動特性(log rotation feature),該特性將在本版本中升級爲 beta 。cri-tools 項目已經到了 GA 階段,該項目主要爲操做人員提供一致的工具,使他們可以獨立於所選擇的容器運行時對生產中的節點進行調試和檢測。

平臺方面,和 SIG-Windows 配合,kubelet 在 Windows 系統下的支持獲得了很大的提高,資源管理方面也作了一些提高。特別是在 Linux 下支持 sysctls 的功能已進入 beta 階段。

  1. SIG OpenStack

SIG OpenStack 在繼續完善測試,其中 11 個驗收測試涵蓋了普遍的場景和用例。在 1.11 版本週期中,咱們給 test-grid 的報告已經將 OpenStack cloud provider 限定爲 Kubernetes 版本發佈的一個門控任務。

新功能包括改進 Keystone 服務和 Kubernetes RBAC 之間的集成,以及整個提供商代碼庫中的許多穩定性和兼容性改進。

  1. SIG Scheduling

Pod 優先級和搶佔升級到了 Beta,默認啓用。注意這個功能變化對運維特別重要。團隊一樣在努力提高 scheduler 的性能和可靠性。

  1. SIG Storage

存儲方面升級了之前版本的兩個特性,同時引入了三個 alpha 版本的新特性。

StorageProtection feature:阻止刪除那些正在被 Pod 使用的 PVC,以及已經綁定到 PVC 上面的 PV,如今這個 feature 已經 GA。

Volume resizing feature:容許在 Pod 重啓的時候對 volume 進行擴容,如今是 beta,默認是打開狀態。

新的 alpha 特性包括:

Onlize volume resizing: 不用重啓 Pod 的狀況下,支持對 fs 進行擴容;

Dynamic max volume per node count: 限制每一個節點的最大 attached volume 個數(僅限:AWS EBS 和 GCE PD);

Provide environment variables expansion in sub path mount: 支持用 Downward API 環境變量建立 Subpath volume derectories。

  1. SIG Windows

此版本支持更多用於 Windows 上的 Pod 和 container 的 Kubernetes API,其中包括:

Pod,Container,日誌文件系統的監控信息;

run_as_user 安全文本;

Azure 磁盤的本地持久化卷和 fstype。

Windows Server 1803 版的改進還爲 Kubernetes v1.11 帶來了新的存儲功能,其中包括:

ConfigMap 和 Secret 的卷掛載

SMB 和 iSCSI 存儲的 Flexvolume 插件也能夠在外部的 Microsoft/K8s-Storage-Plugins 項目中找到。

關鍵功能更新

值得注意的是,新版本中兩個備受期待的功能進入了 GA 階段,即:基於 IPVS 的集羣內負載均衡和 CoreDNS 做爲集羣 DNS 附加選項,這意味着增長了生產應用程序的可擴展性和靈活性。接下來讓咱們深刻了解 Kubernetes 1.11 的一些關鍵功能。

基於 IPVS 的集羣內服務負載均衡進入到 GA 階段

新版本中,基於 IPVS 的集羣內服務負載均衡功能已趨於穩定。IPVS(IP 虛擬服務器)提供了高性能的內核內負載均衡,其編程接口比 iptables 更簡單。這個改變爲集羣範圍內包含 Kubernetes Service 模型的分佈式負載均衡提供了更好的網絡吞吐,更好的編程延遲和更好的擴展性。IPVS 還不是默認設置,但集羣能夠在產品流量中使用。

CoreDNS 進入 GA 階段

CoreDNS 如今可用做集羣 DNS 附加選項,在使用 kubeadm 時是默認選項。CoreDNS 是一個靈活的,可擴展的權威 DNS 服務器,並集成在 Kubernetes API 中。CoreDNS 比之前的 DNS 服務器擁有更少的移動部件,由於它是單可執行文件和單進程,而且經過建立自定義 DNS 條目來支持靈活的用例。它也是用 Go 語言編寫的,具備內存安全性。

動態 Kubelet 配置升級到 Beta 階段

經過此功能,能夠在運行的集羣中部署新的 Kubelet 配置。目前,Kubelet 能夠經過命令行標誌進行配置,這使得更新正在運行的集羣中的 Kubelet 配置變得困難。藉助此 beta 功能,用戶能夠經過 API server 在運行的羣集中配置 Kubelet 。

CustomResourceDefinitions 如今能夠定義多個版本

CustomResourceDefinitions再也不侷限於定義單一版本的自定義資源,這是一項難以解決的限制。如今,利用此測試版功能,能夠定義資源的多個版本。在將來,這將擴大到支持一些自動轉換; 目前,此功能容許自定義資源做者「以安全更改進行升級,例如 v1beta1 到 v1」,併爲有變化的資源建立遷移路徑。

CustomResourceDefinitions 如今支持 「status」 和 「scale」 子資源,這些子資源與監控和高可用性框架相集成。這兩項更改提升了使用 CustomResourceDefinitions 在生產中運行雲原生應用程序的能力。

CSI 的加強

容器存儲接口(CSI)在過去幾個版本中一直是一個主要問題。在 1.10 版本發佈以後,1.11 版本繼續加強 CSI 功能。1.11 版本將原始塊卷的 alpha 支持添加到 CSI,將 CSI 與新的 kubelet 插件註冊機制集成在一塊兒,而且更容易將密鑰傳遞給 CSI 插件。

新的存儲功能

支持在線調整 Persistent Volume 的大小已被引入做爲 alpha 功能。這使用戶能夠增長 PV 的大小,而無需先終止 Pod 並卸載卷。用戶將更新 PVC 以請求新的尺寸,kubelet 將調整 PVC 的文件系統尺寸。

做爲 alpha 功能引入了對動態最大卷計數的支持。此新功能使 in-tree 卷插件可以指定能夠附加到節點的最大卷數,並容許限制因節點類型而異。之前,這些限制是經過硬編碼或經過環境變量進行配置的。

StorageObjectInUseProtection 特性如今很穩定,能夠防止刪除綁定到 PVC 的 PV,以及 Pod 使用的 PVC。這一保護措施將有助於防止刪除當前綁定到活躍 Pod 的 PV 或 PVC 的問題。

正式上線

Kubernetes 1.11 目前已經可經過 GitHub 進行下載 [1]。要開始使用 Kubernetes,請點擊此處 [2] 參閱相關交互式教程。您也能夠利用 Kubeadm 安裝 1.11 版本。1.11.0 版本將以 Deb 與 RPM 軟件包的形式提供,並於 6 月 28 日經過 Kubeadm 集羣安裝器進行安裝 [3]。

新版本技術評論

「K8sMeetup 中國社區」特別邀請 Caicloud(才雲科技) 工程師,第一時間爲 Kubernetes 1.11 作了一個簡短評論:

Kubernetes 1.11 版本一樣是在穩定性,擴展性以及靈活性方面作了不少努力,也取得了不小的成果。好比存儲方面,存儲的一大發展趨勢就是解耦,把存儲提供者相關的邏輯移除出去,讓 Kubernetes 更加純淨。因此在 1.10 中升級爲 beta 的 CSI 特性無疑是如今以及之後存儲的重點。

Kubernetes 1.11 中,存儲團隊也對 CSI 特性作了不少增強,好比:支持 raw block device(alpha),優化註冊機制,以及簡化 Secrets 傳遞等。使得 CSI 更加成熟穩定,爲下半年的 GA 作準備。存儲團隊也對其餘特性作了一些加強,好比:PVC resize feature 升級爲 beta,同時也引入了 online resize feature,還有 snapshot 的 CSI 支持,Storage protection 特性升級爲 GA 等等,讓 Kubernetes 的存儲更加好用。與此同時,咱們(Caicloud)發現 Kubernetes 的存儲監控還有待增強,這個發佈週期也在設計相關功能,將會在下半年把它推動到社區。

其餘方面一樣有不少重要的更新,好比:節點管理方面,動態調整 kubelet 配置特性升級到了 beta,優化 kubelet 管理;調度方面,Pod 優先級和搶佔升級到了 Beta,爲優化資源管理,提升資源利用率,簡化運維等提供了更大的可能性;網絡方面,基於 IPVS 的 LB 以及 CoreDNS 都升級爲 GA。API 方面,CRD 功能也作了加強…… 在各個公司的貢獻下,Kubernetes 1.11 版本在原來的基礎上有了很大的提高。咱們(Caicloud)也會持續對它進行貢獻,歡迎關注。

參考文獻:

[1]https://github.com/kubernetes/kubernetes/releases/tag/v1.11.0

[2] https://kubernetes.io/docs/tutorials/

[3] https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

[4] https://kubernetes.io/blog/2018/06/27/kubernetes-1.11-release-announcement/

[5] https://github.com/nickchase/sig-release/blob/2c0bb1622dc2c69a72de0390e1ff0cd05321cf0c/releases/release-1.11/release_notes_draft.md

相關文章
相關標籤/搜索