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

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

來自專欄 KubernetesMeetup 社區7 人贊了文章

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

編輯:夏天

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

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

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 提供附加列的規範。

2. SIG Auth

這次發布周期的工作主要集中在升級現有功能,以及讓用戶理解安全相關功能。

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

  • Authorization 設置`authorization.k8s.io/de` 註解,表示 authorization 決定(allow 或者 forbid),`authorization.k8s.io/re` 註解,顯示為什麼會做這個決定的描述。
  • PodSecurityPolicy admission 設置`podsecuritypolicy.admission.k8s.io` 和 `podsecuritypolicy.admission.k8s.io`註解,包含接納 Pod 的策略名稱。(PodSecurityPolicy 同時可以限制 hostPath volume mounts 為 read-only)

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

3. SIG CLI

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

4. SIG Cluster Lifecycle

這方面主要通過添加一組維護 kubeadm 配置文件的命令來提升 kubeadm 的用戶體驗,API 版本提升到了 v1alpha2。這些命令可以處理配置版本遷移,列印默認配置,並且列出和拉取啟動一個集群需要的容器鏡像。

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

  • CoreDNS 代替 kube-dns 成為默認的 DNS 提供商
  • 提升了用戶環境體驗和支持除 docker 外其他 CRI 運行時
  • 支持了 kubelet 結構化配置

5. SIG Instrumentation

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

6. SIG Network

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

7. SIG Node

Node 方面推動了一些特性開發,並且在一些關鍵主題上做了額外的提升。

動態調整 kubelet 配置特性升級到了 beta,默認啟用,簡化了節點對象的自我管理。配置與 CRI 一起工作的 kubelet 可以使用日誌滾動特性(log rotation feature),該特性將在本版本中升級為 beta 。

cri-tools 項目已經到了 GA 階段,該項目主要為操作人員提供一致的工具,使他們能夠獨立於所選擇的容器運行時對生產中的節點進行調試和檢測。

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

8. SIG OpenStack

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

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

9. SIG Scheduling

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

10. 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。

11. 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]github.com/kubernetes/k

[2] kubernetes.io/docs/tuto

[3] kubernetes.io/docs/setu

[4] kubernetes.io/blog/2018

[5] github.com/nickchase/si


推薦閱讀:

快速了解 kubernetes 的 ConfigMap 和 Secrets
Kubernetes dashboard更新升級和用戶許可權認證
數人云|關於Docker Swarm&K8S,幾大要素免踩坑
容器編排Kubernetes之kube-dns源碼解讀
如何使用 Spinnaker 和 Kubernetes 進行資料庫變更發布?

TAG:Kubernetes | OpenStack |