【教程】跨网异地 K3S 集群部署 VPS 剩余价值计算器

💡 假期整活儿,通过部署一个小应用(VPS 剩余价值计算器),熟悉 k3s 的使用。

便宜收了一台配置 3C2G cloudcone,正好上两天的 VPS 剩余价值计算器做了一个公共镜像,用来组集群玩一下 k3s。

PS:开始从节点用的 cstserver hk,服务到从机一直不响应,换另一台 cloudcone us 后正常,可能是跟 VPS 厂商网络有关系。

主机规划

角色 主机名 外网IP 版本 配置
Master Node cloudcone-167 148.xxx.xxx.167 debian11 3C/2G/26G
Worker Node 1 cloudcone-31 74.xxx.xxx.31 debian12 1C/1G/40G

部署完后,主节点内存、负载如下

安装 k3s 集群

主节点

# 主节点执行
# 安装 k3s 主节点
curl -sfL https://get.k3s.io | K3S_CLUSTER_INIT=true INSTALL_K3S_EXEC="server" sh -s - --tls-san 148.xxx.xxx.167 --advertise-address 148.xxx.xxx.167 --node-external-ip 148.xxx.xxx.167 --bind-address 0.0.0.0
# 卸载(后悔药,重头再来)
systemctl stop k3s
/usr/local/bin/k3s-uninstall.sh
# 主节点执行,获取 token
cat /var/lib/rancher/k3s/server/node-token
a10e37257a6b0a95065de50161ee8ef0cc4881eb7cb433ff84fadcf56280bd9b877::server:5c7de61b21a95003838295ba305999f0

从节点

# 从节点执行
# 安装 k3s 从节点
curl -sfL https://get.k3s.io | K3S_URL="https://148.xxx.xxx.167:6443" K3S_TOKEN="a10e37257a6b0a95065de50161ee8ef0cc4881eb7cb433ff84fadcf56280bd9b877::server:5c7de61b21a95003838295ba305999f0" sh -s -
# 卸载(后悔药,重头再来)
journalctl -u k3s-agent -f
systemctl stop k3s-agent
/usr/local/bin/k3s-agent-uninstall.sh

检测节点状态

# 主节点执行
kubectl get nodes

状态为 Ready 表示服务正常

部署 vps 剩余价值计算器

为了使用 https 访问,先申请证书

添加一个中间件,用于 http 跳转 https

# 证书申请和 http 跳转中间件
kubectl apply -f https://raw.githubusercontent.com/hahabye/vps_jsq/refs/heads/main/kubernetes/cert.yaml

部署 deployment、service、ingress

# 部署 deployment、service、ingress
kubectl apply -f https://raw.githubusercontent.com/hahabye/vps_jsq/refs/heads/main/kubernetes/app.yaml

检查服务状态

# 查看服务
kubectl get pod,deployment,service,secret,clusterIssuer,ingress

域名访问测试一下,及确认跳转正常

# 测试跳转
curl -v http://jsqymqxerspc.196000.xyz
curl -v https://jsqymqxerspc.196000.xyz
curl -v http://148.xxx.xxx.167 -H "Host: jsqymqxerspc.196000.xyz"

测试完毕,删除清理(可选)

# 删除服务
kubectl delete -f https://raw.githubusercontent.com/hahabye/vps_jsq/refs/heads/main/kubernetes/cert.yaml
kubectl delete -f https://raw.githubusercontent.com/hahabye/vps_jsq/refs/heads/main/kubernetes/app.yaml
# 逐个删除
kubectl delete deployment jsq-deployment
kubectl delete service jsq-service
kubectl delete secret jsq-tls
kubectl delete clusterIssuer letsencrypt-prod

浏览器访问

访问域名后,通过 Ingress 路由到对应的 Service,然后再负载均衡到具体的 Pod。

点赞
  1. Montague说道:

    大制作

  2. sdo888说道:

    不懂

  3. semyes说道:

    @Na #3
    说的整活儿,那是必须的!
    实现高可用一天24小时一年365日计算服务永在线!

回复 semyes 取消回复

电子邮件地址不会被公开。必填项已用 * 标注

×
订阅图标按钮