作者 | 修订时间 |
---|---|
2024-10-08 13:06:41 |
单云部署k3s
安装k3s
由于默认k3s安装会安装traefik
,而我用惯了ingress-nginx
所以就移除了traefik
的安装
# k3s v1.25+ 之后 flag –no-deploy 弃用,更改为 –disable,但安装前需要确认 rancher 支持的 k3s 版本范围,目前 v1.25+ 不在 rancher 支持范围内,需要使用环境变量 INSTALL_K3S_VERSION 指定安装版本
export INSTALL_K3S_EXEC="server --disable traefik"
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
sudo cp /etc/rancher/k3s/k3s.yaml $HOME/.kube/config
基于helm安装ingress-nginx
安装helm
wget https://get.helm.sh/helm-v3.14.3-linux-amd64.tar.gz && tar -zxvf helm-v3.14.3-linux-amd64.tar.gz -C /tmp && mv /tmp/linux-amd64/helm /usr/local/bin/ && chmod +x /usr/local/bin/helm
添加ingress-nginx
官方仓库
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
获取 ingress-nginx
helm pull ingress-nginx/ingress-nginx
tar -zxvf ingress-nginx-4.10.0.tgz && rm ingress-nginx-4.10.0.tgz # 注意您下的版本进行解压
cd ingress-nginx
修改国内镜像地址
修改controller
的镜像地址
无hostNetwork
修改
default:
.....
externalTrafficPolicy: "Local"
多云部署k3s
WireGuard组网(内网隧道搭建)
[!Tip]
由于买的国内厂商打折服务器,大部分情况下都无法在同一家厂商买到多台优惠服务器,此时想搭建 K3S 集群就需要走公网,直接通过K3S 的安装方式节点之间无法通信,因此需要使用
WireGuard
来组网。
前提
在搭建跨云的 k3s
集群前,需要先把 WireGuard
安装好,WireGuard
对内核有要求,要升级到 5.15.2-1.el7.elrepo.x86_64
以上
并且开启IP转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
echo "net.ipv4.conf.all.proxy_arp = 1" >> /etc/sysctl.conf
sysctl -p /etc/sysctl.conf
修改主机名称
hostnamectl set-hostname k3s-xxx
安装
安装 WireGuard
apt install wireguard
在所有主机上使用一下命令生成,公私钥(用于内网加密通讯使用)
wg genkey | tee privatekey | wg pubkey > publickey
密钥是配置到本机的,而公钥是配置到其它机器里的,结果示例如下:
cat privatekey publickey
EMWcI01iqM4zkb7xfbaaxxxxxxxxDo2GJUA=
0ay8WfGOIHndWklSIVBqrsp5LDWxxxxxxxxxxxxxxQ=
然后编写配置文件,以供 wg-quick 使用
vim /etc/wireguard/wg0.conf
然后写入如下内容
[Interface]
PrivateKey = EMWcI01iqM4zkb7xfbaaxxxxxxxxDo2GJUA= #(本机生成的私钥)
Address = 192.168.2.1
ListenPort = 5418
[Peer]
PublicKey = Node-1服务器的 publickey后续Node-1生成后再改
EndPoint = (Node-1公网IP):5418
AllowedIPs = 192.168.2.2(Node-1内网IP)/32
[Peer]
PublicKey = Node-2服务器的 publickey后续Node-2生成后再改
EndPoint = (Node-2公网IP):5418
AllowedIPs = 192.168.2.3(Node-2内网IP)/32
同理其他节点均使用这个
部署
wg-quick up wg0
自动化配置
系统重启后,WireGuard
创建的网卡设备就会丢失,WireGuard
提供了自动化的脚本来解决这件事,在两台服务器都执行如下操作
systemctl enable wg-quick@wg0
使用上述命令生成 systemd 守护脚本,开机会自动运行 up 指令。
配置热重载
wg-quick 并未提供重载相关的指令,但是提供了 strip
指令,可以将 conf 文件转换为 wg 指令可以识别的格式。
wg syncconf wg0 <(wg-quick strip wg0)
即可实现热重载。
完成 WireGuard
的安装配置以后,接下来就可以安装 k3s 的集群了。
部署server
修改对应的外部ip
$SERVER_IP -> 101.43.95.147
,$SERVER_VIRTUAL_IP=192.168.2.1
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_EXEC="server --disable traefik" INSTALL_K3S_MIRROR=cn K3S_TOKEN=token_1 sh -s - --node-ip "$SERVER_VIRTUAL_IP" --node-external-ip="$SERVER_IP" --flannel-backend=wireguard-native --flannel-external-ip --flannel-iface wg0
部署agent
修改对应的外部ip
$AGENT_IP -> xx.xx.xx.xx
$AGENT_VIRTUAL_IP
curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | K3S_URL=https://101.43.95.147:6443 INSTALL_K3S_MIRROR=cn K3S_TOKEN=token_1 sh -s - --node-external-ip="$AGENT_IP" --node-ip $AGENT_VIRTUAL_IP --flannel-iface wg0
安装ingres-nginx
安装方式与k8s保持一致
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm pull ingress-nginx/ingress-nginx
tar -zxvf ingress-nginx-4.10.0.tgz && rm ingress-nginx-4.10.0.tgz # 注意您下的版本进行解压
cd ingress-nginx
vim values.yaml
修改国内镜像地址
修改hostNetwork
修改dnsPolicy
helm install -n ingress-nginx ingress-nginx/ingress-nginx .