之前经常撸云服务器羊毛,就想搭建 k8s
集群,一开始手动搭建太折腾了还有小问题,后来用了kubekey,感觉占用资源太多。
后来发现了 k3s 这个好东西,占用资源低。
后来发现了 wireguard 这个好东西,混合云组网神器。
后来发现了 network-manager 这个好东西,wireguard 组网神器。
那就搞吧!
为了避免烂七八糟毛病,操作系统最好统一,这里我统一采用了 ubuntu 20.04
系统。
所有服务器概览如下:
云厂商 | 配置 | 架构 |
---|---|---|
腾讯 | 2C4G | amd64 |
阿里 | 1C2G | amd64 |
华为 | 2C4G | amd64 |
首先需要搭建星状网络,参考:
# 使用 Netmaker 快速组建 WireGuard mesh 网络
bashwget -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
网络的连通性。所以部署的时候一定要禁用。。。
bashcurl -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
bashcurl -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
,为了保证网络畅通性,需要:
bashkubectl 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
畅通本文作者:mereith
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!