K3S和 K8S 有何不同?
创始人
2025-05-30 16:19:02
0

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 -sfL https://get.k3s.io | sh -

这会执行来自 k3s 官方安装脚本[17],并在我们的 Linux 主机中将 K3s 作为服务运行。

作为替代方案,我们可以下载一个特定指定版本[18]并安装它。无论哪种方式,我们都可以将服务器配置[19]选项与环境变量[20]混合使用。

例如,我们可能想要禁用 Flannel 并使用不同的 CNI 提供程序。

我们可以通过运行脚本来做到这一点:

$ curl -sfL https://get.k3s.io | sh -s - --flannel-backend none

如果我们已经安装了 K3s 二进制文件,我们可以在命令行中添加环境变量前缀:

$ INSTALL_K3S_EXEC="--flannel-backend none" k3s server

2.2 集群访问

默认情况下,K3s 将在/etc/rancher/k3s目录中安装一个配置文件。安装完成后,和 K8s 类似,我们需要定义一个配置文件位置。

我们可以通过导出一个环境变量让 K3s 指向配置文件:

$ export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

作为替代方案,可以在 K8s 默认指向的主目录中定义配置文件:

$ mkdir -p ~/.kube
$ sudo k3s kubectl config view --raw | tee ~/.kube/config
$ chmod 600 ~/.kube/config

可以检查集群是否正在运行:

$ kubectl get nodes
NAME              STATUS   ROLES                  AGE    VERSION
   Ready    control-plane,master   4d3h   v1.25.6+k3s1

值得注意的是,我们可以看到控制平面将与主节点一起运行。

现在让我们看看创建了哪些容器(pods):

$ kubectl get pods --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 (8h ago)      4d2h
kube-system            traefik-66c46d954f-2lvzr                     1/1     Running            5 (8h ago)       4d2h
kube-system            coredns-597584b69b-sq7mk                     1/1     Running            5 (8h ago)       4d2h
kube-system            local-path-provisioner-79f67d76f8-2dkkt      1/1     Running            8 (8h ago)       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 -sfL https://get.k3s.io | K3S_URL=https://:6443 K3S_TOKEN=mynodetoken sh -

K3S_TOKEN 存储在本地:

$ cat /var/lib/rancher/k3s/server/node-token

一旦工作节点加入主节点,控制平面就会识别节点和在其上调度服务 Pod。

3、部署服务

$ kubectl create deployment nginx --image=nginx --port=80 --replicas=3$ kubectl get pods
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:

$ kubectl create service clusterip nginx --tcp=80:80

看看我们的服务定义:

$ kubectl describe service nginx
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-80  80/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: nginxannotations:ingress.kubernetes.io/ssl-redirect: "false"
spec:rules:- http:paths:- path: /pathType: Prefixbackend:service:name: nginxport:number: 80

我们可以通过将此资源应用于集群来创建 ingress:

$ kubectl apply -f .yaml

$ kubectl describe ingress nginx
Name:             nginx
Labels:           
Namespace:        default
Address:          192.168.1.103
Ingress Class:    traefik
Default backend:  
Rules:Host        Path  Backends----        ----  --------*/   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 是持续集成测试的不错选择。

相关内容

热门资讯

JavaScript == ... 文章目录JavaScript == & === & Obje...
解决Tomcat双击start... 目录 如何查看错误信息 配置JAVA_HOME环境变量 这种情况下,无法查看错误信息...
网络技术与应用概论(上)——“... 各位CSDN的uu们你们好呀,今天,小雅兰的内容依旧是计算机网络的一些知...
【全民Python】Pytho... 目录 一.编辑器相关 1.代码自动格式化设置 2.vscode python 第三方库自动补全 第三...
今年山西高考状元出炉,最新或2... 今年山西高考状元出炉,最新或2023(历届)山西文理科状元姓名学校及分数(公布) 最新或2023(历...
山西一本大学有哪些,最新或20... 山西一本大学排名学校名称学校所在地录取批次录取线差分数线录取平均分1太原理工大学211山西本科一批(...
吉林一本大学有哪些,最新或20... 吉林一本大学排名 学校名称 学校类型 全国排名1吉林大学综合92东北师范大学师范403延边大学综合1...
电子信息工程专业就业方向及就业... 电子信息工程专业就业方向及就业前景分析  电子信息工程是一门应用计算机等现代化技术进行电子信息控制...
idea Java API 操... 文章目录一、 hadoop window配置1.1 hadoop_home环境变量配置1.2 Had...
最新或2023(历届)吉林大学... 澄澈的不仅是天空,还有青春的眼眸;嘹亮的不只是呐喊,更是梦想的回音。9月22日的北国春城,阳光明媚,...
Boosting 算法(Ada... 文章目录AdaBoost 算法Boosting 的基本思路AdaBoost 算法提升树提升树模型提升...
最新或2023(历届)海南省高...   姓名:何声楷  分数:900分  学校:海南中学  何声楷,男,高三(1)班。最新或2023(历...
江西一本大学有哪些,最新或20... 江西一本大学排名全国排名学校名称学校类型177南昌大学综合2151江西师范大学师范3159江西财经大...
最新或2023(历届)郴州市高... 最新或2023(历届)湖南郴州高考理科状元!  最新或2023(历届)湖南郴州高考理科第一名为来自郴...
湖北实施高考改革八问 学业水平...  《国家有关深化考试招生制度改革的实施意见》已出台,湖北省什么时候进行高考改革呢?”“文理不分科,学...
高考改革后,高考新政后的高中生...   《国务院关于深化考试招生制度改革的实施意见》4日发布,标志着新一轮考试招生制度改革全面启动。《实...
高考不分文理科 高一、初一家长...  近日印发的《关于深化考试招生制度改革的实施意见》提出,改革考试科目设置,考生总成绩由统一高考的语文...
山东高考改革方案年内公布 四大...  国务院关于深化考试招生制度改革的实施意见,提出了高考不分文理科、只考语数外三科等一系列重大变化,引...
高考改革文理不分科 高中六副科... 取消文理分科,学业压力变大还是变小?高中学业水平测试“六选三”,是否会受到高考报考专业的科目限制?学...
三门计入高考总分学考科目可文理...  最新或2023(历届)起,全国将全面推进考试招生改革,高考录取总成绩未来将由3门必考科目(语文、数...