本文發表於一年多前。舊文章可能包含過時內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
kubeadm v1.8 釋出:為 Kubernetes 叢集引入輕鬆升級
編者按:這篇博文是關於Kubernetes 1.8新功能的系列深度文章之一。
自2016年9月首次釋出以來,叢集生命週期特別興趣小組(SIG)已將kubeadm確立為最簡單的Kubernetes引導方法。現在,我們與Kubernetes v1.8.0的釋出同步釋出kubeadm v1.8.0。在這篇博文中,我將向您介紹自上次更新以來我們對kubeadm所做的更改、kubeadm的範圍以及您如何為這項工作做出貢獻。
安全第一:kubeadm v1.6 & v1.7
此前,我們討論了kubeadm v1.6的計劃更新。v1.6的首要重點是安全性。我們開始強制執行角色基於訪問控制(RBAC),因為它已升級到beta版本,為叢集中的不同系統元件提供了唯一的身份和鎖定的許可權,停用了不安全的localhost:8080
API伺服器埠,開始授權所有對kubelets的API呼叫,並改進了v1.5中使用的令牌發現方法。令牌發現(又稱引導令牌)在v1.8中升級到beta版本。
在功能數量上,kubeadm v1.7.0與v1.6.0和v1.8.0相比是一個小得多的版本。主要新增功能是強制執行節點授權器,這顯著減少了Kubernetes叢集的攻擊面,以及從v1.6叢集進行的初步、有限的升級支援。
v1.8中更簡單的升級、可擴充套件性和穩定性
從Kubernetes v1.7.0到我們的穩定期(程式碼凍結)之間,我們有八週的時間來實施新功能並穩定即將釋出的v1.8.0版本。我們為kubeadm v1.8.0設定的目標是使其更具可擴充套件性。我們希望在此週期中新增許多新功能和改進,我們也成功了。升級以及更好的自省能力。kubeadm v1.8.0中最重要的更新(也是我最喜歡的新功能)是控制平面的一鍵式升級。雖然v1.7.0具有升級叢集的能力,但使用者體驗遠非最佳,而且過程存在風險。
現在,您可以透過輸入以下命令輕鬆檢查您的系統是否可以處理升級
$ kubeadm upgrade plan
這為您提供了可以升級到的版本以及叢集健康狀況的資訊。
您可以透過指定--dry-run標誌來檢查升級將對您的系統產生的影響。在以前的kubeadm版本中,升級基本上是盲目的,您只能對升級將如何影響您的叢集做出假設。有了新的dry run功能,不再有神秘感。在應用升級之前,您可以準確地看到應用升級會做什麼。
檢查升級將如何影響您的集群后,您可以透過鍵入以下命令應用升級
$ kubeadm upgrade apply v1.8.0
這是一種比以前版本更乾淨、更安全的升級方式。與任何型別的升級或降級一樣,最好先使用您首選的解決方案備份您的叢集。
自託管
在這種情況下,自託管指的是設定控制平面的一種特定方式。自託管概念最初由CoreOS在其bootkube專案中開發。長期目標是將此功能(目前處於alpha階段)轉移到通用的kubeadm工具箱。自託管意味著控制平面元件、API伺服器、控制器管理器和排程器本身就是它們所執行叢集中的工作負載。這意味著控制平面元件可以使用Kubernetes原語進行管理,這具有許多優勢。例如,如果領導者選舉的元件(如排程器和控制器管理器)在DaemonSet中執行,則當實現HA時,它們將自動在所有主節點上執行。Kubernetes中的滾動升級可用於控制平面元件的升級,幾乎不需要為此編寫額外的程式碼;這是Kubernetes的內建原語之一!
自託管在v1.9.0之前不會是預設設定,但使用者可以在實驗叢集中輕鬆測試此功能。如果您測試此功能,我們很樂意收到您的反饋!
您可以透過啟用其功能門來測試自託管
$ kubeadm init --feature-gates=SelfHosting=true
可擴充套件性
我們添加了一些新的可擴充套件性功能。您可以將一些任務(例如生成證書或向kubeadm寫入控制平面引數)委託給kubeadm,但仍然自行驅動控制平面引導過程。基本上,您可以讓kubeadm完成部分工作,並在需要自定義的地方自行填寫。以前,您只能使用`kubeadm init`執行“完整的交易”。`kubeadm alpha phase`命令的加入支援了我們使kubeadm更模組化的目標,讓您可以呼叫引導過程中的原子子步驟。
在v1.8.0中,`kubeadm alpha phase`只是一個alpha預覽。我們希望在v1.9.0中將其升級為beta版`kubeadm phase`命令。我們迫不及待地期待社群對如何更好地改進此功能的反饋!
改進
除了新的 kubeadm 功能之外,我們還改進了現有功能。使 `kubeadm join` 如此簡潔的引導令牌功能已從 alpha 升級到 beta,並獲得了更多安全功能。
如果您在 v1.6 或 v1.7 中對系統進行了自定義,那麼在升級叢集時,您必須記住這些自定義。現在不再需要了:從 v1.8.0 開始,kubeadm 會將您的配置上傳到叢集中的 ConfigMap,並在升級時讀取該配置,以實現無縫的使用者體驗。
第一個證書輪換功能已在 v1.8 中升級到 beta 版,這令人欣喜。感謝 Auth Special Interest Group,Kubernetes 節點元件 kubelet 現在可以自動輪換其客戶端證書。我們預計此領域將持續改進,並將繼續參與這項跨 SIG 工作,以輕鬆輪換任何叢集中的所有證書。
最後但同樣重要的是,kubeadm 現在更具彈性。`kubeadm init` 將更早地檢測到更多故障環境,並超時而不是永遠等待預期的條件。
kubeadm 的範圍
由於 Kubernetes 有如此多的不同端到端安裝程式,生態系統中存在一些碎片化。隨著每個新 Kubernetes 版本的釋出,這些安裝程式自然會變得更加分歧。如果使用者依賴於未以任何方式標準化的特定於安裝程式的變體和掛鉤,這可能會在以後造成問題。我們從一開始的目標就是使 kubeadm 成為部署 Kubernetes 叢集的構建塊,並提供 `kubeadm init` 和 `kubeadm join` 作為新 Kubernetes 使用者的最佳實踐“快速路徑”。理想情況下,使用 kubeadm 作為所有部署的基礎將更容易建立符合標準的叢集。
kubeadm執行將最小可用叢集啟動並執行所需的動作。它只關心引導,而不是機器的配置,這是設計使然。同樣,預設安裝各種可有可無的外掛,如Kubernetes Dashboard、一些監控解決方案、雲提供商特定的外掛等,都不在範圍之內。相反,我們期望在kubeadm之上構建更高階、更定製的工具,以安裝終端使用者所需的軟體。
v1.9.0 及以後
kubeadm 的未來將如何發展?
計劃中的功能
我們計劃在 v1.9.0 中將高可用性(複製的 etcd 和多個冗餘的 API 伺服器以及其他控制平面元件)作為 alpha 功能。這是我們使用者群的常規請求。
此外,我們希望使自託管成為部署控制平面的預設方式:如果我們可以依靠 Kubernetes 自己的工具來管理叢集元件,Kubernetes 將變得更容易管理。
促進 kubeadm 的採用和參與
kubeadm 採用工作組是 SIG 叢集生命週期與 Kubernetes 生態系統中的其他參與方之間正在進行的一項工作。該工作組致力於使 kubeadm 更具可擴充套件性,以促進其在社群中其他端到端安裝程式中的採用。歡迎所有人加入。到目前為止,我們很高興地宣佈 kubespray 已開始在底層使用 kubeadm,並同時獲得了新功能!我們很高興看到其他人效仿並使生態系統更加強大。
kubeadm是瞭解Kubernetes的好方法:它將所有Kubernetes元件捆綁在一個包中。要了解kubeadm在底層實際做了什麼,請查閱此文件,它描述了v1.8.0中的kubeadm功能。
如果您想參與這些工作,請加入 SIG Cluster Lifecycle。我們每週二世界協調時 16:00 透過 Zoom 開會。有關我們每週會議討論內容的更多資訊,請查閱我們的會議記錄。會議是一個很好的學習機會,即使您不想立即跳進去並提出自己的想法。您也可以註冊我們的郵件列表,加入我們的Slack 頻道,或者檢視我們過去會議的影片存檔。即使您最初只對觀看視訊通話感興趣,我們也熱烈歡迎您成為 SIG Cluster Lifecycle 的新成員!
如果您想了解 kubeadm 開發人員在 Kubernetes 釋出週期中特定時間的工作,請查閱此文件。最後,如果您對我們即將推出的任何專案感興趣,請不要猶豫加入!