0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是K3s和K8s?K3s和K8s有什么區(qū)別?

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-08-03 10:53 ? 次閱讀

Kubernetes,通??s寫為 K8s,是領先的容器編排工具。該開源項目最初由 Google 開發(fā),幫助塑造了現代編排的定義。該系統(tǒng)包括了部署和運行容器化系統(tǒng)所需的一切。

社區(qū)供應商基于 Kubernetes 創(chuàng)建了適用于不同用例的獨立發(fā)行版。K3s[1]是由 Rancher 創(chuàng)建的一種 kubernetes 流行發(fā)行版,現在作為云原生計算基金會[2](CNCF)的一部分進行維護。

K3s 的目標是成為一個輕量級的 Kubernetes 版本,適合在資源受限的硬件上使用,例如 IoT 設備。它還易于設置和使用,因此非常適合用于本地開發(fā)集群。它專注于邊緣部署,但并不排除對大規(guī)模云部署的支持:K3s 的 CNCF 認證意味著它提供了所有 Kubernetes 功能,并且可以用于生產環(huán)境。

在本文中,你將了解 K3s 與 Kubernetes 項目提供的官方發(fā)行版之間的比較,包括它們的區(qū)別、何時使用它們以及掌握它們的容易程度。

什么是 K8s

Kubernetes 是一個開源的容器編排引擎,用來對容器化應用進行自動化部署、 擴縮和管理。該項目托管在 CNCF。

Kubernetes 提供了部署容器并在多個主機上進行擴展的所有所需工具。Kubernetes 集群中的每臺主機被稱為一個節(jié)點,節(jié)點由 Kubernetes 控制平面管理。它會將你的容器調度到空閑節(jié)點上,管理網絡和存儲并提供與之交互的 API

什么是 K3s

K3s 是由 Rancher 主導開發(fā)的 Kubernetes 發(fā)行版。它在不分叉的基礎上構建了上游項目。概念上,Kubernetes 發(fā)行版類似于 Linux 操作系統(tǒng):K3s 是一種 Kubernetes 發(fā)行版,就像 Ubuntu 是一種 Linux 發(fā)行版一樣。K3s 在保留 Kubernetes 功能的基礎上,還增加了自己的功能。

K3s 經過專門設計,即使在最小的硬件環(huán)境中也能良好運行。K3s 提供了一個小于 60MB 的單個二進制文件。這個輕量級可執(zhí)行文件包含了啟動完全功能的 Kubernetes 集群所需的一切。

通過放棄非必要的 Kubernetes 功能(如云服務提供商集成和非 CSI[3]存儲提供商),實現了這個小巧的二進制文件大小。利用 Go 語言的goroutines[4],將各個 Kubernetes 組件從單個入口點運行起來。

K3s 和 K8s 易于部署

通常情況下,相比 K8s,K3s 更容易部署和維護。輕量級的二進制文件讓你可以用一個命令啟動所有的 Kubernetes 控制平面組件。而要啟動官方的 Kubernetes 集群則需要更多的時間和步驟,并且可能更難維護。

部署 K3s

以下命令可以啟動并運行一個 K3s 集群:

$curl-sFLhttps://get.k3s.io|sh-

官方的安裝腳本會下載二進制文件并注冊一個系統(tǒng)服務,該系統(tǒng)服務會在進程終止或主機重新啟動時自動啟動 K3s。它還配置了 Kubernetes 實用工具,包括 kubectl CLI。在新的機器上運行腳本后,你應該能夠在幾秒鐘內與你的集群進行交互:

$kubectlrunnginx--image=nginx
pod/nginxcreated

你可以通過在其他節(jié)點上運行以下命令,輕松地將節(jié)點加入到你的 K3s 集群中:

$sudok3sagent--serverhttps://:6443
--token

你可以通過從運行 K3s 控制平面的機器上讀取/var/lib/rancher/k3s/server/node-token文件來獲取的值。

K3s 還可以通過 Rancher 開發(fā)的k3d[5]部署。k3d 將 K3s 封裝在 docker 容器內并運行。K3d 允許你在單個主機上運行多個 K3s 集群,并使用熟悉的 Docker 工具進行管理。你可以使用以下命令安裝 k3d:

$curl-shttps://raw.githubusercontent.com/k3d-io/k3d/main/install.sh|
TAG=v5.4.5bash

然后創(chuàng)建你的第一個集群:

$k3dcreateclusterdemo-cluster

現在你可以使用 kubectl 來向 k3d/K3s 集群添加對象:

$kubectlrunnginx–imagenginx:latest
pod/nginxcreated

部署 K8s

K8s 的部署過程比較復雜。Kubernetes 項目提供了各個組件的下載,比如:API server、controller manager 和 scheduler。你需要成功部署每個組件來創(chuàng)建你的控制平面。然后,你還需要在每個工作節(jié)點上安裝 kubelet。

