离线部署Rancher 2.x高可用(一)RKE2集群部署

一、前言
作为K8S的新手小白,从docker转移阵地过来,直接上手学习Rancher2.x和RKE2,且是比较麻烦的离线安装,架构也较为复杂,经过几个月的摸索试验,基本算是“头破血流”,最终完成了第一步部署的工作。翻阅官方文档和百度文章以及论坛前辈的指导,总结出了些许自认为对初学者(大神请自动略过 :joy:)有用的Rancher的部署经验,供大家参考。
二、背景
1、拓扑架构
keepalived+Nginx(4层负载)+RKE2 Server(3server节点)
主机信息如下:

2、Rancher Server 设置

  • Rancher 版本:2.7.5
  • 安装选项: Helm Chart
  • RKE2版本:v1.26.5+rke2r1 (GitHub有Rancher和RKE2版本对应关系)
  • 在线或离线部署:离线部署

3、部署前准备

1)主机环境如系统参数、防火墙、内核版本等,可自行根据实际情况并参照官方文档进行设置,此处略过。
2)keepalived+Nginx(4层负载)提前准备好,要注意的是Nginx要支持stream模块,自行编译,此处略过。
3)私有镜像仓库,我是用的是harbor,基本也是一键部署,从GitHub下载即可。
4)RKE2离线部署包,供4个文件,GitHub下载就不多说,可以向身边的开发讨教:

  • install.sh #安装使用的脚本文件
  • rke2-images.linux-amd64.tar.zst #需要的image文件包
  • rke2.linux-amd64.tar.gz #rke2二进制文件
  • sha256sum-amd64.txt #文件校验

5)DNS解析:server节点注册使用的https地址需要提前配置DNS解析,推荐外部DNS服务解析virtual_loadblance_server 172.16.0.100

三、RKE2部署
1、固定的server注册地址

  • 使用第1个server节点IP地址作为固定注册地址,最简单但不可靠;
  • 使用外部固定的端点作为注册地址,有3种途径:
    -4层(TCP)负载均衡器;
    -轮询DNS;
    -虚拟或弹性IP地址。

Nginx配置4层(TCP)负载均衡器steam模块部分(非标准):

upstream virtual_loadblance_server {
        server 172.16.0.101:9345 weight=2 max_fails=3 fail_timeout=10s;
        #server 172.16.0.102:9345 weight=2 max_fails=3 fail_timeout=10s;
        #server 172.16.0.103:9345 weight=2 max_fails=3 fail_timeout=10s;
}

server {
        listen 9345;
        proxy_connect_timeout 3s;
        proxy_timeout 10s;
        proxy_pass virtual_loadblance_server;
}

注:注册server节点时,可以先把102和103注释,待集群所有节点注册完成后取消注释。

2、server01(第一个server节点)节点安装

#主机创建目录上传4个文件
mkdir /data/rke2-artifacts && cd /data/rke2-artifacts
#然后上传文件
install.sh
rke2-images.linux-amd64.tar.zst
rke2.linux-amd64.tar.gz
sha256sum-amd64.txt

#复制压缩包至镜像目录
mkdir -p /var/lib/rancher/rke2/agent/images && cd /data/rke2-artifacts
cp rke2-images.linux-amd64.tar.zst /var/lib/rancher/rke2/agent/images

#执行安装脚本
cd /data/rke2-artifacts
INSTALL_RKE2_TYPE="server" INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_ARTIFACT_PATH=/data/rke2-artifacts sh install.sh

#修改集群配置文件
vim /etc/rancher/rke2/config.yaml
# 以下为配置文件内容
token: k8s-rke2-secret
tls-san:
   - virtual_loadblance_server
   - 172.16.0.100

node-name: k8s-rke2-server01
node-label: 
   - "role=master"

3、server01(第1节点)启动

# 启动节点
# 第一次启动可能会比较慢,因为要初始化、生成各种文件
systemctl enable rke2-server
systemctl start rke2-server
#若启动报错,则重启服务
systemctl restart rke2-server
#查看启动日志
journalctl -u rke2-server.service -f
#查看服务状态
systemctl status rke2-server

4、集群添加第2个Server节点

#修改集群配置文件
mkdir -p /etc/rancher/rke2
vim /etc/rancher/rke2/config.yaml
# 以下为配置文件内容
server: https://virtual_loadblance_server:9345
token: k8s-rke2-secret
tls-san:
   - virtual_loadblance_server
   - 172.16.0.100

node-name: k8s-rke2-server02
node-label: 
   - "role=master"

第2个server节点安装启动同server01步骤。

5、集群添加第3个Server节点

#修改集群配置文件
mkdir -p /etc/rancher/rke2
vim /etc/rancher/rke2/config.yaml
# 以下为配置文件内容
server: https://virtual_loadblance_server:9345
token: k8s-rke2-secret
tls-san:
   - 172.16.0.100
   - virtual_loadblance_server

node-name: k8s-rke2-server03
node-label: 
   - "role=master"

第2个server节点安装启动同server01步骤。

6、集群添加Agent节点(可选)

#修改集群配置文件
mkdir -p /etc/rancher/rke2
vim /etc/rancher/rke2/config.yaml
# 以下为配置文件内容
server: https://virtual_loadblance_server:9345
token: k8s-rke2-secret
tls-san:
   - 172.16.0.100
   - virtual_loadblance_server

node-name: k8s-rke2-agent01
node-label: 
   - "role=agent"

agent节点安装启动不同的地方是安装脚本INSTALL_RKE2_TYPE=“agent”,以及启动命令systemctl start rke2-agent。
至此Rancher使用的高可用RKE2集群部署完毕,下一步可以开心的部署Rancher Server。
如有不足或错误的地方,请大家不吝指正!

补充:RKE2应该是不支持主机名包含下划线"_",会导致集群启动报错,建议使用横线"-"。

I0808 10:26:22.232751   29566 kubelet_node_status.go:70] "Attempting to register node" node="rancher_rke2_test1"
E0808 10:26:22.233090   29566 kubelet_node_status.go:92] "Unable to register node with API server" err="Post \"https://127.0.0.1:6443/api/v1/nodes\": dial tcp 127.0.0.1:6443: connect: connection refused" node="rancher_rke2_test1"
E0808 10:26:25.483901   29566 file.go:187] "Could not process manifest file" err="invalid pod: [metadata.name: Invalid value: \"etcd-rancher_rke2_test1\": a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*') spec.nodeName: Invalid value: \"rancher_rke2_test1\": a lowercase RFC 1123 subdomain must consist of lower case alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character (e.g. 'example.com', regex used for validation is '[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*')]" path="/var/lib/rancher/rke2/agent/pod-manifests/etcd.yaml"
1 个赞

您好PangCF,集群必须添加了Agent节点才可以安装Rancher吗

不需要,我部署rancher server的就是rke2-server集群

rke2 集群部署好了后,如何部署rancher

可参考官网:https://ranchermanager.docs.rancher.com/zh/pages-for-subheaders/install-upgrade-on-a-kubernetes-cluster