多地域的腾讯云服务器组建Kubernetes集群
说明
本文为转载内容,已获得原创作者授权,更多精彩内容可以访问大佬若海的博客,传送门
本文中的脚本针对多地域的腾讯云服务器组建Kubernetes集群进行优化。腾讯云多地域请参考 腾讯云单地域组建Kubernetes集群,跨云多地域请参考 跨云多地域组建Kubernetes集群(k3s)。
环境要求
- 所有节点须为全新安装的Debian11/12或Ubuntu22.04操作系统
- 脚本使用了腾讯云的metadata获取IP,所有节点部署在腾讯云上不同地域(CVM、Lighthouse均可)
非腾讯云机器请手动设置PUBLIC_IP
和PRIVATE_IP
环境变量的值
使用的组件
- K3s 一个轻量级的Kubernetes发行版,专为生产环境而设计
- Flannel 一个虚拟网络层,用于为容器化工作负载创建网络隔离和通信
- WireGuard 一种轻量级、高性能、安全的虚拟专用网络(VPN)协议,旨在提供安全的通信
- Flannel-WireGuard Flannel网络插件的一种后端,使用WireGuard加密和隧道技术来保护网络通信
在腾讯云控制台设置防火墙
参考下面的列表在腾讯云控制台设置防火墙规则。若无需精细控制的,可以设置为允许所有节点间TCP/UPD协议的全部端口互访。
协议 | 端口 | 源 | 目标 | 描述 |
---|---|---|---|---|
TCP | 6443 | 子节点 | 主节点 | K8s API Server |
TCP | 10250 | 所有节点 | 所有节点 | Kubelet 指标收集 |
UDP | 51820 | 所有节点 | 所有节点 | Flannel WireGuard |
TCP | 5432-9876 | 所有地址 | 所有节点 | 自定义 Node Port,可选 |
UDP | 5432-9876 | 所有地址 | 所有节点 | 自定义 Node Port,可选 |
TCP | 80,443 | 所有地址 | 所有节点 | Web 服务,可选 |
部署K3S主节点
下面这段代码在主节点服务器上执行,注意替换SERVER_TOKEN
为一个不少于32个字母的随机字符串。
apt update
apt install -y wireguard
echo "net.ipv4.ip_forward = 1" >/etc/sysctl.d/ip_forward.conf
sysctl -p /etc/sysctl.d/ip_forward.conf
export SERVER_TOKEN=r83nui54eg8wihyiteshuo3o43gbf7u9er63o43gbf7uitujg8wihyitr6
export PUBLIC_IP=$(curl -Ls http://metadata.tencentyun.com/latest/meta-data/public-ipv4)
export PRIVATE_IP=$(curl -Ls http://metadata.tencentyun.com/latest/meta-data/local-ipv4)
export INSTALL_K3S_SKIP_DOWNLOAD=true
export DOWNLOAD_K3S_BIN_URL=https://github.com/k3s-io/k3s/releases/download/v1.28.2%2Bk3s1/k3s
if [ $(curl -Ls http://ipip.rehi.org/country_code) == "CN" ]; then
DOWNLOAD_K3S_BIN_URL=https://ghproxy.com/${DOWNLOAD_K3S_BIN_URL}
fi
curl -Lo /usr/local/bin/k3s $DOWNLOAD_K3S_BIN_URL
chmod a+x /usr/local/bin/k3s
curl -Ls https://get.k3s.io | sh -s - server \
--cluster-init \
--token $SERVER_TOKEN \
--node-ip $PRIVATE_IP \
--node-external-ip $PUBLIC_IP \
--advertise-address $PRIVATE_IP \
--service-node-port-range 5432-9876 \
--flannel-backend wireguard-native \
--flannel-external-ip
部署K3S子节点
下面这段代码在子节点服务器上执行,注意替换SERVER_TOKEN
为和主节点相同的随机字符串,SERVER_IP
为主节点的公网IP地址(在主节点执行命令curl -Ls http://metadata.tencentyun.com/latest/meta-data/public-ipv4
即可获取)。
apt update
apt install -y wireguard
echo "net.ipv4.ip_forward = 1" >/etc/sysctl.d/ip_forward.conf
sysctl -p /etc/sysctl.d/ip_forward.conf
export SERVER_IP=43.129.195.33
export SERVER_TOKEN=r83nui54eg8wihyiteshuo3o43gbf7u9er63o43gbf7uitujg8wihyitr6
export PUBLIC_IP=$(curl -Ls http://metadata.tencentyun.com/latest/meta-data/public-ipv4)
export PRIVATE_IP=$(curl -Ls http://metadata.tencentyun.com/latest/meta-data/local-ipv4)
export INSTALL_K3S_SKIP_DOWNLOAD=true
export DOWNLOAD_K3S_BIN_URL=https://github.com/k3s-io/k3s/releases/download/v1.28.2%2Bk3s1/k3s
if [ $(curl -Ls http://ipip.rehi.org/country_code) == "CN" ]; then
DOWNLOAD_K3S_BIN_URL=https://ghproxy.com/${DOWNLOAD_K3S_BIN_URL}
fi
curl -Lo /usr/local/bin/k3s $DOWNLOAD_K3S_BIN_URL
chmod a+x /usr/local/bin/k3s
curl -Ls https://get.k3s.io | sh -s - agent \
--server https://$SERVER_IP:6443 \
--token $SERVER_TOKEN \
--node-ip $PRIVATE_IP \
--node-external-ip $PUBLIC_IP
验证集群
kubectl get node
kubectl top node
kubectl get pods -A