本文已超過一年。較舊的文章可能包含過時的內容。請檢查頁面中的資訊自發布以來是否已變得不正確。
kubeadm v1.8 發布:為 Kubernetes 叢集引入簡易升級
編者註: 這篇文章是 Kubernetes 1.8 新功能系列深入文章 的一部分。
自從 Cluster Lifecycle 特殊興趣小組 (SIG) 在 2016 年 9 月 首次推出 kubeadm 以來,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 伺服器連接埠,開始授權所有對 kubelet 的 API 呼叫,並 改進了 v1.5 中先前使用的權杖探索 方法。權杖探索 (又名 Bootstrap Tokens) 在 v1.8 中升級到 Beta 版。
在功能數量方面,與 v1.6.0 和 v1.8.0 相比,kubeadm v1.7.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 原語管理控制平面元件,這具有許多優點。例如,當 HA 實作時,如果排程器和控制器管理員等領導者選舉元件在 DaemonSet 中運行,它們將自動在所有主節點上運行。Kubernetes 中的滾動升級可用於控制平面元件的升級,而且幾乎不需要編寫額外的程式碼即可使其運作;這是 Kubernetes 的內建原語之一!
在 v1.9.0 之前,自我託管不會是預設值,但使用者可以在實驗性叢集中輕鬆測試該功能。如果您測試此功能,我們很樂意收到您的意見回饋!
您可以透過啟用其功能閘道來測試自我託管
$ kubeadm init --feature-gates=SelfHosting=true
可擴展性
我們新增了一些新的可擴展性功能。您可以委派一些任務,例如產生憑證或將控制平面引數寫入 kubeadm,但仍然自行驅動控制平面啟動過程。基本上,您可以讓 kubeadm 完成某些部分,並在您需要自訂的位置自行填寫。先前,您只能使用 kubeadm init 來執行「全套服務」。包含 kubeadm alpha phase 命令支援了我們使 kubeadm 更模組化的目標,讓您可以調用啟動過程的原子子步驟。
在 v1.8.0 中,kubeadm alpha phase 僅此而已:Alpha 預覽版。我們希望我們可以將該命令升級到 Beta 版,作為 v1.9.0 中的 kubeadm phase。我們迫不及待地想收到社群關於如何更好地改進此功能的意見回饋!
改進
除了新的 kubeadm 功能外,我們還對現有功能進行了改進。使 kubeadm join
如此簡潔的 Bootstrap Token 功能已從 Alpha 版升級到 Beta 版,並獲得了更多安全功能。
如果您在 v1.6 或 v1.7 中對系統進行了自訂,則在升級叢集時必須記住這些自訂設定。從 v1.8.0 開始不再需要這樣:kubeadm 會將您的組態上傳到叢集內的 ConfigMap,並在稍後升級時讀取該組態,以獲得無縫的使用者體驗。
第一個憑證輪換功能已在 v1.8 中升級到 Beta 版,這真是太好了。感謝 Auth 特殊興趣小組,Kubernetes 節點元件 kubelet 現在可以 自動輪換其用戶端憑證。我們預期這個領域會持續改進,並將繼續參與這項跨 SIG 的努力,以輕鬆輪換任何叢集中的所有憑證。
最後但並非最不重要的一點是,kubeadm 現在更具彈性。kubeadm init 將更早地偵測到更多錯誤的環境,並在超時前退出,而不是永遠等待預期的條件。
kubeadm 的範圍
由於 Kubernetes 有許多不同的端對端安裝程式,因此生態系統中存在一些碎片化。隨著 Kubernetes 的每個新版本發布,這些安裝程式自然會變得更加不同。如果使用者依賴以任何方式都未標準化的安裝程式特定變體和掛鉤,這可能會在未來產生問題。我們從一開始的目標就是使 kubeadm 成為部署 Kubernetes 叢集的建構區塊,並為新的 Kubernetes 使用者提供 kubeadm init 和 kubeadm join 作為最佳實務「快速路徑」。理想情況下,使用 kubeadm 作為所有部署的基礎將使建立符合規範的叢集更容易。
kubeadm 執行必要的動作,以啟動並運行最小可行叢集。它僅關心啟動,而不關心佈建機器,這是設計使然。同樣地,預設安裝各種錦上添花的附加元件,例如 Kubernetes 儀表板、一些監控解決方案、雲端供應商特定的附加元件等等,都不在範圍內。相反地,我們期望在 kubeadm 之上建構更高層級和更客製化的工具,以安裝終端使用者需要的軟體。
v1.9.0 及以後
kubeadm 的未來會怎樣?
計畫功能
我們計畫在 v1.9.0 中以 Alpha 功能的形式解決高可用性 (複寫的 etcd 和多個、冗餘的 API 伺服器和其他控制平面元件)。這是我們使用者群的常規要求。
此外,我們希望使自我託管成為部署控制平面的預設方式:如果我們可以依靠 Kubernetes 自己的工具來管理叢集元件,Kubernetes 將變得更容易管理。
促進 kubeadm 採用和參與
kubeadm 採用工作小組 是 SIG Cluster Lifecycle 和 Kubernetes 生態系統中其他各方之間正在進行的努力。這個工作小組的重點是使 kubeadm 更具可擴展性,以便促進社群中其他端對端安裝程式採用它。歡迎所有人加入。到目前為止,我們很高興宣布 kubespray 開始在底層使用 kubeadm,同時獲得了新功能!我們很高興看到其他人跟進並使生態系統更強大。
kubeadm 是學習 Kubernetes 的絕佳方式:它將 Kubernetes 的所有元件綁定在一個套件中。若要深入了解 kubeadm 在底層的實際運作方式,此文件 描述了 v1.8.0 中的 kubeadm 功能。
如果您想參與這些工作,請加入 SIG Cluster Lifecycle。我們每週二 UTC 時間 16:00 在 Zoom 上開會 一次。有關我們在每週會議中討論內容的更多資訊,請查看我們的會議記錄。即使您不想立即加入並提出自己的想法,會議也是絕佳的教育機會。您也可以註冊我們的 郵件列表、加入我們的 Slack 頻道、or 查看我們過去會議的 影片存檔 tings。即使您最初只對觀看視訊通話感興趣,我們也很高興歡迎您成為 SIG Cluster Lifecycle 的新成員!
如果您想知道 kubeadm 開發人員在 Kubernetes 發布週期的特定時間在做什麼,請查看 此文件。最後,如果您對我們的任何即將到來的專案感興趣,請隨時加入!