Kubernetes 1.15:可擴充套件性和持續改進
我們很高興地宣佈釋出 Kubernetes 1.15,這是我們 2019 年的第二個版本!Kubernetes 1.15 包含 25 項增強功能:2 項進入穩定版,13 項進入 Beta 版,10 項進入 Alpha 版。此版本的主要主題是:
- 持續改進
- 專案的可持續性不僅僅是功能。許多 SIG 都在努力改進測試覆蓋率,確保基礎功能保持可靠,核心功能集的穩定性,並致力於完善現有功能和清理積壓工作。
- 可擴充套件性
- 社群一直在要求持續支援可擴充套件性,因此本週期圍繞 CRD 和 API Machinery 展開了更多工作。本週期的大部分增強功能都來自 SIG API Machinery 及相關領域。
讓我們深入瞭解此版本的主要功能
核心 Kubernetes API 周圍的可擴充套件性
CustomResourceDefinitions 新開發的主題是資料一致性和原生行為。使用者不應該注意到互動是與 CustomResource 還是與 Golang 原生資源進行的。我們正在大步邁向 CRD 的 GA 版本以及未來版本中准入 Webhook 的 GA。
在此方向上,我們重新思考了 CRD 中基於 OpenAPI 的驗證模式,從 1.15 開始,我們根據一個名為“結構化模式”的限制檢查每個模式。這基本上強制 CustomResource 中每個欄位的非多型和完整型別。我們將來將要求結構化模式,特別是對於下面列出的所有新功能,並在 `NonStructural` 條件中列出違規。非結構化模式暫時在 v1beta1 API 組中繼續工作。但所有重要的 CRD 應用程式都應在可預見的將來遷移到結構化模式。
關於構成結構化模式的詳細資訊將於本週晚些時候在 kubernetes.io 的部落格文章中釋出,當然,它也在 Kubernetes 文件中有所記錄。
Beta:CustomResourceDefinition Webhook 轉換
自 1.14 以來,CustomResourceDefinitions 以 Beta 形式支援多個版本。在 Kubernetes 1.15 中,它們獲得了在不同版本之間即時轉換的能力,就像使用者長期以來習慣的原生資源一樣。CRD 的轉換透過 Webhook 實現,由叢集管理員部署在叢集內部。此功能在 Kubernetes 1.15 中升級為 Beta 版,將 CRD 提升到全新的水平,適用於重要的 CRD 應用程式。
Beta:CustomResourceDefinition OpenAPI 釋出
kube-apiserver 長期以來一直透過 `/openapi/v2` 提供原生型別的 OpenAPI 規範,並且它們被許多元件使用,特別是 kubectl 客戶端驗證、kubectl explain 和基於 OpenAPI 的客戶端生成器。
CRD 的 OpenAPI 釋出將在 Kubernetes 1.15 中作為 Beta 版提供,但仍然僅適用於結構化模式。
Beta:CustomResourceDefinitions 剪枝
剪枝是自動移除傳送到 Kubernetes API 的物件中未知欄位的功能。如果欄位未在 OpenAPI 驗證模式中指定,則該欄位是未知的。這既是資料一致性功能,也與安全性相關。它強制只有 CRD 開發者指定的資料結構才能持久化到 etcd。這是原生資源的行為,也將適用於 CRD,從 Kubernetes 1.15 開始作為 Beta 版提供。
剪枝透過 CustomResourceDefinition 中的 `spec.preserveUnknownFields: false` 啟用。未來的 apiextensions.k8s.io/v1 版本的 CRD 將強制執行剪枝(可能需要但明確必須選擇退出)。
剪枝要求 CRD 開發者提供完整、結構化的驗證模式,可以是頂層模式,也可以是 CRD 所有版本的模式。
Alpha:CustomResourceDefinition 預設值
CustomResourceDefinitions 獲得預設值支援。預設值使用 OpenAPI 驗證模式中的 `default` 關鍵字指定。預設值會在傳送到 API 的物件中未指定欄位時設定,以及從 etcd 讀取時設定。
預設值將在 Kubernetes 1.15 中作為結構化模式的 Alpha 版提供。
Beta:准入 Webhook 重複呼叫和改進
修改和驗證准入 Webhook 越來越成為擴充套件 Kubernetes API 的專案的主流。到目前為止,修改 Webhook 只會被按字母順序呼叫一次。較早執行的 Webhook 無法對鏈中較晚呼叫的 Webhook 的輸出作出反應。在 Kubernetes 1.15 中,情況將發生變化。
修改 Webhook 可以透過指定 `reinvocationPolicy: IfNeeded` 來選擇至少一次重複呼叫。如果後面的修改 Webhook 修改了物件,則較早的 Webhook 將獲得第二次機會。
這要求 Webhook 具有冪等性行為,能夠應對第二次呼叫。
不計劃增加另一輪呼叫,因此 Webhook 作者仍需謹慎對待他們對被准入物件所做的更改。最後,呼叫驗證 Webhook 以驗證承諾的不變性是否已實現。
准入 Webhook 還有更多小的更改,特別是 `objectSelector` 用於將具有特定標籤的物件從准入中排除,以及 Webhook 伺服器的任意埠(不僅限於 443)。
叢集生命週期穩定性和可用性改進
使 Kubernetes 安裝、升級和配置更加健壯一直是 SIG Cluster Lifecycle 本週期的主要重點(請參閱我們上次的社群更新)。針對 1.15,裸金屬工具和生產就緒的使用者案例(例如高可用性用例)的 Bug 修復已獲得優先權。
kubeadm,叢集生命週期構建塊,持續獲得高效引導生產叢集所需的功能和穩定性工作。kubeadm 已將高可用性 (HA) 功能提升為 Beta 版,允許使用者使用熟悉的 `kubeadm init` 和 `kubeadm join` 命令來配置和部署 HA 控制平面。已專門建立了一個全新的測試套件,以確保這些功能將長期保持穩定。
在 1.15 中,證書管理變得更加健壯,kubeadm 現在可以在證書到期之前無縫輪換所有證書(在升級時)。有關如何管理證書的資訊,請檢視 kubeadm 文件。
kubeadm 配置檔案 API 在 1.15 中從 v1beta1 遷移到 v1beta2。
最後,讓我們慶祝 kubeadm 現在擁有了自己的 Logo!
CSI 的持續改進
在 Kubernetes v1.15 中,SIG Storage 繼續致力於將樹內卷外掛遷移到容器儲存介面 (CSI)。SIG Storage 致力於使 CSI 的功能與樹內功能保持一致,包括調整大小、內聯卷等功能。SIG Storage 在 CSI 中引入了 Kubernetes 儲存子系統中尚不存在的新 Alpha 功能,例如卷克隆。
卷克隆允許使用者在配置新卷時將另一個 PVC 指定為“DataSource”。如果底層儲存系統支援此功能並在其 CSI 驅動程式中實現“CLONE_VOLUME”功能,則新卷將成為源卷的克隆。
其他值得注意的功能更新
- Kubernetes 核心支援 go modules
- 持續準備雲提供商提取和程式碼組織。雲提供商程式碼已移至 kubernetes/legacy-cloud-providers,以便將來更輕鬆地移除和外部使用。
- Kubectl get 和 describe 現在支援擴充套件
- 節點現在支援第三方監控外掛。
- 一個新的排程框架(用於排程外掛)現在是 Alpha 版
- ExecutionHook API 旨在觸發容器中的鉤子命令以實現不同用例,現在是 Alpha 版。
- 繼續廢棄 extensions/v1beta1、apps/v1beta1 和 apps/v1beta2 API;這些擴充套件將在 1.16 中退役!
檢視發行說明以獲取值得注意的功能和修復的完整列表。
可用性
Kubernetes 1.15 可在 GitHub 上下載。要開始使用 Kubernetes,請檢視這些互動式教程。您還可以使用 kubeadm 輕鬆安裝 1.15。
功能部落格系列
如果您有興趣深入探索這些功能,請本週和下週回來檢視我們的 Kubernetes 日系列,屆時我們將重點介紹以下功能的詳細演練:
- CRD 的未來:結構化模式
- 為 Kubernetes 引入卷克隆 Alpha
- Kubeadm 中的自動化高可用性
釋出團隊
此版本是透過數百位貢獻了技術和非技術內容的個人努力實現的。特別感謝由 Pivotal Software 高階技術專案經理 Claire Laurence 領導的釋出團隊。釋出團隊的 38 位成員協調了釋出的許多方面,從文件到測試、驗證和功能完整性。
隨著 Kubernetes 社群的發展,我們的釋出過程展現了開源軟體開發中令人驚歎的協作。Kubernetes 繼續以快速的速度獲得新使用者。這種增長創造了一個積極的反饋迴圈,更多的貢獻者提交程式碼,從而建立了一個更充滿活力的生態系統。迄今為止,Kubernetes 已經擁有超過 32,000 名個人貢獻者,以及一個擁有超過 66,000 人的活躍社群。
專案速度
CNCF 繼續完善 DevStats,這是一個雄心勃勃的專案,旨在視覺化專案中眾多貢獻。 K8s DevStats 展示了主要公司貢獻者的貢獻細分,以及一系列令人印象深刻的預配置報告,涵蓋從個人貢獻者到拉取請求生命週期時間的所有內容。在過去的一年中,平均每月有 379 家不同的公司和超過 2,715 名個人為 Kubernetes 做出貢獻。 檢視 DevStats,瞭解 Kubernetes 專案和社群的整體發展速度。
使用者亮點
成熟的全球組織正在大規模使用生產中的 Kubernetes。社群最近釋出的成功案例包括:
- 中國聯通正在使用 Kubernetes 將資源利用率提高 20-50%,降低 IT 基礎設施成本,並將部署時間從數小時縮短至 10-15 分鐘。
- 蒙特利爾市正在使用 Kubernetes 將部署時間從數月縮短到數小時,並在 8 臺機器上執行 200 個應用程式元件,由 5 人操作 Kubernetes 叢集。
- SLAMTEC正在使用 Kubernetes 和其他 CNCF 專案實現18 個月以上 100% 的正常執行時間,節省了 50% 的故障排除和除錯時間,並節省了 30% 的 CI/CD 工作時間。
- ThredUP 已將關鍵服務的部署時間平均縮短了約 50%,並將部署前置時間縮短到 20 分鐘以內。
Kubernetes 正在幫助您的團隊嗎?與社群分享您的故事。
生態系統更新
- Kubernetes 最近在 KubeCon + CloudNativeCon Barcelona 慶祝了其五週年紀念日。
- 認證 Kubernetes 管理員 (CKA) 考試已成為迄今為止最受歡迎的 Linux 基金會認證之一,註冊人數超過 9,000 人,透過並獲得認證的個人超過 1,700 人。
- 在成功舉辦KubeCon + CloudNativeCon Europe 2019之後,CNCF 宣佈其成員已超過 400 個,同比增長率達到 130%。
KubeCon
全球最大的 Kubernetes 盛會 KubeCon + CloudNativeCon 將於 2019 年 6 月 24-26 日在上海(與開源峰會同期舉行)和 11 月 18-21 日在聖地亞哥舉行。這些會議將包括技術會議、案例研究、開發者深度探討、沙龍等內容!立即註冊!
網路研討會
歡迎 Kubernetes 1.15 釋出團隊的成員於太平洋時間 7 月 23 日上午 10 點參加會議,瞭解此版本中的主要功能。在此註冊。
參與其中
參與 Kubernetes 最簡單的方式是加入與您興趣相符的眾多特殊興趣小組 (SIG) 之一。有什麼想向 Kubernetes 社群宣佈的嗎?在我們的每週社群會議上,並透過以下渠道分享您的聲音。感謝您一直以來的反饋和支援。
- 在 Twitter 上關注我們 @Kubernetesio 獲取最新更新
- 在 Discuss 上加入社群討論
- 在 Slack 上加入社群
- 在 Stack Overflow 上提問(或回答問題)
- 分享你的 Kubernetes 故事