本文已超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。

Kubernetes v1.27:輕鬆氛圍

宣布 Kubernetes v1.27 版本發布,這是 2023 年的第一個版本!

此版本包含 60 項增強功能。其中 18 項增強功能進入 Alpha 階段,29 項升級到 Beta 階段,13 項升級到 Stable 階段。

Kubernetes v1.27:輕鬆氛圍

Kubernetes v1.27 的主題是Chill Vibes(輕鬆氛圍)。

這有點傻氣,但此版本中的一些重要轉變有助於啟發這個主題。在典型的 Kubernetes 發布週期中,功能需要達到幾個截止日期才能保持包含在內。如果某個功能錯過了任何這些截止日期,則可以通過例外處理程序。處理這些例外是發布過程中非常正常的一部分。但 v1.27 是任何人都能記住的第一個版本,在增強功能凍結後,我們沒有收到任何例外請求。即使發布進展順利,事情也比我們任何人都習慣的要平靜得多。

這次我們能夠享受更平靜的發布有一個具體的原因,那就是人們在幕後投入的所有工作,以改進我們管理發布的方式。這就是這個主題所慶祝的,人們投入工作以使社群變得更好。

特別感謝 Britnee Laverack 創作標誌。Britnee 也為 Kubernetes 1.24: Stargazer 設計了標誌。

新功能(主要主題)

凍結 k8s.gcr.io 映像檔登錄檔

取代舊的映像檔登錄檔 k8s.gcr.io,使用 registry.k8s.io,後者已全面可用數月。Kubernetes 專案建立並執行 registry.k8s.io 映像檔登錄檔,該登錄檔完全由社群控制。這表示舊的登錄檔 k8s.gcr.io 將被凍結,並且不會再將 Kubernetes 和相關子專案的更多映像檔發布到舊的登錄檔。

此變更對貢獻者有何意義?

  • 如果您是子專案的維護者,您將需要更新您的 manifest 和 Helm chart 以使用新的登錄檔。如需更多資訊,請查看此專案

此變更對終端使用者有何意義?

  • Kubernetes v1.27 版本將不會發布到 k8s.gcr.io 登錄檔。

  • v1.24v1.25v1.26 的修補程式版本將在四月之後不再發布到舊的登錄檔。

  • 從 v1.25 開始,預設映像檔登錄檔已設定為 registry.k8s.io。此值可在 kubeadm 和 kubelet 中覆寫,但將其設定為 k8s.gcr.io 將在四月之後的新版本中失敗,因為它們不會出現在舊的登錄檔中。

  • 如果您想提高叢集的可靠性並消除對社群擁有的登錄檔的依賴,或者您在外部流量受限的網路中執行 Kubernetes,則應考慮託管本機映像檔登錄檔鏡像。某些雲端供應商可能會為此提供託管解決方案。

SeccompDefault 升級到穩定版

若要使用 seccomp 設定檔預設值,您必須在每個要使用它的節點上,使用啟用的 --seccomp-default 命令列旗標 執行 kubelet。如果啟用,kubelet 將預設使用 RuntimeDefault seccomp 設定檔,該設定檔由容器執行階段定義,而不是使用 Unconfined(停用 seccomp)模式。預設設定檔旨在提供一組強大的安全性預設值,同時保留工作負載的功能。預設設定檔在容器執行階段及其發布版本之間可能有所不同。

您可以在相關的 Kubernetes 增強提案 (KEP) 中找到有關可能升級和降級策略的詳細資訊:預設啟用 seccomp

Jobs 的可變排程指令升級到 GA

這是在 v1.22 中引入的,最初是 beta 級別,現在是穩定的。在大多數情況下,平行 job 會希望 Pod 在約束條件下執行,例如全部在同一個區域中,或者全部在 GPU 型號 x 或 y 上,而不是兩者的混合。suspend 欄位是實現這些語義的第一步。suspend 允許自訂佇列控制器決定 job 何時應該啟動。但是,一旦 job 解除暫停,自訂佇列控制器就無法影響 job 的 Pod 實際將落在何處。

此功能允許在 Job 啟動之前更新其排程指令,這讓自訂佇列控制器能夠影響 Pod 的放置位置,同時將實際的 Pod 到節點指派卸載到 kube-scheduler。這僅適用於從未解除暫停的暫停 Job。Job 的 Pod 範本中可以更新的欄位包括節點親和性、節點選擇器、容忍度、標籤、註解和 排程閘門。在 KEP 中找到更多詳細資訊:允許更新 job 的排程指令

DownwardAPIHugePages 升級到穩定版

