
K3s 和 RKE2 是 SUSE Rancher 容器平臺的兩個 Kubernetes 發行版,都可以運行生產就緒的集群,但是它們適用的用例不同,兩者都有獨特的功能。
本文將介紹這兩個項目的相同點和差異性,幫您了解如何合理選用 RKE2 和 K3s,來滿足容器化工作負載的安全性和合規性。
(資料圖片)
K3s 僅使用一個不到 70MB 的二進制文件來提供生產就緒的 Kubernetes 集群。K3s 非常輕巧,很適合在邊緣 IoT 設備、低功耗服務器和開發工作站上運行 Kubernetes。
RKE2 也能運行生產就緒的集群。它與 K3s 一樣簡單易用,而且注重安全性和合規性。RKE2 是從 RKE 項目演變而來的,也稱為 RKE Government,這個名稱也反映了它適用于要求最苛刻的領域。但它的應用范圍不僅限于政府機構,而是所有重視安全性和合規性的組織的理想選擇,因此我們將其發展成了現在的 RKE2。
K3s 和 RKE2 都由 Rancher 完全支持,都是云原生計算基金會 (CNCF) 認證的 Kubernetes 發行版。雖然二者的目標用例不同,但它們的啟動和操作方式類似,都可以通過 Rancher Manager 部署,而且都能使用行業標準的 containerd 運行時運行容器。
K3s 和 RKE2 的安裝非常方便,而且啟動速度都非常快。
只需使用一條命令并等待大約 30 秒,就可以在新主機上啟動 K3s 集群:
$ curl -sfL https://get.k3s.io | sudo sh -
該服務已注冊并啟動,可以立即運行 kubectl 命令與集群進行交互:
$ k3s kubectl get pods
RKE2 也類似,可以使用一個簡單的安裝腳本來下載其二進制文件:
$ curl -sfL https://get.rke2.io | sudo sh -
RKE2 默認不啟動服務。可以運行以下命令,從而在 server(control plane)模式下啟動 RKE2:
$ sudo systemctl enable rke2-server.service$ sudo systemctl start rke2-server.service
您可以在??/var/lib/rancher/rke2/bin?
?中找到附帶的 kubectl 二進制文件。默認情況下,它不會添加到??PATH?
?中,kubeconfig 文件會存放到??/etc/rancher/rke2/rke2.yaml?
?:
$ export KUBECONFIG=/etc/rancher/rke2/rke2.yaml$ /var/lib/rancher/rke2/bin/kubectl get pods
除了可用性,K3s 和 RKE2 還非常易用,可以通過在每個節點上重復運行安裝腳本來升級集群:
# K3s $ curl -sfL https://get.k3s.io | sh - # RKE2 $ curl -sfL https://get.rke2.io | sh -
您需要重復提供原始安裝命令中的標志。
可以使用 Rancher 的 system-upgrade-controller 來支持自動升級。安裝 controller 后,可以通過聲明創建 Plan 對象,該對象描述了如何將集群遷移到新版本。Plan 是由 controller 提供的自定義資源定義(CRD)。
備份和恢復數據是另一個常見的 Kubernetes 挑戰。K3s 和 RKE2 在這方面也非常類似。快照會自動寫入并保留一段可配置的時間。您可以運行以下命令輕松地通過快照恢復集群:
# K3s $ k3s server \ --cluster-reset \ --cluster-reset-restore-path=/var/lib/rancher/k3s/server/db/etcd-old-# RKE2 $ rke2 server \ --cluster-reset \ --cluster-reset-restore-path=/var/lib/rancher/rke2/server/db/etcd-old-
K3s 和 RKE2 的單節點部署模型相同。它們將所有依賴項捆綁到一次下載中,因此不需要具備很多 Kubernetes 經驗就能部署一個正常運行的集群。
它們還支持離線環境,因此都能安裝在與物理網絡隔離的主機中。我們在 Release artifacts 中提供了離線鏡像,將鏡像傳輸到主機后,運行安裝腳本將引導您的集群。
K3s 和 RKE2 都是為生產環境運行而設計的。開發中也經常使用 K3s,K3s 被譽為理想的單節點集群。它具有強大的多節點管理功能,能支持物聯網設備群。
兩個項目都可以運行高可用的 control plane。您可以將 control plane 組件的副本分布在多個 Server 節點上,并使用外部數據存儲而不是嵌入式數據存儲。
K3s 和 RKE2 都使用單個二進制 Kubernetes,支持高可用設置而且易于備份,兩者的許多命令都可以互換。但是,一些關鍵的差異會影響它們的使用場景,這也是我們把這兩個發行版區分為兩個獨立項目的原因。
K3s 已通過 CNCF 認證,但 K3s 在某些方面還是與上游 Kubernetes 不同的。雖然嵌入式 etcd 實例是現代版本中的可用選項,但是 K3s 使用 SQLite 而不是 etcd 作為默認數據存儲。K3s 還附帶了其他實用程序,例如 Traefik Ingress controller。
RKE2 更接近標準 Kubernetes,提升一致性是其主要特性之一。因此,您針對其他發行版開發的工作負載也能可靠地在 RKE2 中運行。它降低了當 K3s 與上游 Kubernetes 不一致時可能發生的風險。RKE2 自動使用 etcd 進行數據存儲,并去掉了 K3s 中包含的非標準組件。
K3s 中的標準 SQLite 數據庫更緊湊,可以在小型集群中優化性能。相比之下,RKE2 默認使用 etcd,因此更一致,讓您能直接集成其他需要 etcd 數據存儲的 Kubernetes 工具。
雖然 K3s 可以配置 etcd,但需要手動打開該選項。RKE2 是圍繞它設計的,因此能降低配置錯誤和性能不佳的風險。
K3s 還支持使用 MySQL 和 PostgreSQL 作為替代的存儲解決方案,因此可以使用現有的關系數據庫工具來管理 Kubernetes 數據,例如進行備份和維護。RKE2 僅適用于 etcd,不支持基于 SQL 的存儲。
邊緣操作是 K3s 的專長,而 RKE2 最大的優勢是安全性。
針對 CIS Benchmark 的強化RKE2 發行版的默認配置兼容 CIS Kubernetes Hardening Benchmark v1.23(RKE2 v1.25 及更早版本中為 v1.6)。RKE2 的默認值能讓集群以最少的手動操作達到標準要求。您仍然需要加強節點上的操作系統級別控制,其中包括應用適當的內核參數并確保 etcd 數據目錄受到保護。在啟動 RKE2 時,可以通過將profile
標志設置為cis-1.23
來強制使用安全配置。如果操作系統沒有得到適當的強化,RKE2 將退出并提示錯誤。除了配置操作系統之外,還必須設置合適的網絡策略和 Pod 安全準入規則,從而保護集群的工作負載。您可以將安全準入控制器配置為使用符合 CIS Benchmark 的配置文件,這將防止不合規的 Pod 部署到集群中。定期掃描威脅RKE2 發行版的安全性會在構建流水線時進行維護。我們會使用 Trivy 容器漏洞工具定期掃描組件以查找新的通用漏洞披露 (CVE)。因此,可以認為 RKE2 本身不存在可能讓攻擊者進入環境的威脅。符合 FIPS 140-2 標準K3s 缺乏正式的安全認證,而 RKE2 符合 FIPS 140-2 標準。該項目的 Go 代碼是使用 FIPS 驗證的加密模塊而不是 Go 標準庫中的版本編譯的。該發行版的每個組件(Kubernetes API Server、kubelet、捆綁的 kubectl 二進制文件等)都是使用 FIPS 兼容的編譯器編譯的。符合 FIPS 意味著 RKE2 可以部署在政府環境以及其他要求驗證加密性能的環境中。如果您使用內置組件(例如 containerd 運行時和 etcd 數據存儲),整個 RKE2 堆棧都是合規的。如果您需要運行在邊緣的高性能 Kubernetes 發行版,K3s 是首選解決方案。K3s 也非常適合單節點開發集群以及 CI 流水線和其他構建工具中使用的臨時環境。
如果您的主要目標是使用單個二進制文件部署具有所有依賴項的 Kubernetes,那么該發行版則是最佳選擇。它非常輕量、啟動快速且易于管理,讓您可以專注于編寫和測試應用程序。
如果您非常關注安全性,例如需要在政府服務和其他受到高度監管的行業(包括金融和醫療保健)中使用,就選用 RKE2。如前所述,完整的 RKE2 發行版符合 FIPS 140-2 標準,并通過 CIS Kubernetes Benchmark 進行了強化。它也是唯一獲得 DISA STIG 認證的 Kubernetes 發行版。
RKE2 已經過全面認證并與上游 Kubernetes 緊密結合。它去掉了非標準 Kubernetes 或不穩定的 alpha 功能的 K3s 組件,因此更容易在不同環境中相互操作您的部署。它還可以降低在手動強化 Kubernetes 集群時因疏忽而發生的不合規風險。
選擇 RKE2 而不是 K3s 的另一個主要用例是近邊緣計算。RKE2 支持多個 CNI 網絡插件,包括 Cilium、Calico 和 Multus。Multus 允許 pod 連接多個網絡接口,因此非常適合 telco 配送中心以及擁有多個不同生產設施的工廠等用例。在這些情況下,使用不同的網絡適配器提供強大的網絡支持至關重要。K3s 附帶了 Flannel 作為內置的 CNI 插件,可以安裝不同的 CNI,但所有配置都必須手動執行。RKE2 的默認發行版為常見的網絡解決方案提供了集成選項。
K3s 和 RKE2 都是流行的 Kubernetes 發行版,它們在多個方面相互重疊。它們的部署簡單、維護便捷,而且性能和兼容性都很高。
雖然專為微型和遠邊緣用例而設計,但 K3s 并不局限于這些場景。它還廣泛用于開發、實驗室或資源受限的環境中。但是,K3s 并不專注于安全性,因此您需要保護和強化您的集群。
RKE2 具有 K3s 的可用性,并將其應用于完全合規的發行版。它專注于安全性、與上游 Kubernetes 的關聯,以及政府機構等受監管環境的合規性。由于 RKE2 內置了高級網絡插件(包括 Multus)支持,因此它適用于數據中心和近邊緣用例。
您的選擇取決于集群運行的位置以及要部署的工作負載。如果想為重視安全的工作負載使用強化的發行版,或者有 FIPS 140-2 合規要求,那么就可以選用 RKE2,它將幫助您建立和維護安全基線。如果您的工作負載對安全性的要求不高,或者是邊緣工作負載,那么 K3s 則是一個不錯的替代方案,能讓您專注于應用程序本身而不是運行的環境。
這兩個發行版都可以由 Rancher 管理并與您的 DevOps 工具箱集成。您可以使用 Fleet 等解決方案通過 GitOps 策略大規模部署應用程序,然后前往 Rancher 儀表板監控工作負載。