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