K3S和 K8S 有何不同?
1、K3s:輕量級的K8s
K3s 是CNCF 認證的 Kubernetes 發行版和Sandbox專案,專為低資源環境而設計。由 Rancher Labs 維護著 K3s。
總的來說,K3s 提供了一個開銷較小的 Kubernetes 叢集設定,但仍然集成了 K8s 的大部分架構和功能。
以下是 K3s 成為輕量級發行版的原因:
-
• 打包為具有最小外部依賴性的單個二進位制檔案 -
• 低硬體要求和記憶體佔用 -
• 能夠作為單個伺服器和高可用性伺服器執行
K3s 將標準的 Kubernetes元件打包在一個不到 100 MB 的二進位制檔案中。這是透過刪除額外的驅動程式、可選的卷外掛和第三方雲集成來完成的。
K3s 應該能夠在具有至少 512M RAM(儘管建議使用 1GB)和一個 CPU 的 Linux 作業系統中執行。
儘管 K3s 是 Kubernetes 的輕量級版本,但它並沒有改變 Kubernetes 的核心工作方式。K3s 架構由執行在叢集中的 master 伺服器和代理(或工作節點)組成。它仍然有 CoreDNS 和 Ingress Controller 作為核心 Networking 的一部分。它有一個內建的 SQLite 資料庫來儲存所有的伺服器資訊。
儘管如此,如果我們需要一個高可用性伺服器,也可以插入到一個外部資料庫,例如ETCD[8]、MySQL[9]或Postgres[10]。Flannel[11]作為叢集網路的預設CNI[12]外掛。
最後,作為完全認證的 K8s 版本,我們可以編寫 YAML 來像使用 K8s 一樣在 K3s 叢集上執行。例如,當我們管理工作負載[13]或定義 pod與服務和負載平衡的網路[14]時,同樣使用kubectl[15]與叢集互動。
2、使用
下面看看如何安裝 K3s,如何訪問叢集,如何將節點新增到 master。
2.1 安裝
基本安裝命令:
curl-sfLhttps://get.k3s.io|sh-
這會執行來自 k3s 官方安裝指令碼[17],並在我們的 Linux 主機中將 K3s 作為服務執行。
作為替代方案,我們可以下載一個特定指定版本[18]並安裝它。無論哪種方式,我們都可以將伺服器配置[19]選項與環境變數[20]混合使用。
例如,我們可能想要停用 Flannel 並使用不同的 CNI 提供程式。
我們可以透過執行指令碼來做到這一點:
$curl-sfLhttps://get.k3s.io|sh-s---flannel-backendnone
如果我們已經安裝了 K3s 二進位制檔案,我們可以在命令列中新增環境變數字首:
$INSTALL_K3S_EXEC="--flannel-backendnone"k3sserver
2.2 叢集訪問
預設情況下,K3s 將在
/etc/rancher/k3s
目錄中安裝一個配置檔案。安裝完成後,和 K8s 類似,我們需要定義一個配置檔案位置。我們可以透過匯出一個環境變數讓 K3s 指向配置檔案:
$exportKUBECONFIG=/etc/rancher/k3s/k3s.yaml
作為替代方案,可以在 K8s 預設指向的主目錄中定義配置檔案:
$mkdir-p~/.kube$sudok3skubectlconfigview--raw|tee~/.kube/config$chmod600~/.kube/config
可以檢查叢集是否正在執行:
$kubectlgetnodesNAMESTATUSROLESAGEVERSION<cluster-name>Readycontrol-plane,master4d3hv1.25.6+k3s1
值得注意的是,我們可以看到控制平面將與主節點一起執行。
現在讓我們看看建立了哪些容器(pods):
$kubectlgetpods--all-namespacesNAMESPACENAMEREADYSTATUSRESTARTSAGEkube-systemhelm-install-traefik-crd-6v28l0/1Completed04d2hkube-systemhelm-install-traefik-vvfh20/1Completed24d2hkube-systemsvclb-traefik-cfa7b330-fkmms2/2Running10(8hago)4d2hkube-systemtraefik-66c46d954f-2lvzr1/1Running5(8hago)4d2hkube-systemcoredns-597584b69b-sq7mk1/1Running5(8hago)4d2hkube-systemlocal-path-provisioner-79f67d76f8-2dkkt1/1Running8(8hago)4d2h
可以在叢集上看到可用 pod 的列表。
可以看到一個基本的 K3s 設定,包括:
-
• Traefik[21]作為 HTTP 反向代理和負載均衡的入口控制器 -
• CoreDns[22]管理叢集和節點內的 DNS 解析 -
• Local Path Provisioner[23]提供了一種在每個節點中利用本地儲存的方法 -
• Helm[24],我們可以使用它來打包、部署
K3s 將在單個伺服器或代理程序中執行所有元件,而不是在不同的程序中執行元件。由於它被打包在一個檔案中,我們也可以[離線安裝]((https://docs.k3s.io/installation/airgap “離線安裝”)。當然,我們還可以使用 K3d[25] 在 Docker 中執行 K3s 。
2.3 新增節點
如果我們想將節點新增到叢集中,只需要執行指向節點主機的相同命令:
$curl-sfLhttps://get.k3s.io|K3S_URL=https://<node-host>:6443K3S_TOKEN=mynodetokensh-
K3S_TOKEN 儲存在本地:
$cat/var/lib/rancher/k3s/server/node-token
一旦工作節點加入主節點,控制平面就會識別節點和在其上排程服務 Pod。
3、部署服務
$kubectlcreatedeploymentnginx--image=nginx--port=80--replicas=3$kubectlgetpodsNAMEREADYSTATUSRESTARTSAGEnginx-ff6774dc6-ntxv61/1Running017snginx-ff6774dc6-qs4r61/1Running017snginx-ff6774dc6-nbxmx1/1Running017s
應該看到三個正在執行的容器。
Pod 不是永久資源,會不斷建立和銷燬,IP 發生變化。因此,需要一個服務來動態地將 pod 的 IP 對映到外部世界。
我們將選擇一個 ClusterIp 型別的 Service:
$kubectlcreateserviceclusteripnginx--tcp=80:80
看看我們的服務定義:
$kubectldescribeservicenginxName:nginxNamespace:defaultLabels:app=nginxAnnotations:<none>Selector:app=nginxType:ClusterIPIP Family Policy:SingleStackIP Families:IPv4IP:10.43.238.194IPs:10.43.238.194Port:80-8080/TCPTargetPort:80/TCPEndpoints:10.42.0.10:80,10.42.0.11:80,10.42.0.9:80
我們可以看到訪問應用程式的 pod(或容器)地址對應的 Endpoints。
服務沒有直接訪問許可權。Ingress Controller 通常位於它前面,用於快取、負載平衡和安全合規控制,例如過濾掉惡意請求。
最後,讓我們在 YAML 檔案中定義一個 Traefik 控制器。這會將流量從傳入請求路由到服務:
apiVersion:networking.k8s.io/v1kind:Ingressmetadata:name:nginxannotations:ingress.kubernetes.io/ssl-redirect:"false"spec:rules:-http:paths:-path:/pathType:Prefixbackend:service:name:nginxport:number:80
我們可以透過將此資源應用於叢集來建立 ingress:
$kubectlapply-f<nginx-ingress-file>.yaml
$kubectldescribeingressnginxName:nginxLabels:<none>Namespace:defaultAddress:192.168.1.103Ingress Class:traefikDefault backend:<default>Rules:HostPathBackends----------------*/nginx:80(10.42.0.10:80,10.42.0.11:80,10.42.0.9:80)Annotations: ingress.kubernetes.io/ssl-redirect:false
現在可以透過從主機或瀏覽器向 192.168.1.103 地址傳送 GET 請求來訪問 Nginx 主頁。
我們可能想向入口控制器新增一個 負載均衡器[26] K3s 預設使用 ServiceLB[27]。
4、K8s 和 K3s 有何不同
K3s 和 K8s 之間最顯著的區別是包裝。K3s 是一個不到 100MB 的單一打包二進位制檔案。K8s 有多個元件作為程序執行。
此外,作為一個更輕量級的版本,K3s 可以在幾秒鐘內啟動一個 Kubernetes 叢集。我們可以用更少的資源更快地執行操作。
K3s 支援 AMD64、ARM64 和 ARMv7 等架構。這意味著我們可以在任何地方執行它,例如,在 Raspberry PI Zero 中。K3s 還可以處理連線受限的環境。
在學習 K3s 時上手更快,需要掌握的命令更少。開始使用它的工作量比 K8s 少,例如,如果我們還沒有使用分散式叢集的背景。
但是,對於複雜的叢集或繁重的工作負載,我們仍然應該考慮使用 K8s。K3s 確實提供了一個高可用性選項,但它需要做更多的工作才能插入,例如,不同的資料庫或整合雲提供商。
如果要在 K3s 和 K8s 之間做出決定,可能會歸結為資源的考量。但是,K3s 是持續整合測試的不錯選擇。
連結:https://blog.csdn.net/qq_39578545/article/details/129647767
(版權歸原作者所有,侵刪)
文末福利
就目前來說,傳統運維衝擊年薪30W+的轉型方向就是SRE&DevOps崗位。
為了幫助大家早日擺脫繁瑣的基層運維工作,給大家整理了一套高階運維工程師必備技能資料包,內容有多詳實豐富看下圖!
共有 20 個模組





······



以上所有資料獲取請掃碼
備註:最新運維資料

100%免費領取
(後臺不再回復,掃碼一鍵領取)