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

建立和管理 Kubernetes 叢集的更堅實基礎

上次您聽到我們的訊息是在九月,當時我們宣佈了 kubeadm。將 kubeadm 打造成 Kubernetes 生態系統中的一等公民的工作一直在繼續和發展。我們中的一些人還在 KubeCon 之前見面,進行了一次富有成效的會議,討論了 SIG、kubeadm 和 kops 的範圍。

繼續定義 SIG-Cluster-Lifecycle

kubeadm 的範圍是什麼?
我們希望 kubeadm 成為所有 Kubernetes 部署的通用構建模組集;它提供安全且推薦的引導 Kubernetes 的方式。由於設定 Kubernetes 沒有唯一正確的方法,kubeadm 將支援每個階段的多種方法。我們希望識別每個 Kubernetes 部署共有的階段,併為這些階段建立可配置且易於使用的 kubeadm 命令。例如,如果您的組織要求您手動或以自定義方式分發叢集中的證書,則只跳過該階段使用 kubeadm。在這種情況下,我們旨在保持 kubeadm 在所有其他階段均可用。我們希望您能夠選擇 kubeadm 要做的事情,並讓您自己完成其餘的事情。

因此,kubeadm 的範圍是易於擴充套件、模組化且非常易於使用。目前,透過我們釋出的 v1.5 版本,kubeadm 只能為您提供“全套服務”。在未來版本中,隨著 kubeadm 變得更加元件化,這種情況將會改變,同時仍保留為您完成所有工作的機會。但 kubeadm 仍然只處理 Kubernetes 的引導;它永遠不會為您處理機器的供應,因為這可以透過更多方式完成。此外,我們希望 kubeadm 能夠隨處執行,甚至在多種架構上也能執行,因此我們從一開始就內建了多架構支援

kops 的範圍是什麼?
kops 的範圍是自動化完整的叢集操作:安裝、叢集重新配置、升級 kubernetes 以及最終的叢集刪除。kops 擁有基於 Kubernetes API Machinery 的豐富配置模型,因此您可以輕鬆地根據自己的需求定製一些引數。kops(與 kubeadm 不同)為您處理資源的供應。kops 旨在成為 AWS(未來可能還有其他提供商)上終極的開箱即用體驗。未來 kops 將在引導階段越來越多地採用 kubeadm。這將把 kops 內部的一些複雜性以 kubeadm 的形式轉移到中心位置。

SIG-Cluster-Lifecycle 的範圍是什麼?
SIG-Cluster-Lifecycle 積極嘗試簡化 Kubernetes 的安裝和管理。這在許多情況下是透過修改 Kubernetes 本身並提取常見任務來實現的。我們還在努力解決叢集生命週期中的常見問題(正如其名稱所示!)。我們維護並負責 kubeadm 和 kops。我們討論了目前在 AWS(及其他平臺)上引導叢集的方式存在的問題,並嘗試使其更簡單。我們透過 Slack 在 #sig-cluster-lifecycle 和 #kubeadm 頻道進行交流。我們每週在 Zoom 上開會討論當前的主題。歡迎前來打個招呼!另外,不要害羞貢獻;我們很樂意聽取您的評論和見解!

展望 v1.6

我們對 v1.6 的目標主要集中在重構、穩定性和安全性。

首先,我們希望將 kubeadm 及其可組合配置體驗推向 beta 版。我們將重構 kubeadm,以便引導過程中的每個階段都可以單獨呼叫。我們希望將 TLS 引導 API、證書 API 和 ComponentConfig API 推向 beta 版,並讓 kops(和其他工具)使用它們。

我們還將透過向控制器管理器新增一個新的控制器來將我們現在使用的令牌發現(即 gcr.io/google_containers/kube-discovery:1.0 映象)升級到 beta 版:BootstrapSigner。使用作為 Secret 管理的令牌,該控制器將在新的 kube-public 名稱空間中籤名眾所周知的 ConfigMap 的內容(一個 kubeconfig 檔案)。此物件將可供未經身份驗證的使用者使用,以便透過一個簡單短小的共享令牌實現安全引導。您可以在此處閱讀完整的提案。

除了可以單獨呼叫階段之外,我們還將新增一個新階段,用於以自託管模式啟動控制平面(與當前的靜態 Pod 技術相對)。自託管技術由 CoreOS 以 bootkube 的形式開發,現在將作為一種替代方案併入官方 Kubernetes 產品中。感謝 CoreOS 推動了這種正規化!這將透過首先使用靜態 Pod 設定一個臨時控制平面,注入必要的 Deployment、ConfigMap 和 DaemonSet,最後關閉臨時控制平面來完成。目前,etcd 預設仍將位於靜態 Pod 中。

我們最初支援自託管,因為我們希望透過 kubeadm 支援進行補丁版本升級。例如,從 v1.6.2 升級到 v1.6.4 應該很容易。我們認為內建的升級支援是真正的叢集生命週期工具的關鍵能力。仍然可以在不自託管的情況下進行升級,但這需要更多手動操作。

