跨云多地域组建Kubernetes集群(k3s)
引入容器编排和管理工具是现代云计算领域的必然趋势,而Kubernetes(简称K8s)作为开源的容器编排平台,已经成为云原生应用的事实标准。然而,要在跨云跨地域环境中构建和维护Kubernetes集群通常是一项具有挑战性的任务。在本文中,将提供一步步的指南,帮助读者朋友快速组建一个高度可扩展的Kubernetes集群,无论工作负载分布在哪个云平台或地理位置。
环境要求
- 所有节点须为全新安装的Debian11/12或Ubuntu22.04操作系统
- 所有节点部署在公有云且无法通过内网互访(一般公共网络为NAT模式,且主机上未直接配置公网IP)
使用的组件
- K3s 一个轻量级的Kubernetes发行版,专为生产环境而设计
- Flannel 一个虚拟网络层,用于为容器化工作负载创建网络隔离和通信
- WireGuard 一种轻量级、高性能、安全的虚拟专用网络(VPN)协议,旨在提供安全的通信
- Flannel-WireGuard Flannel网络插件的一种后端,使用WireGuard加密和隧道技术来保护网络通信
在云厂控制台设置防火墙
参考下面的列表在云厂控制台设置防火墙规则。若无需精细控制的,可以设置为允许所有节点间TCP/UPD协议的全部端口互访。
本文中将k8s默认的Node Port端口30000-32767
更改为了常用的5432-9876
,读者朋友也可以根据自己的情况重新定义,只要保持service-node-port-range
参数和防火墙放开的端口对应即可。
协议 | 端口 | 源 | 目标 | 描述 |
---|---|---|---|---|
TCP | 2379-2380 | 主节点 | 主节点 | 只有具有嵌入式 etcd 的 HA 需要(即多个主节点) |
TCP | 6443 | 子节点 | 主节点 | K3s supervisor 和 Kubernetes API Server |
TCP | 10250 | 所有节点 | 所有节点 | Kubelet 指标收集 |
UDP | 51820 | 所有节点 | 所有节点 | 只有使用 IPv4 的 Flannel WireGuard 才需要 |
UDP | 51821 | 所有节点 | 所有节点 | 只有使用 IPv6 的 Flannel WireGuard 才需要 |
TCP | 5432-9876 | 所有地址 | 所有节点 | 允许外部访问自定义的 Node Port 才需要 |
UDP | 5432-9876 | 所有地址 | 所有节点 | 允许外部访问自定义的 Node Port 才需要 |
TCP | 80,443 | 所有地址 | 所有节点 | 允许外部访问 Web 服务才需要 |
在所有节点安装 WireGuard
安装好wireguard即可,无需额外设置,私有网络将经由 Flannel 管理;其他操作系统安装方法可参考文末的官方文档。
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
在所有节点设置环境变量
设置的环境变量需要保持到安装完毕;若终端会话断开,需重新设置。
务必替换SERVER_TOKEN
为一串随机字符,SERVER_IP
为主节点外网地址。
# k3s 主服务器外网地址
export SERVER_IP=43.129.195.33
# k3s 认证令牌,任意字符串
export SERVER_TOKEN=r83nui54eg8wihyiteshuo3o43gbf7u9er63o43gbf7uitujg8wihyitr6
# 自动获取本机地址,若无法获取请手动指定
export PUBLIC_IP=$(curl -Ls http://ipv4.rehi.org/ip)
export PRIVATE_IP=$(ip -o -4 addr list | grep eth0 | awk '{print $4}' | cut -d/ -f1)
# 使用指定渠道下载 k3s 主程序
export INSTALL_K3S_SKIP_DOWNLOAD=true
export DOWNLOAD_K3S_BIN_URL=https://github.com/k3s-io/k3s/releases/download/v1.28.2%2Bk3s1/k3s
# 境内服务器使用 ghproxy
if [ $(curl -Ls http://ipip.rehi.org/country_code) == "CN" ]; then
DOWNLOAD_K3S_BIN_URL=https://ghproxy.com/${DOWNLOAD_K3S_BIN_URL}
fi
在主节点安装 K3s Server
只在主节点执行即可,依赖上文设置的环境变量。其他参数信息可参考之前发布的使用 k3s 快速部署 kubernetes 集群。
# 下载 k3s 主程序
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 Agent
只在子节点执行即可,依赖上文设置的环境变量。
# 下载 k3s 主程序
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
在主节点查看所有pod
kubectl get pods -A
实战应用
根据本站Tag查阅 《Kubernetes 领进门》 系列文章