当前位置: 首页 > news >正文

K3s简介、实战、问题记录

概述

K3s由Rancher Labs开发,是一个开源的,轻量级的Kubernetes(下文简称k8s)发行版,专为边缘计算、IoT和资源受限环境设计;保留k8s核心功能,并去掉部分非必要组件。

官网,中文文档1,中文文档2。

选择K3s的三大理由:

  • 完美适配边缘环境:K3s是一个高可用的、经过CNCF认证的Kubernetes发行版,专为无人值守、资源受限、偏远地区或物联网设备内部的生产工作负载而设计;
  • 简单且安全:K3s被打包成单个小于60MB的二进制文件,从而减少运行安装、运行和自动更新生产Kubernetes集群所需的依赖性和步骤;
  • 针对ARM进行优化:ARM64和ARMv7都支持二进制文件和多源镜像。K3s在小到树莓派或大到AWS a1.4xlarge 32GiB服务器的环境中均能出色工作。

适用场景

  • 资源受限:如边缘计算、IoT设备,资源有限;
  • 开发和测试:需要快速搭建一个轻量级的k8s环境;
  • 小型集群:节点数量较少,不需要复杂的配置;
  • 快速部署:需要一键安装和极简配置;
  • 低成本运维:减少硬件和维护成本。

架构

架构简图
在这里插入图片描述
采用典型的服务器-代理架构,即Server-Agent架构。在K3s集群中,节点角色有两种:

  • Control Plane Nodes:控制平面节点,处理集群的管理任务,包括调度、控制循环和集群状态管理;一般会运行以下组件:kube-apiserver、kube-controller-manager、kube-scheduler和etcd;
  • Worker Nodes:工作节点,运行应用程序的工作负载(Pods);一般会运行以下组件:kubelet、kube-proxy和container runtime。

k3s使用Containerd作为其底层容器运行时。
在这里插入图片描述
Agent与Server之间的交互
在这里插入图片描述
K3s内嵌组件
在这里插入图片描述

网络

在这里插入图片描述

负载均衡

在K3s中配置负载均衡策略通常涉及k8s Service和Ingress资源:

  • k8s Service
    k8s Service提供基本的负载均衡能力,可通过创建不同类型的Service来实现不同的负载均衡策略:
    • ClusterIP:仅集群内部可以访问;
    • NodePort:每个选定的Node上开放一个静态端口,从集群外部也可以访问;
    • LoadBalancer:在支持 LoadBalancer 的云平台(如 AWS,GCP,Azure)上创建外部负载均衡器;
    • ExternalName:通过 DNS 将服务映射到外部服务。
  • Ingress控制器
    对于更复杂的路由和负载均衡需求,可使用Ingress资源。Ingress控制器(如Nginx,Traefik)可提供HTTP/HTTPS路由、SSL终止等功能。
  • LoadBalancer服务类型
    在支持LoadBalancer的云环境中,可直接使用LoadBalancer服务类型。如在AWS或GCP上,Kubernetes会自动为你创建一个外部负载均衡器。
apiVersion: v1
kind: Service
metadata:name: my-service-lb
spec:type: LoadBalancerselector:app: MyAppports:- protocol: TCPport: 80targetPort: 9376
  • MetalLB
    如果在裸金属服务器上运行K3s,可使用MetalLB来提供裸金属集群的负载均衡能力。

安装MetalLB:bash kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.10.2/manifests/metallb.yaml

实战

集群部署

install.sh脚本负责下载二进制文件、设置适当的系统服务和配置初始集群。
在这里插入图片描述
安装主节点:
curl -sfL https://get.k3s.io | sh -

速度非常慢,那就对了。

使用国内镜像安装:curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh

安装从节点是可选地。验证k3s是否安装成功,执行命令:
k3sk3s -v

安装从节点前需要知道主节点的IP地址和Token,在主节点执行命令查看Token:
cat /var/lib/rancher/k3s/server/node-token

使用国内镜像,安装从节点:
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | K3S_URL=https://192.168.0.108:6443 K3S_TOKEN=<>::server:<> INSTALL_K3S_MIRROR=cn sh -

有点不理解k3s的逻辑,使用上述命令安装从节点时,下载安装最新版本,而没有和主节点版本保持一致。

忘记截图。。

指定版本安装从节点(保持与主节点版本一致):
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_VERSION=v1.32.3+k3s1 K3S_URL=https://192.168.105.52:6443 K3S_TOKEN=<>::server:<> INSTALL_K3S_MIRROR=cn sh -

验证集群安装效果,在主(或从)节点执行:
k3s kubectl get node
输出类似于如下截图,则表明集群安装成功:
在这里插入图片描述

卸载

如果想升级k3s,或修改某些配置后,部分命令执行结果不对,或错误地修改配置,需要卸载k3s集群,然后重新安装新版本。

先卸载从节点:

systemctl stop k3s-agent
/usr/local/bin/k3s-agent-uninstall.sh
# optional
sudo rm -rf /etc/rancher/k3s
sudo rm -rf /var/lib/rancher/k3s
sudo rm -rf /var/lib/kubelet
sudo rm -rf /var/lib/cni
sudo rm -rf /opt/cni
# 在主节点执行
k delete node k3s-worker-2

