国内网络基于Rocky9 搭建高可用rke2集群

资源规划

## 7台Rocky9 服务器,分别对应如下
    IP              主机名               角色
    192.168.30.80   k8s-haproxy         rke2的集群访问ip
    192.168.30.81   k8s-master01        etcd、control、worker
    192.168.30.82   k8s-master02        etcd、control、worker
    192.168.30.83   k8s-master03        etcd、control、worker
    192.168.30.84   k8s-worker01        worker
    192.168.30.85   k8s-worker02        worker
    192.168.30.86   k8s-rancher         rancher

## rke2 集群通信地址(用haproxy中转 6443和9345端口)
    rke2-k8s.atstm.cc   192.168.30.80

## rancher访问域名
    rancher.atstm.cc    192.168.30.86

基本环境准备(所有主机)

## 主机名( 注意不要用_下划线,可以是-连接线)=============
    hostnamectl set-hostname k8s-haproxy
    hostnamectl set-hostname k8s-master01
    hostnamectl set-hostname k8s-master02
    hostnamectl set-hostname k8s-master03
    hostnamectl set-hostname k8s-worker01
    hostnamectl set-hostname k8s-worker02
    hostnamectl set-hostname k8s-rancher

## 关闭swap 和防火墙
    swapoff -a            # 临时关闭
    #cat /etc/fstab        # 去关掉
    sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

    setenforce 0
    sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config
    systemctl disable firewalld --now

## 修改limits.conf
    cat >> /etc/security/limits.conf <<EOF
*               soft   nofile       65536
*               hard   nofile       65536
EOF

## hosts(有上游dns的话,直接上有配置也行)
    cat >> /etc/hosts <<EOF
192.168.30.80 rke2-k8s.atstm.cc
192.168.30.81 rancher.atstm.cc
EOF

## 时间同步(略)

安装haproxy节点

## 安装docker(略)

## 配置docker国内加速器(略)

## 配置haproxy
    mkdir -p /opt/devops/haproxy
    mkdir -p /opt/devops/haproxy/certs

    cat >> /opt/devops/haproxy/docker-compose.yml <<EOF
services:
  haproxy:
    image: haproxy:2.8  # 使用 HAProxy 2.8 版本
    container_name: haproxy
    ulimits:
      nofile:
        soft: 2048000
        hard: 2048000
    #ports:
    #  - "8888:8888"
    #  - "1883:1883"
    volumes:
      - ./haproxy.cfg:/etc/haproxy.cfg:ro  # 挂载自定义配置文件
      - ./certs:/etc/haproxy/certs
    command: ["haproxy", "-f", "/etc/haproxy.cfg"]
    network_mode: host
    restart: always
EOF

    cat >> /opt/devops/haproxy/haproxy.cfg <<EOF
global  
  log 127.0.0.1 local3 info
  daemon
  maxconn 102400

defaults
  log global
  mode tcp
  option tcplog
  #option dontlognull
  timeout connect 10000 
  # timeout > mqtt's keepalive * 1.2
  timeout client 240s
  timeout server 240s

#=============== 启用 haproxy 的 状态检查页面 ==============
frontend stats
  mode http
  bind *:8888
  stats enable
  stats uri /haproxy?stats
  stats refresh 5s

frontend rke2_1
    bind *:6443
    option tcplog
    mode tcp
    default_backend rke2_6443

backend rke2_6443
    balance roundrobin
    server k8s-master01 192.168.30.81:6443 check
    server k8s-master02 192.168.30.82:6443 check
    server k8s-master03 192.168.30.83:6443 check

frontend rke2_2
    bind *:9345
    option tcplog
    mode tcp
    default_backend rke2_9345

backend rke2_9345
    balance roundrobin
    server k8s-master01 192.168.30.81:9345 check
    server k8s-master02 192.168.30.82:9345 check
    server k8s-master03 192.168.30.83:9345 check
EOF

## 启动haproxy
    cd /opt/devops/haproxy
    docker compose up -d

rancher节点配置

请参考 https://boke.wsfnk.com/archives/1589.html

安装rke2集群

准备配置(所有k8s主机节点,含 和worker节点)

## 考虑到k8s对主机名,设备id等比较敏感,要求不能相同(实测设备id相同也可以)

## 设备id查看方式

## 修改虚拟机的设备id(我的是pve,应该这样修改)后面的是新id
    qm set 1071 --smbios1 uuid=9f02e699-af6f-41e8-9e84-9516486b0c71
    qm set 1072 --smbios1 uuid=9f02e699-af6f-41e8-9e84-9516486b0c72
    qm set 1073 --smbios1 uuid=9f02e699-af6f-41e8-9e84-9516486b0c73
    qm set 1074 --smbios1 uuid=9f02e699-af6f-41e8-9e84-9516486b0c74
    qm set 1075 --smbios1 uuid=9f02e699-af6f-41e8-9e84-9516486b0c75
## 前期的关闭swap,关闭防火墙 不要忘了

## 配置内核转发及网桥过滤
    # 所有主机需配置(网桥过滤)
    modprobe br_netfilter
    modprobe overlay
    cat >/etc/modules-load.d/k8s.conf <<EOF
br_netfilter
overlay
EOF

    # 所有主机均需配置(内核转发)
    cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
# 下面的内核参数可以解决ipvs模式下长连接空闲超时的问题,可按需添加
#net.ipv4.tcp_keepalive_intvl = 30
#net.ipv4.tcp_keepalive_probes = 10
#net.ipv4.tcp_keepalive_time = 600
EOF

    sysctl -p /etc/sysctl.d/k8s.conf

