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

K8sMeetup中國發表於2019-03-02

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

編輯:夏天

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

  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

相關文章