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
可以檢查集群是否正在運行:
$kubectlgetnodes NAME STATUS ROLES AGE VERSIONReady control-plane,master 4d3h v1.25.6+k3s1
值得注意的是,我們可以看到控制平面將與主節點一起運行。
現在讓我們看看創建了哪些容器(pods):
$kubectlgetpods--all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE kube-system helm-install-traefik-crd-6v28l 0/1 Completed 0 4d2h kube-system helm-install-traefik-vvfh2 0/1 Completed 2 4d2h kube-system svclb-traefik-cfa7b330-fkmms 2/2 Running 10(8hago) 4d2h kube-system traefik-66c46d954f-2lvzr 1/1 Running 5(8hago) 4d2h kube-system coredns-597584b69b-sq7mk 1/1 Running 5(8hago) 4d2h kube-system local-path-provisioner-79f67d76f8-2dkkt 1/1 Running 8(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://:6443K3S_TOKEN=mynodetokensh-
K3S_TOKEN 存儲在本地:
$cat/var/lib/rancher/k3s/server/node-token
一旦工作節點加入主節點,控制平面就會識別節點和在其上調度服務 Pod。
3、部署服務
$kubectlcreatedeploymentnginx--image=nginx--port=80--replicas=3 $kubectlgetpods NAME READY STATUS RESTARTS AGE nginx-ff6774dc6-ntxv6 1/1 Running 0 17s nginx-ff6774dc6-qs4r6 1/1 Running 0 17s nginx-ff6774dc6-nbxmx 1/1 Running 0 17s
應該看到三個正在運行的容器。
Pod 不是永久資源,會不斷創建和銷毀,IP 發生變化。因此,需要一個服務來動態地將 pod 的 IP 映射到外部世界。
我們將選擇一個 ClusterIp 類型的 Service:
$kubectlcreateserviceclusteripnginx--tcp=80:80
看看我們的服務定義:
$kubectldescribeservicenginx Name: nginx Namespace: default Labels: app=nginx Annotations:Selector: app=nginx Type: ClusterIP IP Family Policy:SingleStack IP Families: IPv4 IP: 10.43.238.194 IPs: 10.43.238.194 Port: 80-8080/TCP TargetPort: 80/TCP Endpoints: 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/v1 kind:Ingress metadata: name:nginx annotations: ingress.kubernetes.io/ssl-redirect:"false" spec: rules: -http: paths: -path:/ pathType:Prefix backend: service: name:nginx port: number:80
我們可以通過將此資源應用于集群來創建 ingress:
$kubectlapply-f.yaml
$kubectldescribeingressnginx Name: nginx Labels:Namespace: default Address: 192.168.1.103 Ingress Class: traefik Default backend: Rules: Host PathBackends ---- ------------ * / 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
-
Linux
+關注
關注
87文章
11457瀏覽量
212766 -
服務器
+關注
關注
13文章
9683瀏覽量
87271 -
操作系統
+關注
關注
37文章
7081瀏覽量
124938 -
kubernetes
+關注
關注
0文章
239瀏覽量
8969
原文標題:K3S和 K8S 有何不同?
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
OpenStack與K8s結合的兩種方案的詳細介紹和比較
如何使用kubernetes client-go實踐一個簡單的與K8s交互過程

Docker不香嗎為什么還要用K8s
簡單說明k8s和Docker之間的關系
K8S集群服務訪問失敗怎么辦 K8S故障處理集錦

mysql部署在k8s上的實現方案
k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres
什么是K3s和K8s?K3s和K8s有什么區別?
k8s生態鏈包含哪些技術

k8s云原生開發要求

評論