Hotdry.

Article

使用 k3sup 通过 SSH 在 60 秒内快速部署 K3s 集群

深入解析 k3sup 工具的核心用法、关键参数配置与工程实践,涵盖单节点部署、HA 集群构建与常见问题排查。

2026-05-04systems

在现代软件交付体系中,Kubernetes 已成为容器编排的事实标准。然而,传统 kubeadm 方式部署 Kubernetes 集群步骤繁琐、耗时较长,对开发者的动手能力要求较高。对于边缘计算、IoT 场景或快速原型验证而言,轻量级的 K3s 配合自动化引导工具能够显著提升部署效率。k3sup 正是为解决这一痛点而生的开源工具,它能够在 60 秒内通过 SSH 完成 K3s 集群的快速部署,让开发者从零到 kubectl 可用状态仅需一条命令。

k3sup 工具定位与核心价值

k3sup(读作「ketchup」)是由 Alex Ellis 开发的轻量级 K3s 引导工具,采用 Go 语言编写,支持跨平台运行于 Linux、Windows、macOS 以及树莓派等 ARM 设备。与传统的 kubeadm 相比,k3sup 专为简单场景设计,屏蔽了证书生成、API Server 配置等底层细节,使开发者无需深入理解 Kubernetes 初始化流程即可完成集群部署。

k3sup 的核心工作流程非常清晰:首先通过 SSH 连接到远程 Linux 主机,执行 K3s 安装脚本;然后自动从服务器获取 kubeconfig 文件并写入本地;最终用户可以直接在本地使用 kubectl 操作远程集群。整个过程自动化程度极高,用户只需准备好具备 SSH 访问权限的主机,即可实现「一键部署」。这种设计理念特别适合 CI/CD 流水线、临时测试环境搭建以及边缘节点批量配置等场景。

工具安装与前置条件

k3sup 以静态二进制形式分发,安装过程极为简单。在 macOS 或 Linux 系统中,只需执行一条命令即可完成安装:

curl -sLS https://get.k3sup.dev | sh
sudo install k3sup /usr/local/bin/

安装完成后,运行 k3sup --help 可以查看所有可用命令。对于 Windows 用户,可以直接从 GitHub Releases 页面下载对应版本的可执行文件,或在 Windows Subsystem for Linux(WSL2)环境中使用上述安装脚本。

在使用 k3sup 部署 K3s 之前,目标主机需要满足以下前置条件:首先,必须配置基于公钥的无密码 SSH 登录,可以通过 ssh-copy-id user@ip 命令将本地公钥复制到远程主机;其次,SSH 登录的用户账户需要具备无密码 sudo 权限,这是因为 k3s 安装过程中需要执行特权操作。具体配置方法为编辑 /etc/sudoers 文件,添加类似 ubuntu ALL=(ALL) NOPASSWD: ALL 的配置行(将 ubuntu 替换为实际用户名)。需要特别注意的是,大多数云服务商提供的 Ubuntu 或 Debian 镜像默认已满足这些条件,但在自建裸金属服务器或树莓派上可能需要手动配置。

单节点部署:核心命令与参数详解

部署一个 K3s server 节点是 k3sup 最基础的功能。假设远程主机 IP 为 192.168.0.100,用户名为 ubuntu,只需执行以下命令即可完成部署:

k3sup install --ip 192.168.0.100 --user ubuntu

执行过程中,k3sup 会依次完成以下操作:通过 SSH 连接到远程主机、下载并执行 K3s 安装脚本、配置 K3s 服务、生成 kubeconfig 文件并拉取到本地。默认情况下,kubeconfig 会保存为当前目录下的 kubeconfig 文件,用户可以通过设置环境变量 export KUBECONFIG=pwd/kubeconfig 或直接指定 --local-path 参数来更改保存路径。

在实际工程实践中,以下参数使用频率较高: --ssh-key 用于指定 SSH 私钥路径,当使用非默认密钥时需要显式指定;--ssh-port 允许修改 SSH 端口,默认为 22;--context 用于设置 kubeconfig 中的上下文名称,便于在多集群环境下切换;--merge 参数非常实用,它会将新集群的配置合并到现有的 kubeconfig 文件中而非覆盖,这对于同时管理多个 Kubernetes 集群的场景尤为重要。如果需要部署特定版本的 K3s,可以使用 --k3s-version 参数指定版本号,或使用 --k3s-channel 参数选择 stable、testing 等更新通道。

