作者 修订时间
wjlin0 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镜像地址

image-20240314125144515

hostNetwork 修改

default:
  .....
  externalTrafficPolicy: "Local"

image-20240314185220229

多云部署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

修改国内镜像地址

image-20240315095558135

image-20240315095625640

修改hostNetwork

image-20240315095709258

修改dnsPolicy

image-20240315095733235

helm install -n ingress-nginx ingress-nginx/ingress-nginx .

Referer

results matching ""

    No results matching ""