惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
U
Unit 42
MyScale Blog
MyScale Blog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
量子位
IT之家
IT之家
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
Recent Announcements
Recent Announcements
V
Visual Studio Blog
G
Google Developers Blog
Last Week in AI
Last Week in AI
雷峰网
雷峰网
博客园 - 聂微东
博客园 - 叶小钗
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
博客园 - 司徒正美
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
月光博客
月光博客
aimingoo的专栏
aimingoo的专栏

Oskyla 烹茶室

修复 Joplin on KDE 菜单栏显示问题 Copy Fail:Linux 内核 2017 年至今的高危漏洞(附临时缓解方案) | CVE-2026-31431 Hermes Agent — 在 K3s / K8s 中运行指南 在 K3s 节点上安装并使用 nerdctl Mouser:轻量开源的罗技鼠标驱动替代方案 Claude Opus 4.7:优缺点与评测信息汇总 openFuyao NPU-Operator故障排查 openFuyao 2603 共测测试报告 openFuyao InferNex AI推理集成部署 310P(300I Pro) 环境问题记录及解决 ceph mon Operation not permitted 问题解决 Ascend 310P + openFuyao + NPU-Operator 故障排查 KDE Plasma6 禁用全局菜单,恢复正常应用菜单 终极指南:在 Linux 裸机服务器上快速部署 Moltbot (原 Clawbot) 并集成飞书 Windows 配置 Claude Code 解决 settings.json 不生效 Windows 配置 Claude Code 全流程 2025-12-31 | 年终总结 AI 生图精品提示词|第二期:城市星球 AI 生图精品提示词|第一期 Kubernetes kubectl --raw 使用指南 彻底解决阿里云和 tailscale 冲突 2025-10-21 | 沉淀思维 macOS 单独为鼠标或触控板开启自然滚动 2025-10-16 | 负载高低 2025-10-15 | 睡眠周期 2025-10-14 | 转换情绪与独立观点 go 拉取 gitcode.com 私有 mod Git 将某个文件恢复到其他分支的状态 SSH 通过跳板机连接 lxc 使用 chronyc 构建 ntp 服务 2025-10-13 | 独立思考于未来能源
公网部署 k3s 集群方法总结
Tianlun Song · 2022-03-08 · via Oskyla 烹茶室

本文 首发于 🌱 煎茶转载 请注明 来源

基于公网完成跨云厂商服务器 k3s 集群部署

Kubernetes 在当下的火热程度不必多言,但由

于其体量较大,自身组建就会占用不少资源,适合大规模部署。k3s 是一个轻量的 Kubernetes 实现,通过了官方认证,在占用极低资源的情况下可以提供大部分功能,个人轻量服务器、树莓派之类资源有限的情况下显得特别好用。

既然资源有限为什么还要使用 k3s 来占用一小部分资源呢?这就是云原生时代计算资源管理的优势所在了,将多节点资源汇集在一起使用 k3s 统一调配,既避免了多台服务器反复切换,还能很轻松的实现冗余、热备、高可用,在 k8s 强大生态加持下,可以帮我们自动化的完成许多繁琐的运维工作,作为开发者可以将精力更多的放在开发本身上,何乐而不为呢。

在经过了多日的踩坑、尝试之后,终于总结出一份基本可以快速拉起 单 master + 单 agent k3s 集群的方法,且在后期可以方便的扩容。在这里分享出这份教程,希望对各位有用。

如果对 kubernetes 的各种概念还不是很理解,建议前往官网通读 **学习 Kubernetes 基础知识 ,**这将对你理解其中的思想及后期使用都会有许多帮助。

本文介绍的方法可用于跨云厂商服务器 k3s 部署,只要公网可以互访即可,当然最好延迟越低越好,否则使用起来体验不佳。

因为是跨云部署,即节点之间没有直接可用的内部局域网,仅能通过公网互联。因此在安装 k3s 组件之前,需要先在服务器之间搭起 VPN ,用于集群间通信。当然,如果您的服务器直接可以内网互通,可以跳过这一步骤。

集群间通信基础 - WireGrad VPN 配置

我的两台服务器均采用 debian 11 操作系统,内核为 5.10 (>5.6),无需升级内核即可使用(包含 WireGrad 支持),如果内核版本过低需要先升级内核再继续。

$ sudo apt install wireguard

为了集群安全考量,不可以直接使用公网IP进行集群间通信,这里首先为需要组 k3s 集群的服务器配置 WireGrad VPN 通道,为方便起见,直接使用开源脚本 wireguard-install 进行安装:

$ curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
$ chmod +x wireguard-install.sh
$ ./wireguard-install.sh

如果github拉取缓慢,可以在 这里 找到我在coding镜像的代码库,直接拷贝使用即可。

安装过程很简单,输入公网 IP地址,之后一路回车即可完成配置。

本地完成安装再次执行脚本 ,选择 Add a new user ,输入信息之后,即可生成客户端使用的 WireGrad 配置文件,内容大致如下:

cat /root/wg0-client-k3s-agent1.conf
[Interface]
PrivateKey = xxxxxxxxxxxxxxxxx
Address = 10.66.66.2/32,fd42:42:42::2/128
DNS = xxxx,xxxx

[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxx
PresharedKey = xxxxxxxxxxxxxxxxxxxx
Endpoint = x.x.x.x:xxx
AllowedIPs = 10.66.66.1/32

需要注意 [Peer] 部分的 AllowedIPs ,默认为 0.0.0.0/0 ,我在这里改为 master 节点的ip,后期加节点时再补充这一列表。如果直接使用默认值,可能改变子节点默认路由配置,导致无法访问。腾讯云面板都访问不进去,最后只能重装系统解决。

将该文件拷入子节点,之后使用在子节点启用即可:

# 启动
$ wg-quick up /full/path/to/wg0.conf 

# 查看系统 VPN 接口信息
$ ip link show wg0

# 查看 VPN 接口详细信息
$ wg show all
$ wg show wg0

使用内网 ip 10.66.66.0/32 可以互相 ping 通,表示“内网”互通完毕,下面使用该地址作为集群节点内网IP使用,继续下一步。

k3s 官方提供了很方便的一键部署脚本,可以快速完成部署,需要修改配置时只需重新执行一次脚本即可,很方便。

# 部署 master 节点
$ curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -s - \
--node-external-ip <YOUT PUBLIC IP> \
--advertise-address <YOUT PUBLIC IP> \
--node-ip <YOUT LAN IP> \
--flannel-iface wg0

使用以上命令即可完成 master 节点的配置,注意替换其中的 <YOUT PUBLIC IP><YOUT LAN IP> 为该服务器的公网、内网IP。可以使用 systemctl status k3s 查看服务状态,使用 journalctl -xef -u k3s 查看服务日志。

下面配置 agent 节点。

# 部署 agent 节点
$ curl -sfL http://rancher-mirror.cnrancher.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn \
K3S_URL=https://<YOUT MASTER LAN IP>:6443 \
K3S_TOKEN=K106de5b0a8b39a1dc56ab68ed1fa7c539890f17712abff4bf103cfaa68e66dfe86::server:68d9d49974772582d2950b162effb0e0 \
sh -s - \
--node-external-ip <YOUT PUBLIC IP> \
--node-ip <YOUT LAN IP> \
--flannel-iface wg0 \
--docker

分别替换其中 <YOUT MASTER LAN IP><YOUT PUBLIC IP><YOUT LAN IP> 为你的 master将节点内网 ip、agent 节点公网 IP 和agent节点内网IP。

设置K3S_URL参数会使 K3s 以 worker 模式运行。K3s agent 将在所提供的 K3S_URL 上向监听的 K3s 服务器注册。K3S_TOKEN 存储在 master 节点的 /var/lib/rancher/k3s/server/node-token 路径下。 --docker 表示采用 docker 作为容器运行时,表示该节点使用 docker 完成各种负载部署,需提前装好 docker 环境,最后记得放通 master 节点的 6443 端口。

看一下节点状态:

# kubectl get nodes
NAME         STATUS   ROLES                  AGE   VERSION
k3s-agent1   Ready    <none>                 8d    v1.22.6+k3s1
k3s-master   Ready    control-plane,master   8d    v1.22.6+k3s1

均为 ready 状态说明一切 ok。

将 master 节点的 /etc/rancher/k3s/k3s.yaml 拷入本地,替换其中的 server: [https://127.0.0.1:6443](https://127.0.0.1:6443/) 为公网 IP 即可在本地使用 kubectl 管理集群啦。其他如 Lens 需要访问集群的应用也是使用这个配置文件即可。

总结和后续

本文内容建立在长达数月间断断续续试错之上,网上许多资源对于搭建过程的介绍缺乏系统和原因概述,因此整理了这篇文章,方便各位参考和未来查阅,若有问题欢迎留言。

参考文献