卸载主节点:

systemctl stop k3s
/usr/local/bin/k3s-uninstall.sh
# optional
sudo rm -rf /etc/rancher/k3s
sudo rm -rf /var/lib/rancher/k3s
sudo rm -rf /var/lib/kubelet
sudo rm -rf /var/lib/cni
sudo rm -rf /opt/cni

设置代理

因为某些众所周知的原因,速度慢,要设置代理。

主节点执行vim /etc/systemd/system/k3s.service.env,一般情况下该文件是空的,加入下述内容报错退出:

http_proxy='http://192.168.4.128:7890'
https_proxy='http://192.168.4.128:7890'

重启k3s:systemctl restart k3s

对于从节点,由于安装时会指定主节点IP,/etc/systemd/system/k3s-agent.service.env文件会存在类似如下内容:

K3S_TOKEN='<>::server:<>'
K3S_URL='https://192.168.4.134:6443'

追加如下内容,报错退出:

http_proxy='http://192.168.4.128:7890'
https_proxy='http://192.168.4.128:7890'

最后重启k3s-agent:systemctl restart k3s-agent

命令行

输入k3s,输出:

NAME:k3s - Kubernetes, but small and simpleUSAGE:k3s [global options] command [command options] [arguments...]VERSION:v1.32.3+k3s1 (079ffa8d)COMMANDS:server           Run management serveragent            Run node agentkubectl          Run kubectlcrictl           Run crictlctr              Run ctrcheck-config     Run config checktoken            Manage tokensetcd-snapshotsecrets-encrypt  Control secrets encryption and keys rotationcertificate      Manage K3s certificatescompletion       Install shell completion scripthelp, h          Shows a list of commands or help for one commandGLOBAL OPTIONS:--debug                     (logging) Turn on debug logs [$K3S_DEBUG]--data-dir value, -d value  (data) Folder to hold state default /var/lib/rancher/k3s or ${HOME}/.rancher/k3s if not root [$K3S_DATA_DIR]--help, -h                  show help--version, -v               print the version

如上输出,安装完K3s后,自动安装kubectlctrcrictl等命令行工具。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一般】(注意这里的加粗,踩过坑)情况下:

  • 输入ctr命令等价于输入k3s ctr命令;
  • 输入k命令(在/root/.bashrc配置文件里有追加alias k='kubectl')等价于输入k3s kubectl命令;
  • 输入crictl命令等价于输入k3s crictl命令。

后来踩过一个坑之后,才注意到ctr输出的版本和k3s ctr输出的版本不一致:
在这里插入图片描述
两者具有不同的命名空间;准确来说,在k3s(实际上还是k8s)下,只有一个k8s.io命名空间:
在这里插入图片描述
总结:

k3s server [flags]    # Run K3s in server mode
k3s agent [flags]     # Run K3s in agent mode
k3s kubectl [args]    # Run embedded kubectl
k3s crictl [args]     # Run embedded crictl
k3s ctr [args]        # Run embedded ctr

问题

记录在实战使用k3s时遇到的问题。

/etc/systemd/system/k3s.service/etc/systemd/system/k3s.service.env

有何区别?

其他

K3s和K8s

K3s有别于标准K8s发行版的几个特点:

  • 单一二进制文件打包: 所有K8s组件都打包在一个不到100MB的二进制文件中;
  • 简化存储:使用SQLite作为默认存储后端,可选择etcd、MySQL或PostgreSQL;
  • 捆绑组件:包括CoreDNS、Traefik、Metrics Server和Local Storage Provisioner等基本附加组件;
  • 减少依赖性:最少的操作系统依赖性(只需正常的内核和cgroup挂载);
  • 安全通信:使用WebSocket隧道安全连接节点,无需公开kubelet API;
  • 资源要求低:设计为每个节点只需不到512MB内存即可运行。
特性K8sK3s
资源占用较高,需要较多CPU和内存极低,适合资源受限的环境
安装复杂度较复杂,需要较多配置非常简单,一键安装
组件包含所有k8s组件,如kubelet、kube-proxy、etcd等去除非核心组件,如用SQLite替代etcd
存储支持多种存储后端,如etcd默认使用SQLite,也支持etcd、MySQL等
适用场景大规模生产环境、复杂应用边缘计算、IoT、开发测试、资源受限环境
高可用原生支持HA需要额外配置支持HA
社区社区庞大社区较小,由Rancher提供支持
生态系统非常丰富,支持各种插件和工具,如Helm、Istio、Prometheus等较小,但兼容大部分k8s工具和插件
性能适合大规模集群,性能优化较好轻量级,适合小规模集群和边缘场景

AutoK3S

https://github.com/cnrancher/autok3s
https://docs.rancher.cn/docs/k3s/autok3s/_index/

docker run -itd --restart=unless-stopped -p 8080:8080 cnrancher/autok3s:v0.9.3-arm

k3d

GitHub,官网,
中文文档:

  • https://istio.io/latest/zh/docs/setup/platform-setup/k3d/

