编辑
2022-07-26
DevOps
00
请注意,本文编写于 638 天前,最后修改于 624 天前,其中某些信息可能已经过时。

目录

配置概览
网络搭建
踩坑
K3S 安装
master
node
复写 ip
测试
卸载
注意
参考

之前经常撸云服务器羊毛,就想搭建 k8s集群,一开始手动搭建太折腾了还有小问题,后来用了kubekey,感觉占用资源太多。

后来发现了 k3s 这个好东西,占用资源低。

后来发现了 wireguard 这个好东西,混合云组网神器。

后来发现了 network-manager 这个好东西,wireguard 组网神器。

那就搞吧!

配置概览

为了避免烂七八糟毛病,操作系统最好统一,这里我统一采用了 ubuntu 20.04 系统。

所有服务器概览如下:

云厂商配置架构
腾讯2C4Gamd64
阿里1C2Gamd64
华为2C4Gamd64

网络搭建

首先需要搭建星状网络,参考:

# 使用 Netmaker 快速组建 WireGuard mesh 网络

bash
wget -O docker-compose.yml https://raw.githubusercontent.com/gravitl/netmaker/master/compose/docker-compose.contained.yml sed -i 's/NETMAKER_BASE_DOMAIN/<your base domain>/g' docker-compose.yml sed -i 's/SERVER_PUBLIC_IP/<your server ip>/g' docker-compose.yml sed -i 's/COREDNS_IP/<default interface ip>/g' docker-compose.yml # 生成 master key tr -dc A-Za-z0-9 </dev/urandom | head -c 30 ; echo '' sed -i 's/REPLACE_MASTER_KEY/<your generated key>/g' docker-compose.yml # 配置 Caddy wget -O /root/Caddyfile https://raw.githubusercontent.com/gravitl/netmaker/master/docker/Caddyfile sed -i 's/NETMAKER_BASE_DOMAIN/<your base domain>/g' /root/Caddyfile sed -i 's/YOUR_EMAIL/<your email>/g' /root/Caddyfile # 启动 docker-compose up -d

emm,总之按照官方的就能很轻松的部署了。

踩坑

后面我部署集群的时候发现 k3sserviceLB 会破坏 wirguard 网络的连通性。所以部署的时候一定要禁用。。。

K3S 安装

master

bash
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn INSTALL_K3S_SELINUX_WARN=true \\ INSTALL_K3S_EXEC="--disable servicelb --disable traefik --node-ip '10.20.30.7' --node-external-ip '82.157.137.245' --flannel-backend wireguard --kube-proxy-arg proxy-mode=ipvs --kube-proxy-arg masquerade-all=true --kube-proxy-arg metrics-bind-address=0.0.0.0 --tls-san 'k3s.mereith.com' --tls-san '82.157.137.245' " sh - # 获取 token cat /var/lib/rancher/k3s/server/token

node

bash
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn K3S_URL=https://82.157.137.245:6443 INSTALL_K3S_EXEC="--node-ip '10.20.30.5' --node-external-ip '82.157.125.43' --kube-proxy-arg proxy-mode=ipvs --kube-proxy-arg masquerade-all=true --kube-proxy-arg metrics-bind-address=0.0.0.0 " K3S_TOKEN="05ed38e986ebf0cdeb97bec629d1b7c9" sh -

复写 ip

因为云服务器自己还有内网 ip,为了保证网络畅通性,需要:

bash
kubectl annotate nodes tx3 flannel.alpha.coreos.com/public-ip-overwrite=10.20.30.7

测试

bash
## curl busybox kubectl run busybox --image sequenceiq/busybox --command -- /bin/sh -c "while true;do echo hello docker;sleep 1;done" kubectl exec -it busybox -- sh ## nginx test kubectl run nginx --image nginx

卸载

bash
/usr/local/bin/k3s-uninstall.sh /usr/local/bin/k3s-agent-uninstall.sh ip link delete kube-ipvs0

注意

  • 需要禁用 servicelb ,不然会影响跨集群的 pod 畅通
  • 禁用 traefik 是为了用自己的编排,不禁用也行。

参考

# 使用 k3s 和 WireGuard 网络部署 Kubernetes 集群

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:mereith

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!