对于不需要内置组件的场景,--no-extras 参数可以禁用 Traefik Ingress 控制器和 ServiceLB(K3s 内置的负载均衡器),这在生产环境中希望使用独立 Ingress 解决方案或 MetalLB 时非常有用。此外,--k3s-extra-args 参数允许传递额外的 K3s 启动参数,例如 --k3s-extra-args '--disable traefik --docker' 可以同时禁用 Traefik 并指定使用 Docker 容器运行时。

多节点集群构建:agent 加入与 HA 配置

在单节点部署完成后,可以通过 k3sup join 命令向集群添加 agent 节点(也称为 worker 或 node)。假设已有 server 节点 IP 为 192.168.0.100,新 agent 节点 IP 为 192.168.0.101,用户名为 root,执行命令如下:

k3sup join --ip 192.168.0.101 --server-ip 192.168.0.100 --user root

需要注意的是,如果 agent 和 server 使用不同的 SSH 用户名,需要通过 --server-user 参数显式指定 server 端的用户名。这一细节在混合使用不同操作系统镜像(如 Ubuntu 和 Debian)的环境中容易被忽视,导致 join 操作失败。

对于生产环境,高可用(HA)部署是必备能力。k3sup 支持两种 HA 模式:第一种是使用外部数据库(如 MySQL、PostgreSQL)的 HA 架构,通过 --datastore 参数指定数据库连接字符串;第二种是使用嵌入式 etcd 的 HA 架构,这是 K3s v1.19.5 之后引入的特性,只需要奇数个服务器节点即可实现。创建嵌入式 etcd HA 集群时,需要在第一个 server 节点使用 --cluster 参数初始化,然后对后续 server 节点使用 k3sup join 并附加 --server 参数。需要注意,嵌入式 etcd HA 至少需要三个 server 节点才能达成 quorum。

对于大规模集群部署,k3sup Pro 版本提供了 planapply 命令,支持通过 JSON 配置文件定义集群拓扑,并行执行安装任务。Pro 版本还支持 --predownload 参数,在安装前预先下载 K3s 二进制文件并通过 SSH 分发到各节点,有效减少网络带宽占用和总体部署时间。

集群就绪检查与配置管理

部署完成后,验证集群状态是必要步骤。k3sup 提供了 k3sup ready 命令用于检查集群是否就绪:

k3sup ready --context default --kubeconfig ./kubeconfig

该命令会执行 kubectl get nodes 并等待所有节点状态变为 Ready。如果在 k3sup install 时使用了 --merge 参数将配置合并到默认 kubeconfig,也可以直接运行 k3sup ready --context my-k3s 进行检查。

对于已存在的 K3s 集群,如果本地丢失了 kubeconfig,可以使用 k3sup install --skip-install 命令仅获取配置而不执行安装操作。这在重新配置本地开发环境或从备份恢复时非常有用。类似地,k3sup Pro 版本提供了 k3sup pro get-config 命令,可以从任意远程 K3s 服务器获取 kubeconfig 文件,并支持合并上下文和指定自定义文件名。

常见问题与工程实践要点

在使用 k3sup 过程中,开发者可能遇到以下典型问题:第一个常见问题是 SSH 握手失败,错误信息包含「ssh: handshake failed」。这通常由三个原因导致:未执行 ssh-copy-id 导致需要密码交互、Go 语言 SSH 库对 RSA 公钥的兼容性问题(可通过显式指定 --ssh-key ~/.ssh/id_rsa 解决)、或者 agent 和 server 使用了不同的 SSH 用户名。第二个常见问题是 K3s 服务启动失败,此时需要登录到对应主机执行 sudo systemctl status k3ssudo journalctl -u k3s 查看详细日志。

对于树莓派等 ARM 设备,还需要额外配置内核参数。在 /boot/cmdline.txt 文件末尾添加 cgroup_enable=cpuset cgroup_memory=1 cgroup_enable=memory 以启用 cgroups 支持,否则容器可能无法正常运行。此外,不同版本的 K3s 对内核特性有不同的要求,可以通过 k3s check-config 命令进行预检查。

在生产环境使用时,建议遵循以下工程实践:优先使用固定版本的 K3s(通过 --k3s-version 指定),避免自动更新导致不可预期的行为;对于多集群管理,务必使用 --merge--context 参数区分不同环境的配置;定期备份 kubeconfig 文件,因为它包含了访问集群的凭证信息;如需通过跳板机访问内部服务器,k3sup Pro 版本提供了相应的支持。

参考资料

本文档参考了 k3sup 官方 GitHub 仓库的文档与源代码。

资料来源:https://github.com/alexellis/k3sup

systems