k3d将k3s封装在docker容器内并运行。k3d允许你在单个主机上运行多个K3s集群,并使用熟悉的Docker工具进行管理。

安装k3d:curl -s https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | TAG=v5.4.5 bash

K3S和KubeEdge

KubeEdge是华为云开源的云原生边缘计算平台项目,目标是将Kubernetes原生的容器编排和调度能力拓展到边缘,并为边缘应用部署、云与边缘间的元数据同步、边缘设备管理等提供基础架构支持。

对比项KubeEdgeK3S
核心定位专注于云边协同,实现云端统一管理与边缘设备智能联动,支持海量异构设备接入轻量化的k8s发行版,旨在降低k8s的部署复杂度与资源消耗,适用于资源受限的边缘节点
设计目标解决云边协同、边缘自治、设备管理等问题,适合物联网(IoT)和需要离线运行的场景提供完整k8s功能,但通过精简组件和优化资源占用,适配边缘和IoT设备
适用层级主要面向设备边缘(如智能家居、工业传感器)和基础设施边缘(如边缘网关)更适合基础设施边缘(如小型服务器集群),要求节点具备一定资源(如1-2 CPU核心、512MB内存)
核心功能- 云边协同:云端管理面通过标准k8s API控制边缘节点和设备
- 设备管理:通过devicetwin抽象物理设备,支持MQTT协议接入物联网设备
- 离线自治:边缘节点离线时仍能通过本地元数据管理(metamanager)维持运行
- 轻量化k8s:内置SQLite替代etcd,默认集成Traefik、Flannel等组件
- 单二进制部署:所有控制面组件合并为单一进程,降低资源占用
扩展能力支持通过k8s CRD扩展设备管理能力,与物联网协议(如Modbus、ZigBee)深度集成依赖标准k8s生态工具(如Helm、Prometheus),但缺乏原生设备管理功能
高可用方案- 云端控制面支持多副本,边缘节点通过edgehub实现与云端的可靠通信
- 边缘节点离线时仍能自治运行,数据通过metamanager持久化

- 支持多Server节点高可用,需依赖外部数据库(如etcd、MySQL)
- 单节点默认使用SQLite,无原生云边协同能力
资源占用- 边缘节点内存占用约100-200MB(含设备管理组件)
- 云端组件需独立部署(如k8s Master)

- 单节点内存占用约50-100MB(仅Agent节点更低)
- 管理面(Server)需额外资源(如1GB内存)
生态支持CNCF项目,更注重与物联网生态的整合依托Rancher社区,更适合传统k8s用户
版本兼容性KubeEdge需适配k8s版本升级可独立更新,兼容性更强
典型场景- 工业物联网(IIoT):工厂设备数据采集与云端联动
- 智能家居:通过边缘节点管理家庭设备

- 边缘服务器集群:小型k8s集群部署(如CDN节点)
- 开发测试环境:本地轻量化k8s环境
局限性- 对云端依赖较强,边缘节点功能需与云端协同
- 设备管理功能复杂,学习成本较高
- 缺乏原生云边协同能力,多集群管理需依赖第三方工具
- 不支持边缘设备直接接入,需额外开发适配

总结与选型建议

项目优势劣势选型建议
KubeEdge云边协同能力强、支持异构设备接入、适合离线场景架构复杂、对云端依赖高、边缘节点资源需求较高适用于需要云端统一管理且边缘设备异构性强的场景(如工业物联网)
K3S轻量化、部署简单、兼容标准k8s工具链缺乏设备管理能力、多集群管理方案不成熟适用于资源有限但需完整k8s功能的边缘节点(如小型服务器集群)

相关文章:

  • Java高效处理大文件:避免OOM的深度实践
  • 【STM32F1标准库】理论——外部中断
  • 用提示词写程序(3),VSCODE+Claude3.5+deepseek开发edge扩展插件V2
  • 纯汇编自制操作系统(四、应用程序等的实现)
  • vue3(入门,setup,ref,计算属性,watch)
  • 财管5-投资项目的评价指标现金流量构成
  • C# 类和继承(构造函数的执行)
  • Spring Ai 从Demo到搭建套壳项目(一)初识与实现与deepseek对话模式
  • YOLOv5-入门篇笔记
  • 鸿蒙OSUniApp声纹识别与语音验证:打造安全可靠的跨平台语音应用#三方框架 #Uniapp
  • Java并发编程实战 Day 3:volatile关键字与内存可见性
  • 3D Gaussian splatting 05: 代码阅读-训练整体流程
  • CSS篇-5
  • 箱式不确定集
  • 广东WordPress开发公司及服务
  • 搭建基于VsCode的ESP32的开发环境教程
  • Spring Boot DevTools 热部署
  • MATLAB实战:传染病模型仿真实现
  • RocketMQ 学习
  • 中国高分辨率高质量地面CO数据集(2013-2023)
  • 企业自适应网站建设/google adsense
  • 网站怎么做分页/刷僵尸粉网站推广
  • 北京一个公司做网站认证/环球资源外贸平台免费
  • 免费下载微信小程序/绍兴百度推广优化排名
  • 晨光科技+网站建设/深圳新闻最新事件
  • 简单的网站建设步骤/全网营销是什么