## 安装 ipset 和 ipvsadm (所有主机,因为后续会将集群的组件入iptables 修改为ipvs,以及负载均衡器kube_proxy)
    dnf install -y ipset ipvsadm
    #在 RHEL 10(及其衍生版本,如 Rocky Linux)上,需要额外的软件包才能启用 nf_conntrack。
    # dnf install kernel-modules-extra -y   实际测试不安装也可以开启

    # 配置ipvsadm模块加载
    modprobe -- ip_vs
    modprobe -- ip_vs_rr
    modprobe -- ip_vs_wrr
    modprobe -- ip_vs_sh
    modprobe -- nf_conntrack
    cat >/etc/modules-load.d/ipvs.conf <<EOF
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
# 5.2的内核以上使用:nf_conntrack ,之前的内核用 nf_conntrack_ipv4
nf_conntrack
EOF

    reboot
## 准备一个con的非安全代理镜像,如何搭建看其他地方
    # 工作原理。先去指定的地方拉取,不行就去docker.io拉取
    mkdir -p /etc/rancher/rke2/
    cat > /etc/rancher/rke2/registries.yaml <<EOF
mirrors:
  "docker.io":
    endpoint:
      - "https://83.229.123.29"
configs:
  "83.229.123.29":
    tls:
      insecure_skip_verify: true
EOF

## 最终效果会出现在如下文件的一部分
    cat /var/lib/rancher/rke2/agent/etc/containerd/config.toml

部署第一个管理server节点

## 部署第一个master(注意其他server的node-name 这一行要改下)
    mkdir -p /etc/rancher/rke2/
    cat > /etc/rancher/rke2/config.yaml <<EOF
token: mytoken-cc55yEoPCruhNiyt9eLmcc
node-name: k8s-master01
# cni插件若是不指定默认是canal
cni: cilium
# 这里使用的ha的域名和ip,若没有ha可使用多个matser节点ip
tls-san:
  - rke2-k8s.atstm.cc
  - 192.168.30.80
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
# 使用ipvs并启用严格arp格式,便于后期部署LB
kube-proxy-arg:
  - proxy-mode=ipvs
  - ipvs-strict-arp=true
#  - "cgroup-driver=systemd"
EOF

## 获取rke2安装程序,并使用中国源安装
    # 安装全新版本的server
    # curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_TYPE="server" sh -
    # 安装指定版本的server
    curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn \
INSTALL_RKE2_VERSION=v1.33.7+rke2r1 \
INSTALL_RKE2_TYPE="server" \
sh -

## 查看rke2相关程序
    find / -name rke2
    rke2 --version

## 启动第一个server
    systemctl enable rke2-server.service  --now
    # 如有需要,可以查看日志(等待10分种左右没有在报错应该rke2 就启动起来了)
    journalctl -u rke2-server -f

## 设置环境变量
    cat > /etc/profile.d/rke2.sh <<EOF
export PATH=$PATH:/var/lib/rancher/rke2/bin
export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
EOF
    source /etc/profile
    # 测试命令是否正常
[root@k8s-master01 ~]# kubectl get nodes
NAME           STATUS   ROLES                       AGE   VERSION
k8s-master01   Ready    control-plane,etcd,master   43m   v1.33.5+rke2r1

    ## 排查问题
    kubectl get pods -A | grep -E "calico|flannel|cni|canal"

部署第二,第三个server节点

## 准备配置文件
    mkdir -p /etc/rancher/rke2/
    cat > /etc/rancher/rke2/config.yaml <<EOF
# 多一行server
server: https://rke2-k8s.atstm.cc:9345
token: mytoken-cc55yEoPCruhNiyt9eLmcc
# ===== 其他的master就这个名称不一样就行 =====
node-name: k8s-master02
cni: cilium
tls-san:
  - rke2-k8s.atstm.cc
  - 192.168.30.80
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
kube-proxy-arg:
  - proxy-mode=ipvs
  - ipvs-strict-arp=true
#  - "cgroup-driver=systemd"
EOF

## 安装指定版本的server
    curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn \
INSTALL_RKE2_VERSION=v1.33.7+rke2r1 \
INSTALL_RKE2_TYPE="server" \
sh -

## 启动server
    systemctl enable rke2-server.service  --now

部署第一个worker(其他worker就名字不一样)

    mkdir -p /etc/rancher/rke2/
    cat > /etc/rancher/rke2/config.yaml <<EOF
server: https://rke2-k8s.atstm.cc:9345
token: mytoken-cc55yEoPCruhNiyt9eLmcc
# ==== 其他的worker就这个名称不一样就行  ====
node-name: k8s-worker01
cni: cilium
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
kube-proxy-arg:
  - proxy-mode=ipvs
  - ipvs-strict-arp=true
#  - "cgroup-driver=systemd"
EOF

## 安装agent
    # 指定中国源、不带版本,(重复执行,不带版本就可以升级)
    #curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_TYPE="agent" sh -
    curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn INSTALL_RKE2_VERSION=v1.33.7+rke2r1 INSTALL_RKE2_TYPE="agent" sh -

## 启动
    systemctl enable rke2-agent  --now
    journalctl -u rke2-agent -f
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/1604.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2026/1/27作者: 辣条①号

目标:网络规划设计师、系统工程师、ceph存储工程师、云计算工程师。 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录