文章目录
资源规划
## 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
如果文章对你有帮助,欢迎点击上方按钮打赏作者
谢谢你请我吃辣条
暂无评论