K3s与标准Kubernetes最根本区别在于其自带containerd、无需Docker和systemd,仅需512MB内存即可运行于树莓派或工业网关;部署失败主因是环境未清理、端口未开放或token错误。

k3s 不是“先装 Docker 再装 Kubernetes”,它自带 containerd、不用 systemd 也能跑,512MB 内存的树莓派或工业网关直接上——这是它和标准 Kubernetes 最根本的区别。部署失败,90% 是卡在环境没清干净、端口没放开、token 搞错了。
安装前必须清理的三个坑
别跳过这步,否则 k3s 启动后 kubectl get nodes 一直卡在 NotReady:
-
swap必须关闭:sudo swapoff -a,并注释掉/etc/fstab里所有swap行 -
iptables或ip6tables缺一不可:CentOS 8+/Alpine 用户常缺ip6tables,执行sudo yum install -y iptables-services ip6tables(RHEL系)或apk add iptables(Alpine) - 已有 Docker 或其他容器运行时要停用:
sudo systemctl stop docker,否则containerdsocket 冲突,k3s日志里会反复报failed to start containerd
国内网络下怎么装不超时
直接跑 curl -sfL https://get.k3s.io | sh - 在多数国内环境会卡住或镜像拉失败。必须换镜像源:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 用 Rancher 官方中国镜像脚本:
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_EXEC="--disable traefik --write-kubeconfig-mode 644" sh - -
--disable traefik是关键:默认开启的 Traefik 会占 80/443 端口,和你本地 nginx/apache 冲突;禁用后省下约 80MB 内存 -
--write-kubeconfig-mode 644避免后续kubectl权限拒绝,不用再手动chmod
多节点加不进集群?只查这三处
agent 节点 systemctl status k3s-agent 显示 active but not ready?问题基本在这:
-
token必须从 server 节点原样复制:sudo cat /var/lib/rancher/k3s/server/node-token—— 别手输、别用 vim 中转(容易带空格或换行) -
--server参数必须填 server 对外 IP,不是127.0.0.1或localhost:./k3s agent --server https://192.168.1.100:6443 --token xxx - server 节点防火墙必须放通两个端口:
6443/tcp(API Server)、8472/udp(Flannel VXLAN),CentOS 用firewall-cmd --add-port=6443/tcp --permanent && firewall-cmd --add-port=8472/udp --permanent && firewall-cmd --reload
资源吃紧时哪些组件能关
树莓派 4B(4GB 内存)或 x86 工业网关(512MB)上,k3s 默认启用的组件太多,free -h 显示可用内存低于 300MB 就该裁剪:
- 关
traefik(已提):--disable traefik - 关
servicelb(内置 LoadBalancer):--disable servicelb,除非你真要用type: LoadBalancer - 关
local-storage(自动创建local-pathStorageClass):--disable local-storage,改用手动挂载或外部 NFS - 注意:
coredns和metrics-server不能关,否则kubectl get pods -A里一堆0/1,DNS 解析和 HPA 都失效
/var/lib/rancher/k3s/server/node-token 是否被正确传递、6443 是否可达、以及 containerd socket 是否被旧 Docker 占着。别信“一键搞定”,每台机器跑完安装命令后,必须立刻验证 kubectl get nodes 和 kubectl get pods -A 两行命令的结果。

















