便宜收了一台配置 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。

相关文章