为什么选择多主节点部署k8s集群
单主:
优势:部署简单,易维护
劣势:缺乏高可用性,主节点出故障,整个集群将无法工作,这可能导致服务中断和数据丢失
多主:
优势:具备高可用性和负载均衡的能力,一个主节点崩溃,不影响整个集群工作,并且etcd集群之间互相同步数据,保证了数据的一致性
劣势:部署麻烦,维护成本高
k8s单主机与多主节点拓扑对比
可以看到多主节点集群的node节点和master节点之间还需要一层负载均衡去负载API Server的请求。
环境准备
系统:rocky9.3
性能:主节点4h4G,从节点2h4G
部署架构:三主三从
主节点地址
10.10.40.100 k8s-master00
10.10.40.101 k8s-master01
10.10.40.102 k8s-master02
VIP地址(用于负载均衡的虚拟IP地址,随便指定个局域网内没有使用的地址)
10.10.40.110
从节点地址
10.10.40.103 k8s-node03
10.10.40.104 k8s-node04
10.10.40.105 k8s-node05
部署流程,以下部署所有节点都要执行
0.提前安装所需要用到的软件包
dnf -y install bash* vim wget tar expect
1.关闭防火墙和selinux
systemctl disable --now firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
2.关闭Swap分区
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
3.修改主机名并配置hosts以及配置免密登录
hostnamectl set-hostname k8s-master00
cat >> /etc/hosts << EOF
10.10.40.100 k8s-master00
10.10.40.101 k8s-master01
10.10.40.102 k8s-master02
10.10.40.103 k8s-node03
10.10.40.104 k8s-node04
10.10.40.105 k8s-node05
EOF
# 所有节点执行以下命令生成秘钥
ssh-keygen
# 所有节点执行免密登录脚本
vim login.sh
#!/usr/bin/expect
for i in {
0..2};do expect -c "
set timeout 2
spawn ssh-copy-id k8s-master0$i
expect {
"yes/no" {send yes\r;exp_continue}
"password" {send 1\r}
};expect eof"
done
for i in {
3..5};do expect -c "
set timeout 2
spawn ssh-copy-id k8s-node0$i
expect {
"yes/no" {send yes\r;exp_continue}
"password" {send 1\r}
};expect eof"
done
# 添加执行权限并运行脚本
chmod +x login.sh
bash login.sh
4.加载内核模块以及配置iptables流量转发策略
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
# 加载内核
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
# 使配置生效
sysctl --system
5.检查是否加载成功
sysctl --system
lsmod | grep br_netfilter
lsmod | grep overlay
6.时间同步
# 编辑配置文件,注释第三行,添加第四行
vim /etc/chrony.conf
3 #pool 2.rocky.pool.ntp.org iburst
4 server ntp1.aliyun.com iburst
# 保存,重启
systemctl restart chronyd.service
# 查看是否同步成功
timedatectl
7.安装containerd和runc
在github官网找到对应版本的cri-containerd-cni下载
# 下载技巧,在国外网址前加上镜像加速地址,下载