侧边栏壁纸
  • 累计撰写 12 篇文章
  • 累计创建 4 个标签
  • 累计收到 6 条评论
标签搜索

跨云厂商部署k3s集群

请叫我雯子小姐的小爷
2022-04-16 / 2 评论 / 10 点赞 / 2,476 阅读 / 3,900 字

系统准备

本文中使用的两台服务器环境都是Centos7.6,两台机器配置如下:
1、华为云耀云服务器 1H2G1M,作为master节点
2、腾讯云轻量应用服务器 2H4G6M,作为agent节点

环境准备

k3s默认网络插件flannel的默认模式是vxlan模式,在跨云厂商情况下部署k3s,我们推荐使用wireguard模式,对wireguard感兴趣的同学可以点击查看一下:https://www.wireguard.com/

内核升级(所有节点都需要升级)

wireguard对Linux内核的要求比较高,内核版本需要>=5.6才能使用原生的wireguard。

查看内核版本

可以使用uname -r命令查看系统的内核版本:

[root@toodo-master ~]# uname -r
5.17.3-1.el7.elrepo.x86_64

如果你的内核版本>=5.6,可以直接跳过本节,如果不满足要求,可以按照以下步骤升级系统内核:

升级系统内核

# 安装工具,卸载旧的内核源码包
yum -y install epel-release curl
sed -i "0,/enabled=0/s//enabled=1/" /etc/yum.repos.d/epel.repo
yum remove -y kernel-devel

# 导入elrepo公钥
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org

# 安装 elrepo
rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

# 安装新版本工具包
yum --disablerepo="*" --enablerepo="elrepo-kernel" list available
yum -y --enablerepo=elrepo-kernel install kernel-ml

# 设置默认启动
sed -i "s/GRUB_DEFAULT=saved/GRUB_DEFAULT=0/" /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg

# 安装新版本工具包 -- 注意:kernel-ml-devel-5.17.3-1.el7.elrepo.x86_64.rpm为我安装时的最新版本,具体版本可以在 https://elrepo.org/linux/kernel/el7/x86_64/RPMS/ 查看
wget https://elrepo.org/linux/kernel/el7/x86_64/RPMS/kernel-ml-devel-5.17.3-1.el7.elrepo.x86_64.rpm
rpm -ivh kernel-ml-devel-5.17.3-1.el7.elrepo.x86_64.rpm

# 重启
reboot

# 查看升级后的版本
uname -r

安装wireguard(所有节点都要安装)

可以使用以下命令安装wireguard

yum install epel-release https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
yum install yum-plugin-elrepo
yum install kmod-wireguard wireguard-tools

开放端口

为满足集群中不同节点间的通讯,需要开放以下端口:

端口 协议
6443 tcp
10250 tcp

部署k3s集群

管理节点

可以使用以下命令安装k3s节点:

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

安装完成后还需要对配置进行一些修改以满足不同云厂商之间的连接。编辑/etc/systemd/system/k3s.service,修改ExecStart中的启动参数为:

ExecStart=/usr/local/bin/k3s \
    server \
    --tls-san <public_ip> \
    --node-ip <public_ip> \
    --node-external-ip <public_ip> \
    --no-deploy servicelb \
    --flannel-backend wireguard \
    --kube-proxy-arg "proxy-mode=ipvs" "masquerade-all=true" \
    --kube-proxy-arg "metrics-bind-address=0.0.0.0"

<publib_ip>更换为你服务器节点所在的公网IP。修改完成后需要重启k3s服务:

systemctl daemon-reload
systemctl restart k3s

计算节点

同样,计算节点也可以使用以下命令安装k3s:

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -

安装完成后,需要更改以下配置,以满足在云服务器间通讯。

修改 /etc/systemd/system/k3s.service

/etc/systemd/system/k3s.service中的ExecStart内容修改为以下:

ExecStart=/usr/local/bin/k3s agent \
    --node-external-ip <public_ip> \
    --node-ip <public_ip> \
    --kube-proxy-arg "proxy-mode=ipvs" "masquerade-all=true" \
    --kube-proxy-arg "metrics-bind-address=0.0.0.0"

<publib_ip>更换为你服务器节点所在的公网IP。

修改 /etc/systemd/system/k3s.service.env

/etc/systemd/system/k3s.service.env中添加以下内容:

K3S_URL="https://<master_ip>:6443"
K3S_TOKEN="<token>"

其中,<master_ip>为管理节点的IP,<token>可以在管理节点执行以下命令得到:

 cat /var/lib/rancher/k3s/server/node-token

重启k3s

修改完成后需要重启k3s服务:

systemctl daemon-reload
systemctl restart k3s

查看节点状态

在管理节点执行以下命令查看节点状态:

[root@toodo-master ~]# kubectl get node
NAME           STATUS   ROLES                  AGE     VERSION
toodo-master   Ready    control-plane,master   4h9m    v1.22.7+k3s1
toodo-worker   Ready    <none>                 3h56m   v1.22.7+k3s1

配置内网互通

不同节点的 flannel 使用的是内网 IP 来进行通信,而我们的云服务器是内网不互通的,而且公网 IP 也不在服务器上。可以看一下 node 的 annotations:

[root@toodo-master ~]# kubectl get node <node_name> -o yaml
apiVersion: v1
kind: Node
metadata:
  annotations:
    flannel.alpha.coreos.com/backend-data: '"Bv7N0pDoOQqpZY1dfaB29Qe/xyHC4EiS14NGMwTEMk4="'
    flannel.alpha.coreos.com/backend-type: extension
    flannel.alpha.coreos.com/kube-subnet-manager: "true"
    flannel.alpha.coreos.com/public-ip: 192.168.0.2
    ……

可以使用以下命令对每个节点进行更改:

kubectl annotate nodes <master> flannel.alpha.coreos.com/public-ip-overwrite=<master_pub_ip>
kubectl annotate nodes <node> flannel.alpha.coreos.com/public-ip-overwrite=<node_pub_ip>

更改完成后需要各个节点重启k3s才能生效。

参考

跨云厂商部署 k3s 集群:https://icloudnative.io/posts/deploy-k3s-cross-public-cloud/
被Linux创始人称做艺术品的组网神器——WireGuard:https://zhuanlan.zhihu.com/p/447375895

10