在穩定性方面,我們希望開始執行 kubeadm e2e 測試。在 v1.5 期間,我們添加了單元測試,並將繼續增加覆蓋率。我們希望將其擴充套件到每個 PR 的 e2e 測試,這些測試使用 _kubeadm init_ 和 _kubeadm join_ 啟動叢集;執行一些 kubeadm 特定的測試,並可選地執行一致性測試套件。

最後,在安全性方面,我們還希望 kubeadm 預設儘可能安全。我們希望為 v1.6 啟用 RBAC,鎖定 kubelet 和內建服務(如 kube-dns 和 kube-proxy)可以執行的操作,並可能建立具有不同許可權的特定使用者帳戶。

關於釋出,我們希望將官方 kubeadm v1.6 二進位制檔案包含在 kubernetes v1.6 tarball 中。這意味著將我們的釋出與官方釋出同步。有關我們迄今為止所做工作的更多詳細資訊,請參閱此處。一旦可能,我們打算將 kubeadm 程式碼移至 kubernetes/kubeadm 倉庫(這被一些 Kubernetes 程式碼特定的基礎設施問題所阻礙,可能需要一些時間來解決。)

v1.6 的理想功能包括一個官方的 CoreOS Container Linux 安裝程式容器,它執行 debs/rpms 為 Ubuntu/CentOS 所做的工作。總的來說,擴充套件發行版支援會很好。我們還希望採用 Kubelet 動態設定,以便傳遞給 kubeadm init 的配置自動流向節點(目前需要手動配置)。我們希望透過使用 kubeadm 可以測試 Kubernetes 的 HEAD 版本。

2017 年及以後

除了上述所有內容,我們希望 kubeadm 成為一個可用於引導 Kubernetes 叢集的生產級(GA)工具。我們希望 HA/多主節點在不同平臺上比現在更容易實現(儘管 kops 現在在 AWS 上已經很容易實現!)。我們希望雲提供商能夠脫離樹,並可單獨安裝。_kubectl apply -f my-cloud-provider-here.yaml_ 應該能直接工作。文件應該更健壯,並更深入。容器執行時介面(CRI)和聯邦應該與 kubeadm 很好地配合。過時的入門指南應該被刪除,以免誤導新使用者。

重構雲提供商整合外掛
目前,雲提供商整合內建在控制器管理器、kubelet 和 API 伺服器中。這與 Kubernetes 日益增長的興趣相結合,使得將雲提供商整合編譯到核心中變得難以維護。明顯是供應商特定的功能不應成為核心 Kubernetes 專案的一部分,而應作為第三方供應商的附加元件提供。所有云特定的內容都應移到一個控制器中,如果需要,可以移到少數幾個控制器中。此控制器將由第三方(通常是整合背後的公司)維護,並將實現雲特定功能。這種從核心內到核心外的遷移確實具有破壞性,但它具有非常好的副作用:更精簡的核心,使七個現有云之外的更多雲能夠與 Kubernetes 整合,並且安裝更容易。例如,您可以將雲控制器二進位制檔案在 Deployment 中執行,並使用 _kubectl apply_ 輕鬆安裝。

v1.6 的計劃是使其成為可能

  • 建立和執行核心外雲提供商整合控制器
  • 在 Kubernetes 版本中釋出一個新的臨時二進位制檔案:cloud-controller-manager。此二進位制檔案將包含七個現有的雲提供商,並將作為驗證、測試和遷移到新流程的方式。在未來的版本中(提議是 v1.9),`--cloud-provider` 標誌將停止工作,並且臨時 cloud-controller-manager 二進位制檔案將不再發布。取而代之的是,一個名為 kubernetes/cloud-providers 的倉庫將作為官方驗證的雲提供商發展和存在的地方,但那裡的所有提供商都將彼此獨立。(issue #2770;提案 #128;程式碼 #3473。)

從 v1.4 到 v1.5 的變更日誌

kubeadm  

v1.5 是 kubeadm 的穩定版本。我們致力於使 kubeadm 更使用者友好、透明和穩定。添加了一些新功能,使其更具可配置性。

以下是更改的簡短摘要

  • 使 kubeadm 的_控制檯輸出_更簡潔、更_使用者友好_ #37568
  • 實現了_kubeadm reset_ 和清理節點 #34807#37831
  • 如果環境無效,_預檢檢查_會快速失敗 #34341#36334
  • _kubectl logs_ 和 _kubectl exec_ 現在可以與 kubeadm 一起使用 #37568
  • 以及許多其他改進,請閱讀完整的變更日誌

kops

以下是更改的簡短摘要

  • 支援 CNI 網路外掛(Weave、Calico、Kope.io)
  • 完全私有部署,其中節點和主節點沒有公共 IP
  • 改進了叢集的滾動更新,特別是 HA 叢集
  • 除了 Debian 之外,還支援 CentOS / RHEL / Ubuntu 作業系統,並支援 sysdig 和 perf 工具

前往 kops 釋出頁面以獲取有關最新和最出色的 kops 版本的資訊。

總結

簡而言之,我們對即將釋出的版本中將為你們帶來這些改進感到興奮。我們希望這將使入門體驗更加輕鬆,並促進 Kubernetes 的廣泛採用。

感謝您的所有反饋和貢獻。我希望這能讓您對我們正在做的事情有所瞭解,並鼓勵您參加我們的會議,打個招呼!