在 Kubernetes v1.20 中,將對 requests.hugepages-<pagesize>limits.hugepages-<pagesize> 的支援新增到 Downward API,以與其他資源(如 cpu、記憶體和臨時儲存空間)保持一致。此功能在此版本中升級到穩定版。您可以在 KEP 中找到更多詳細資訊:Downward API HugePages

Pod 排程就緒性進入 beta 階段

Pod 在建立時即可進行排程。Kubernetes 排程器會盡職盡責地尋找節點來放置所有待處理的 Pod。但是,在實際情況中,某些 Pod 可能會在missing-essential-resources 狀態中停留很長時間。這些 Pod 實際上會以不必要的方式攪動排程器(以及叢集自動擴展器等下游整合器)。

透過指定/移除 Pod 的 .spec.schedulingGates,您可以控制 Pod 何時準備好被視為可排程。

schedulingGates 欄位包含字串清單,每個字串文字都被視為在 Pod 被視為可排程之前必須滿足的條件。此欄位只能在建立 Pod 時初始化(由用戶端或在 admission 期間變更)。建立後,每個 schedulingGate 可以以任意順序移除,但不允許新增新的排程閘門。

透過 Kubernetes API 存取節點日誌

此功能可協助叢集管理員偵錯節點上執行的服務問題,方法是允許他們查詢服務日誌。若要使用此功能,請確保在該節點上啟用 NodeLogQuery 功能閘門,並且 kubelet 組態選項 enableSystemLogHandlerenableSystemLogQuery 都設定為 true。在 Linux 上,我們假設服務日誌可透過 journald 取得。在 Windows 上,我們假設服務日誌可在應用程式日誌提供者中取得。您也可以分別從 Linux 和 Windows 上的 /var/log/C:\var\log 目錄中擷取日誌。

叢集管理員可以在其叢集的所有節點或部分節點上試用此 alpha 功能。

ReadWriteOncePod PersistentVolume 存取模式進入 beta 階段

Kubernetes v1.22PersistentVolumes (PV) 和 PersistentVolumeClaims (PVC) 引入了新的存取模式 ReadWriteOncePod。此存取模式可讓您將磁碟區存取限制為叢集中的單個 Pod,確保一次只有一個 Pod 可以寫入磁碟區。這對於需要單一寫入器存取儲存空間的有狀態工作負載特別有用。

ReadWriteOncePod beta 新增了對使用 ReadWriteOncePod PVC 的 Pod 進行 排程器搶佔 的支援。排程器搶佔允許較高優先順序的 Pod 搶佔較低優先順序的 Pod。例如,當排程具有 ReadWriteOncePod PVC 的 Pod (A) 時,如果發現另一個 Pod (B) 正在使用相同的 PVC 且 Pod (A) 具有較高的優先順序,則排程器將傳回 Unschedulable 狀態並嘗試搶佔 Pod (B)。如需更多背景資訊,請參閱 KEP:ReadWriteOncePod PersistentVolume AccessMode

在滾動升級後尊重 PodTopologySpread

matchLabelKeys 是用於選取將在其中計算分散的 Pod 的 Pod 標籤鍵清單。這些鍵用於從 Pod 標籤中查找值。這些鍵值標籤與 labelSelector 進行 AND 運算,以選取現有的 Pod 群組,將在該群組上計算傳入 Pod 的分散。Pod 標籤中不存在的鍵將被忽略。Null 或空清單表示僅與 labelSelector 比對。

透過 matchLabelKeys,使用者不需要在不同修訂版本之間更新 pod.spec。控制器/運算子只需要為不同修訂版本的同一個 label 鍵設定不同的值。排程器將根據 matchLabelKeys 自動假設這些值。例如,如果使用者使用 Deployment,他們可以使用以 pod-template-hash 為鍵的標籤,該標籤由 Deployment 控制器自動新增,以區分單個 Deployment 中的不同修訂版本。

使用掛載更快地重新標記 SELinux 磁碟區

在此版本中,SELinux 標籤如何應用於 Pod 使用的磁碟區正在升級到 beta 階段。此功能透過使用正確的 SELinux 標籤掛載磁碟區,而不是遞迴地變更磁碟區上的每個檔案,來加速容器啟動。具有 SELinux 支援的 Linux 核心允許首次掛載磁碟區時,使用 -o context= 掛載選項在整個磁碟區上設定 SELinux 標籤。這樣,所有檔案都將在恆定時間內指派給定的標籤,而無需遞迴地遍歷整個磁碟區。

context 掛載選項無法應用於繫結掛載或已掛載磁碟區的重新掛載。對於 CSI 儲存空間,CSI 驅動程式會執行磁碟區的首次掛載,因此必須由 CSI 驅動程式實際應用此掛載選項。我們在 CSIDriver 物件中新增了一個新的欄位 SELinuxMount,以便驅動程式可以宣告它們是否支援 -o context 掛載選項。