通過 kubeadm 工具,可以簡化 Kubernetes 安裝。在使用 kubeadm 之前,你需要安裝一個容器運行時,比如containerd[6]。然后,你可以運行以下命令在你的主機上初始化 Kubernetes 控制平面:

$kubeadminit

初始化完成后,系統(tǒng)會告訴你運行下一步需要做什么:

$mkdir-p$HOME/.kube
$sudocp-i/etc/kubernetes/admin.conf$HOME/.kube/config
$sudochown$(id-u):$(id-g)$HOME/.kube/config

然后,你需要手動選擇并安裝一個 Pod 網絡插件,這樣你的 Pod 才能相互通信。Flannel 是一個受歡迎的選項:

$kubectlapply-fhttps://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yaml

經過所有這些步驟,你就可以向集群中添加節(jié)點了:

kubeadmjoin--token:
--discovery-token-ca-cert-hashsha256:

的值是通過在控制平面主機上運行kubeadm token list命令獲取的。要找到正確的discovery-token-ca-cert-hash,你需要在控制平面主機上運行以下命令:

opensslx509-pubkey-in/etc/kubernetes/pki/ca.crt|opensslrsa-pubin
-outformder2>/dev/null|openssldgst-sha256-hex|sed's/^.*//'

使用 kubeadm 啟動本地 Kubernetes 集群比使用 K3s 要復雜得多。K3s 抽象了集群設置步驟,使得快速啟動和運行變得更加簡單。在本地使用 K8s 需要額外的時間和精力來學習安裝過程并配置環(huán)境。

K3s 和 K8s 之間的主要區(qū)別

K8s 和 K3s 對用戶提供了相同的功能接口。如果你有一個 Kubernetes YAML 清單,你可以在兩個集群中使用任何一個進行部署,而無需進行修改。

這兩個發(fā)行版的區(qū)別在于它們的打包方式和包含的組件。以下是一些你應該考慮的關鍵特點:

默認安裝的組件

K8s 和 K3s 打包了不同的組件來實現 Kubernetes 的架構。其中最大的變化之一就是控制平面使用的數據存儲:上游 Kubernetes 使用 etcd,而 K3s 選擇使用內置的 SQLite 數據庫。這通常提高了性能并減小了二進制文件的大小,但可能不適用于大規(guī)模集群。如果需要,K3s 也可以連接到外部的 etcd 或使用 K3s 內置的 etcd 數據存儲,以及其他基于 SQL 的數據庫,如 MySQL 和 PostgreSQL。

標準的 Kubernetes 發(fā)行版只包括控制平面所需的組件。K3s 還內置了常用的生態(tài)工具,比如:kubectl。

K3s 集成了 Helm 支持[7],可以通過將 Helm Chart 表示為集群中的HelmChart對象來部署 Helm Chart。然而,上游 Kubernetes 不理解 Helm;你需要單獨安裝 Helm CLI 并使用其命令來安裝你的 Chart。

K8s 和 K3s 都使用 containerd 作為默認的容器運行時,但這可以進行定制。K3s 還包含了其他幾個來自社區(qū)的組件,包括用于 Pod 網絡的 flannel 以及作為入口控制器和內置負載均衡器的 Traefik。Kubernetes 讓你自己選擇和安裝這些工具,而 K3s 則內置了我們常用的工具。

當你不想花太多的時間成本去學習 K8s 各個組件作用時,K3s 是更好的選擇。它可以啟動一個功能完整的集群,并且可用于生產。

資源要求

K3s 可以在 1C 512MB 的設備上運行,K3s 二進制文件大小不到 60 MB,并且不需要外部依賴。

使用 kubeadm 創(chuàng)建的集群具有更高的資源需求。文檔建議至少有兩個空閑的 CPU 核和 2 GB 的內存。控制平面組件的增加開銷意味著需要更多的硬件資源才能達到相同的結果。這在云上部署集群時可能會增加成本。

K3s 是資源受限環(huán)境的優(yōu)先選擇。這是該項目的核心關注領域。請記住,雖然 K3s 可以運行在 512 MB 內存的設備上,但并不推薦這樣,因為你需要給應用程序預留運行空間。

升級

K3s 提供簡化的集群升級體驗。你只需再次運行安裝腳本即可下載最新版本并自動完成升級:

$curl-sfLhttps://get.k3s.io|sh-

在每個節(jié)點上重復執(zhí)行此命令將使你的集群升級到最新的穩(wěn)定版本,無需任何手動干預。

對于使用 kubeadm 創(chuàng)建的 K8s 集群進行升級需要執(zhí)行幾個額外的步驟。你需要獲取最新版本的 kubeadm:

