之前经常撸云服务器羊毛,就想搭建 k8s集群,一开始手动搭建太折腾了还有小问题,后来用了kubekey,感觉占用资源太多。
后来发现了 k3s 这个好东西,占用资源低。
后来发现了 wireguard 这个好东西,混合云组网神器。
后来发现了 network-manager 这个好东西,wireguard 组网神器。
那就搞吧!
为了避免烂七八糟毛病,操作系统最好统一,这里我统一采用了 ubuntu 20.04 系统。
所有服务器概览如下:
| 云厂商 | 配置 | 架构 |
|---|---|---|
| 腾讯 | 2C4G | amd64 |
| 阿里 | 1C2G | amd64 |
| 华为 | 2C4G | amd64 |
首先需要搭建星状网络,参考:
# 使用 Netmaker 快速组建 WireGuard mesh 网络
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,总之按照官方的就能很轻松的部署了。
后面我部署集群的时候发现 k3s 的 serviceLB 会破坏 wirguard 网络的连通性。所以部署的时候一定要禁用。。。
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
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,为了保证网络畅通性,需要:
kubectl annotate nodes tx3 flannel.alpha.coreos.com/public-ip-overwrite=10.20.30.7
## 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
/usr/local/bin/k3s-uninstall.sh /usr/local/bin/k3s-agent-uninstall.sh ip link delete kube-ipvs0
servicelb ,不然会影响跨集群的 pod 畅通之前经常撸云服务器羊毛,就想搭建 k8s集群,一开始手动搭建太折腾了还有小问题,后来用了kubekey,感觉占用资源太多。
后来发现了 k3s 这个好东西,占用资源低。
后来发现了 wireguard 这个好东西,混合云组网神器。
后来发现了 network-manager 这个好东西,wireguard 组网神器。
那就搞吧!
为了避免烂七八糟毛病,操作系统最好统一,这里我统一采用了 ubuntu 20.04 系统。
所有服务器概览如下:
| 云厂商 | 配置 | 架构 |
|---|---|---|
| 腾讯 | 2C4G | amd64 |
| 阿里 | 1C2G | amd64 |
| 华为 | 2C4G | amd64 |
首先需要搭建星状网络,参考:
# 使用 Netmaker 快速组建 WireGuard mesh 网络
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,总之按照官方的就能很轻松的部署了。
后面我部署集群的时候发现 k3s 的 serviceLB 会破坏 wirguard 网络的连通性。所以部署的时候一定要禁用。。。
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
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,为了保证网络畅通性,需要:
kubectl annotate nodes tx3 flannel.alpha.coreos.com/public-ip-overwrite=10.20.30.7
## 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
/usr/local/bin/k3s-uninstall.sh /usr/local/bin/k3s-agent-uninstall.sh ip link delete kube-ipvs0
servicelb ,不然会影响跨集群的 pod 畅通