如果 Kubernetes 知道 Pod 的 SELinux 標籤負責 Pod 磁碟區的 CSI 驅動程式宣告 SELinuxMount: true 磁碟區具有存取模式 ReadWriteOncePod,則它將要求 CSI 驅動程式使用掛載選項 context= 掛載磁碟區它將告知容器執行階段不要重新標記磁碟區的內容(因為所有檔案都已具有正確的標籤)。從 KEP 取得更多相關資訊:使用掛載加速 SELinux 磁碟區重新標記

穩健的 VolumeManager 重建進入 beta 階段

這是一個磁碟區管理員重構,允許 kubelet 在 kubelet 啟動期間填入有關現有磁碟區如何掛載的其他資訊。一般來說,這使得磁碟區清理更加穩健。如果您在節點上啟用 NewVolumeManagerReconstruction 功能閘門,您將在 kubelet 啟動期間獲得增強的已掛載磁碟區探索。

在 Kubernetes v1.25 之前,kubelet 對於在 kubelet 啟動期間探索已掛載磁碟區使用了不同的預設行為。如果您停用此功能閘門(預設為啟用),則您選擇舊版的探索行為。

在 Kubernetes v1.25 和 v1.26 中,此行為切換是 SELinuxMountReadWriteOncePod 功能閘門的一部分。

可變 Pod 排程指令進入 beta 階段

這允許變更受排程就緒閘門封鎖的 Pod,使其具有更受限的節點親和性/選擇器。它讓您能夠在允許排程 Pod 之前變更 Pod 的排程指令,並讓外部資源控制器能夠影響 Pod 的放置位置,同時將實際的 Pod 到節點指派卸載到 kube-scheduler。

這為向 Kubernetes 新增排程功能開啟了大門。具體而言,建置輕量級排程器,以實作 kube-scheduler 不支援的功能,同時依賴現有的 kube-scheduler 來支援所有上游功能並處理 Pod 到節點的繫結。如果自訂功能不需要實作排程外掛程式,則此模式應為首選模式,這需要重新建置和維護自訂 kube-scheduler 二進位檔。

Kubernetes v1.27 中的功能升級和棄用

升級到穩定版

此版本總共包含 9 項升級到穩定版的增強功能

棄用和移除

此版本進行了多項移除

發行說明

Kubernetes v1.27 發行版本的完整詳細資訊可在我們的發行說明中取得。

可用性

Kubernetes v1.27 可在 GitHub 上下載。若要開始使用 Kubernetes,您可以使用 minikubekind 等執行本機 Kubernetes 叢集。您也可以使用 kubeadm 輕鬆安裝 v1.27。

發布團隊

Kubernetes 的實現離不開其社群的支援、承諾和辛勤工作。每個發布團隊都由敬業的社群志工組成,他們共同努力建構組成您所依賴的 Kubernetes 發行版本的許多部分。這需要來自我們社群各個角落具有專業技能的人員,從程式碼本身到其文件和專案管理。

特別感謝我們的發布負責人 Xander Grzywinski 引導我們完成順利且成功的發布週期,並感謝發布團隊的所有成員相互支持並努力為社群製作 v1.27 版本。

生態系統更新

  • KubeCon + CloudNativeCon Europe 2023 將於 2023 年 4 月 17 日至 21 日在荷蘭阿姆斯特丹舉行!您可以在活動網站上找到有關會議和註冊的更多資訊。
  • cdCon + GitOpsCon 將於 2023 年 5 月 8 日和 9 日在加拿大溫哥華舉行!有關會議和註冊的更多資訊,請參閱活動網站

專案速度

CNCF K8s DevStats 專案彙總了與 Kubernetes 和各種子專案的速度相關的許多有趣資料點。這包括從個人貢獻到貢獻公司的數量等所有內容,並說明了為發展這個生態系統所做的努力的深度和廣度。

在 v1.27 發布週期中,該週期運行了 14 週(1 月 9 日至 4 月 11 日),我們看到了來自 1020 家公司1603 個人 的貢獻。

即將發布的發布網路研討會

加入 Kubernetes v1.27 發布團隊成員於 2023 年 4 月 14 日星期五太平洋時間上午 10 點舉行的會議,以了解此版本的主要功能,以及有助於規劃升級的棄用和移除。如需更多資訊和註冊,請造訪 CNCF 線上計畫網站上的活動頁面

參與其中

參與 Kubernetes 最簡單的方式是加入與您的興趣相符的眾多特殊興趣小組 (SIG) 之一。

有什麼想向 Kubernetes 社群廣播的嗎?在我們的每週社群會議以及透過以下管道分享您的聲音