Hotdry.

Article

通过 k3sup 实现 60 秒内通过 SSH 完成 K3s 集群零接触部署的工程实践

深入解析 k3sup 工具如何通过 SSH 在 60 秒内完成 K3s 集群的零接触部署,包含关键参数配置、前置条件与生产环境注意事项。

2026-05-04systems

在 Kubernetes 生态中,集群的快速部署一直是运维人员关注的核心痛点。传统方式下,使用 kubeadm 部署一个可用集群往往需要数十分钟的等待时间,而 k3s 作为轻量级 Kubernetes 发行版虽然大幅降低了资源需求,但其部署流程仍然涉及 SSH 登录、脚本执行、配置复制等多个手工环节。k3sup 正是为解决这一痛点而生的工具,它通过 SSH 自动化完成从零到 KUBECONFIG 的全流程,将部署时间压缩到 60 秒以内。

核心设计理念:零接触部署

k3sup(读作 "ketchup")由 Alex Ellis 开发,是一个用 Go 语言编写的跨平台工具,其核心设计理念是「零接触部署」。这意味着用户只需要拥有一台可通过 SSH 访问的目标服务器和本地的 kubectl 工具,就能在不到一分钟的时间内获得一个可用的 K3s 集群,完全无需手动登录远程服务器执行任何命令。

工具的工作流程可以概括为三个关键步骤。首先,k3sup 通过 SSH 连接到远程主机,执行 K3s 安装脚本,这一过程会自动处理公共 IP 的 TLS 证书配置。其次,安装完成后,工具会自动从服务器端获取生成的 kubeconfig 文件并写入本地指定路径。最后,用户可以直接使用本地 kubectl 命令连接远程集群,无需额外配置。整个过程对用户屏蔽了所有底层细节,真正实现了「一键部署」。

从架构层面来看,k3sup 本质上是一个 SSH 客户端包装器,它在本地运行,通过 SSH 在远程主机上执行 Rancher 官方提供的 k3s 安装脚本。这种设计使得工具本身不需要在目标服务器上预先安装任何依赖,仅依靠 SSH 和 sudo 权限即可完成全部操作。

关键参数与配置阈值

在实际工程实践中,正确配置 k3sup 的参数是确保部署成功的关键。最基本的单节点安装命令只需要两个核心参数:目标服务器的 IP 地址(或主机名)和 SSH 用户名。执行 k3sup install --ip 192.168.0.100 --user ubuntu 即可完成从安装到获取 kubeconfig 的全流程。

对于生产环境而言,需要关注多个可选参数的配置。--k3s-version 参数用于指定具体的 K3s 版本,例如 --k3s-version v1.21.1,这在需要控制升级节奏或保持版本一致性的场景下尤为重要。--k3s-channel 参数则支持从 stable、testing、latest 等频道自动选择版本,适合对版本灵活性有较高要求的场景。

--cluster 参数是部署高可用集群的关键标识。当使用此参数时,k3sup 会启用 K3s 的嵌入式 etcd 模式,创建多主节点集群。需要注意的是,嵌入式 etcd 至少需要三个服务器节点才能形成有效的仲裁副本。相应的,--server 参数用于在已有集群基础上添加额外的服务器节点。

对于需要定制化安装的场景,--k3s-extra-args 参数允许向 K3s 传递额外的启动参数。例如,使用 --k3s-extra-args '--disable traefik' 可以禁用默认的 Traefik 入站控制器,而 --k3s-extra-args '--docker' 则强制 K3s 使用 Docker 而不是 containerd 作为容器运行时。

多节点集群的扩展通过 k3sup join 命令完成。添加 Agent 节点的命令格式为 k3sup join --ip 192.168.0.101 --server-ip 192.168.0.100 --user root,其中 --server-ip 参数指向集群中已有服务器节点的 IP 地址,k3sup 会自动从该服务器获取必要的集群加入凭证。

前置条件与安全考量

成功运行 k3sup 对目标服务器存在明确的前置要求。在 SSH 认证方面,目标服务器必须配置基于密钥的无密码登录,或者通过 --ssh-key 参数指定私钥路径。使用密码认证的场景下,k3sup 会在运行时提示输入密码,但这在自动化脚本中会带来交互问题,因此生产环境推荐使用密钥认证。

更重要的是目标服务器必须配置 sudo 无密码执行权限。这是因为 k3s 的安装过程需要 root 权限来配置系统服务、写入配置文件和修改网络设置。在 Ubuntu 等主流 Linux 发行版的云镜像中,这一配置通常是默认存在的,但如果目标服务器未做此配置,可以通过编辑 /etc/sudoers 文件添加 username ALL=(ALL) NOPASSWD: ALL 条目来启用。

从网络安全角度,使用 k3sup 在公有云环境部署时需要确保安全组或防火墙规则已正确配置 K3s 所需的端口。TCP 端口 6443 用于 Kubernetes API 服务器通信,UDP 端口 8472 用于节点间的 VXLAN 通信,如果使用 Flannel 的话还需要允许 ICMP 流量用于健康检查。Rancher 官方文档提供了完整的端口需求清单,在生产环境部署前应当逐一核对。

工具选型对比

在 Kubernetes 部署工具的生态中,k3sup 与其他主流方案存在清晰的差异化定位。与 kubeadm 相比,k3sup 的优势在于对 ARM 架构的原生支持和更快的部署速度。kubeadm 更适合需要完全定制化的生产环境,而 k3sup 则在快速原型开发、边缘计算和低资源场景下表现更优。

k3d 是另一个值得关注的替代方案,它通过在 Docker 容器中运行 K3s 来实现本地集群的快速创建,适合需要频繁创建和销毁测试环境的场景。但 k3d 本质上是一种本地开发工具,无法用于部署真正的远程集群。k3sup 则填补了远程部署这一空白,它可以管理任意可通过 SSH 访问的物理机器、虚拟机或云端实例。

对于需要大规模自动化部署的场景,k3sup 提供了 Pro 版本,支持 planapply 命令来批量管理多节点集群。Pro 版本可以通过 JSON 配置文件定义整个集群的拓扑结构,然后并行执行安装操作,大幅提升大规模部署的效率。

工程实践建议

在实际项目中引入 k3sup 时,建议建立一套标准化的部署流程。首先,应当使用基础设施即代码(IaC)工具如 Terraform 或 Ansible 提前完成服务器的初始化,包括 SSH 密钥分发、sudo 权限配置和网络策略设置。其次,将 k3sup 命令封装为可版本控制的脚本,明确指定 K3s 版本、集群拓扑和额外参数。最后,通过 k3sup ready 命令验证集群就绪状态后再执行后续的应用部署。

对于持续集成场景,k3sup 支持在 CI 管道中无缝集成。由于工具完全通过命令行参数控制,不存在交互式输入,可以直接嵌入到 GitHub Actions、GitLab CI 或 Jenkins pipeline 中实现集群的自动化创建和销毁。

总体而言,k3sup 以极简的使用方式和高效的执行效率,为 K3s 的快速部署提供了一个工程化的解决方案。它将原本需要数十步手动操作的过程压缩为一条命令,使得开发测试环境的创建、边缘计算节点的部署以及 CI/CD 管道的集群管理变得更加便捷。

资料来源:GitHub - alexellis/k3sup(https://github.com/alexellis/k3sup)

systems