#Updatingtov1.24.1
$apt-getupdate
$apt-getinstall-ykubeadm=1.24.1

接下來,使用 kubeadm 升級你的控制平面:

$kubeadmupgradeapplyv1.24.1

最后,升級每個工作節(jié)點上的 kubelet 和 kubectl:

$apt-getupdate
$apt-getinstall-ykubelet=1.24.1kubectl=1.24.1
$systemctldaemon-reload
$systemctlrestartkubelet

K3s 再次提供了更簡單、無需干預的體驗。Kubeadm 的升級同樣也相對簡單,但需要運行更多的命令。這增加了升級過程中出錯的可能性。而使用 K3s,你只需調用安裝腳本并等待集群更新即可。

速度

在等效硬件上部署的 K8s 集群和 K3s 集群應該可以以相似的性能運行你的容器,因為它們使用相同的 containerd 運行時。然而,K3s 非常輕巧,它安裝和啟動控制平面的速度要比 K8s 快得多。

相比之下,上游的 Kubernetes 可能需要幾分鐘才能啟動(而 K3s 通常在一分鐘內可用)。這使得 K3s 更適合于臨時的集群,例如本地開發(fā)和測試環(huán)境。你可以快速啟動一個集群,使用后再將 K3s 關閉。

安全

K3s 在設計上是安全的,并提供了一個最小的攻擊面。所有組件都打包在一個二進制文件中,減少的依賴關系使得安全漏洞的出現可能性較小。

這并不意味著 K8s 是不安全的。Kubernetes 已成為最受歡迎的開源項目之一,被全球各大公司采用。它經過定期審查,以確保集群受到攻擊的保護。

無論你使用哪種解決方案,你都應該在安裝后加強集群的安全保護。K3s 和Kubernetes 都有自己的安全建議[8],用于創(chuàng)建安全的集群。

K3s 和 K8s 的理想使用場景

K3s 具有最低的硬件要求,適用于資源受限的環(huán)境,這些環(huán)境無法容納標準的 K8s 集群。K3s 放棄了諸如 etcd 之類的組件,而選擇了更小的替代方案,這意味著 K3s 可以適應 IoT 和邊緣設備。

同時,K3s 也是在開發(fā)測試環(huán)境中運行本地 Kubernetes 集群的理想解決方案。工程師可以在幾秒鐘內快速啟動自己的環(huán)境,而無需安裝依賴項或在云中使用托管的 Kubernetes 服務產生成本。你甚至可以在 CI 流水線腳本中運行 K3s,以簡化測試流程。

雖然 K3s 適用于許多不同的環(huán)境,但在某些情況下,使用更大的 Kubernetes 發(fā)行版可能更合理。例如,在 大規(guī)模部署或需要使用依賴于 K8s 特定組件的場景時。如果你在這個規(guī)模上運作,你可能需要使用 kubeadm 或其他工具部署和維護 K8s。對于希望對各個控制平面組件具有完全控制權的大型集群,K3s 的簡單性可能會過于局限。

總結

Kubernetes 是部署和分發(fā)容器的領先編排工具。雖然它在推動容器進入生產技術方面發(fā)揮了重要作用,但純 Kubernetes 仍然相當復雜且難以維護。

K3s 通過提供一個經過 CNCF 認證的 Kubernetes 發(fā)行版,將其打包為一個不到 60MB 的單個二進制文件,解決了這些挑戰(zhàn)。它的輕量級方案讓你可以在邊緣、工作站和傳統(tǒng)云環(huán)境中運行相同版本的 Kubernetes。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 開源
    +關注

    關注

    3

    文章

    3125

    瀏覽量

    42067
  • 容器
    +關注

    關注

    0

    文章

    490

    瀏覽量

    21986
  • IOT
    IOT
    +關注

    關注

    186

    文章

    4096

    瀏覽量

    195078
  • go語言
    +關注

    關注

    1

    文章

    156

    瀏覽量

    8996
  • kubernetes
    +關注

    關注

    0

    文章

    222

    瀏覽量

    8655

原文標題:K3s vs K8s:輕量級和全功能的對決

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    k8s核心原理學習指南3

    k8s學習3 - 核心原理
    發(fā)表于 09-25 16:37

    如何利用K8S全面擁抱微服務架構?

    K8S是第一個將“一切以服務為中心,一切圍繞服務運轉”作為指導思想的創(chuàng)新型產品,它的功能和架構設計自始至終都遵循了這一指導思想,構建在K8S上的系統(tǒng)不僅可以獨立運行在物理機、虛擬機集群或者企業(yè)私有云上,也可以被托管在公有云中。
    的頭像 發(fā)表于 10-08 15:59 ?2.6w次閱讀

    OpenStack與K8s結合的兩種方案的詳細介紹和比較

    OpenStack與K8S結合主要有兩種方案。一是K8S部署在OpenStack平臺之上,二是K8S和OpenStack組件集成。
    的頭像 發(fā)表于 10-14 09:38 ?2.7w次閱讀

    如何使用kubernetes client-go實踐一個簡單的與K8s交互過程

    【導讀】Kubernetes項目使用Go語言編寫,對Go api原生支持非常便捷。 本篇文章介紹了如何使用kubernetes client-go實踐一個簡單的與K8s交互過程
    的頭像 發(fā)表于 02-02 11:16 ?6532次閱讀
    如何使用kubernetes client-go實踐一個簡單的與<b class='flag-5'>K8s</b>交互過程

    Docker不香嗎為什么還要用K8s

    Docker 雖好用,但面對強大的集群,成千上萬的容器,突然感覺不香了。 這時候就需要我們的主角 Kubernetes 上場了,先來了解一下 K8s 的基本概念,后面再介紹實踐,由淺入深步步為營
    的頭像 發(fā)表于 06-02 11:56 ?3338次閱讀

    簡單說明k8s和Docker之間的關系

    這篇文章主要介紹了k8s和Docker關系簡單說明,本文利用圖文講解的很透徹,需要的同學可以研究下 最近項目用到kubernetes(以下簡稱k8sk
    的頭像 發(fā)表于 06-24 15:48 ?3259次閱讀

    K8S集群服務訪問失敗怎么辦 K8S故障處理集錦

    。 kubectl delete svc nginx-deployment 問題3K8S集群服務暴露失敗? Error from server (AlreadyExists): services “nginx-deployment” already exists 原因分
    的頭像 發(fā)表于 09-01 11:11 ?1.5w次閱讀
    <b class='flag-5'>K8S</b>集群服務訪問失敗怎么辦 <b class='flag-5'>K8S</b>故障處理集錦

    K8S(kubernetes)學習指南

    K8S(kubernetes)學習指南
    發(fā)表于 06-29 14:14 ?0次下載

    mysql部署在k8s上的實現方案

    的 RDBMS (Relational Database Management System,關系數據庫管理系統(tǒng)) 應用軟件之一。這里主要講 mysql 部署在 k8s 上,mysql 部署在 k8s 上的優(yōu)勢主要有以下幾點。
    的頭像 發(fā)表于 09-26 10:39 ?2346次閱讀

    切換k8s上下文多快

    use-context 命令就會很低效。 今天介紹3個工具會讓你在多k8s集群環(huán)境中工作的很輕松。我將從以下幾個方面來評估工具實用性: 速度 如果你多個k8s集群可選擇,你切換
    的頭像 發(fā)表于 05-29 15:26 ?649次閱讀
    切換<b class='flag-5'>k8s</b>上下文<b class='flag-5'>有</b>多快

    k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres

    k8s是什么意思? kubernetes簡稱K8s,是一個開源的,用于管理云平臺中多個主機上的容器化的應用,Kubernetes的目標是讓部署容器化的應用簡單并且高效(powerful
    發(fā)表于 07-19 13:14 ?1003次閱讀

    k8s生態(tài)鏈包含哪些技術

    1. Apache APISIX Ingress 定義 ? 在 K8s 生態(tài)中,Ingress 作為表示 K8s 流量入口的一種資源,想要讓其生效,就需要有一個 Ingress Controller
    的頭像 發(fā)表于 08-07 10:56 ?1028次閱讀
    <b class='flag-5'>k8s</b>生態(tài)鏈包含哪些技術

    跑大模型AI的K8s與普通K8s區(qū)別分析

    Kubernetes是一個在大量節(jié)點上管理容器的系統(tǒng),其主要功能總結起來,就是在想要啟動容器的時候,負責“找一個「空閑」節(jié)點,啟動容器”。但是它默認考慮的啟動因素(資源類)主要就是“CPU+內存”。就是容器指定“我要多少CPU+多少內存”,然后K8s找到符合這個要求的節(jié)點。
    發(fā)表于 09-03 12:07 ?767次閱讀

    K8S落地實踐經驗分享

    k8s 即 Kubernetes,是一個開源的容器編排引擎,用來對容器化應用進行自動化部署、 擴縮和管理。
    的頭像 發(fā)表于 01-02 11:45 ?895次閱讀
    <b class='flag-5'>K8S</b>落地實踐經驗分享

    常用的k8s容器網絡模式哪些?

    常用的k8s容器網絡模式包括Bridge模式、Host模式、Overlay模式、Flannel模式、CNI(ContainerNetworkInterface)模式。K8s的容器網絡模式多種多樣
    的頭像 發(fā)表于 09-19 11:29 ?51次閱讀