k8s 3个 master 节点搭建 keepalive
·
1、在三台 master 节点上安装
yum -y install keepalived
2、配置文件
抢占模式
在抢占模式中,keepalived的某台机器挂了之后VIP漂移到了备节点,当主节点恢复后主会将VIP再次抢回,这就是keepalive的抢占模式。keepalived默认工作在抢占模式下。在抢占模式中,主节点的state设为MASTER,备节点的state设为BACKUP,主节点的优先级要比备节点的优先级要高。
抢占模式 取决于优先级,哪个优先级高,谁就是master,和启动顺序无关。
master-1:
cat /etc/keepalived/keepalived.conf
global_defs {
router_id master-1 # 一般是主机名称,通过hostname获取
}
#定义脚本。固定间隔时间执行
vrrp_script chk_mysql {
script "killall -0 mysqld" # 检测haproxy状态,若无对应进程,则权重降级,备用keepalived启用
interval 2
weight -30
fall 5
rise 5
}
# 定义主机信息
vrrp_instance VI_1 {
state MASTER # 主机填写MASTER
interface ens192 # 设置实例绑定的网卡
garp_master_delay 1
virtual_router_id 10 # 虚拟路由器id号。主从必须一致
priority 100 # 定义优先级,数字越大,优先级越高
advert_int 1 # 心跳频率
unicast_src_ip 192.168.32.61 # 本机ip
unicast_peer {
192.168.32.65 # 对端ip
192.168.32.66 # 对端ip
}
authentication {
auth_type PASS
auth_pass zuanlan1437xi
}
virtual_ipaddress {
#192.168.112.210 dev ens33 label ens33:0
192.168.32.100 # 虚拟 ip(vip)
}
#执行上面定义的脚本
track_script {
chk_mysql
}
}
master-2:
cat /etc/keepalived/keepalived.conf
global_defs {
router_id node-4 #一般是主机名称,通过hostname获取
}
#定义脚本。固定间隔时间执行
vrrp_script chk_mysql {
script "killall -0 mysqld" #检测haproxy状态,若无对应进程,则权重降级,备用keepalived启用
interval 2
weight -30
fall 5
rise 5
}
# 定义主机信息
vrrp_instance VI_1 {
state BACKUP #主机填写MASTER
interface ens192 #设置实例绑定的网卡
garp_master_delay 1
virtual_router_id 10 #虚拟路由器id号。主从必须一致
priority 90 #定义优先级,数字越大,优先级越高
advert_int 1 #心跳频率
unicast_src_ip 192.168.32.65 #本机ip
unicast_peer {
192.168.32.61 #对端ip
192.168.32.66 #对端ip
}
authentication {
auth_type PASS
auth_pass zuanlan1437xi
}
virtual_ipaddress {
#192.168.112.210 dev ens33 label ens33:0
192.168.32.100
}
#执行上面定义的脚本
track_script {
chk_mysql
}
}
master-3:
cat /etc/keepalived/keepalived.conf
global_defs {
router_id node-5 #一般是主机名称,通过hostname获取
}
#定义脚本。固定间隔时间执行
vrrp_script chk_mysql {
script "killall -0 mysqld" #检测haproxy状态,若无对应进程,则权重降级,备用keepalived启用
interval 2
weight -30
fall 5
rise 5
}
# 定义主机信息
vrrp_instance VI_1 {
state BACKUP #主机填写MASTER
interface ens192 #设置实例绑定的网卡
garp_master_delay 1
virtual_router_id 10 #虚拟路由器id号。主从必须一致
priority 80 #定义优先级,数字越大,优先级越高
advert_int 1 #心跳频率
unicast_src_ip 192.168.32.66 #本机ip
unicast_peer {
192.168.32.61 #对端ip
192.168.32.65 #对端ip
}
authentication {
auth_type PASS
auth_pass zuanlan1437xi
}
virtual_ipaddress {
#192.168.112.210 dev ens33 label ens33:0
192.168.32.100
}
#执行上面定义的脚本
track_script {
chk_mysql
}
}
非抢占模式
两者的state都设为BUAKUP(官网说的),一个节点的优先级要比另一个节点的优先级要高,同时高优先级的节点设置nopreempt参数,该参数表示不抢占vip。这样,当高优先级的节点挂了之后,vip就会漂移到低优先级的节点上,但是当高优先级的节点再次恢复正常后再次起来后不会再抢回vip,因为它加了nopreempt参数。
非抢占模式 取决于启动顺序,哪个先启动,谁就是master,和优先级无关。
master-1:
global_defs {
router_id master-1 #一般是主机名称,通过hostname获取
}
#定义脚本。固定间隔时间执行
vrrp_script chk_mysql {
script "killall -0 mysqld" #检测haproxy状态,若无对应进程,则权重降级,备用keepalived启用
interval 2
weight -30
fall 5
rise 5
}
# 定义主机信息
vrrp_instance VI_1 {
state MASTER #主机填写MASTER
interface ens192 #设置实例绑定的网卡
garp_master_delay 1
nopreempt
virtual_router_id 10 #虚拟路由器id号。主从必须一致
priority 100 #定义优先级,数字越大,优先级越高
advert_int 1 #心跳频率
unicast_src_ip 192.168.32.61 #本机ip
unicast_peer {
192.168.32.65 #对端ip
192.168.32.66 #对端ip
}
authentication {
auth_type PASS
auth_pass zuanlan1437xi
}
virtual_ipaddress {
#192.168.112.210 dev ens33 label ens33:0
192.168.32.100
}
#执行上面定义的脚本
track_script {
chk_mysql
}
}
master-2:
global_defs {
router_id node-4 #一般是主机名称,通过hostname获取
}
#定义脚本。固定间隔时间执行
vrrp_script chk_mysql {
script "killall -0 mysqld" #检测haproxy状态,若无对应进程,则权重降级,备用keepalived启用
interval 2
weight -30
fall 5
rise 5
}
# 定义主机信息
vrrp_instance VI_1 {
state BACKUP #主机填写MASTER
interface ens192 #设置实例绑定的网卡
garp_master_delay 1
nopreempt
virtual_router_id 10 #虚拟路由器id号。主从必须一致
priority 90 #定义优先级,数字越大,优先级越高
advert_int 1 #心跳频率
unicast_src_ip 192.168.32.65 #本机ip
unicast_peer {
192.168.32.61 #对端ip
192.168.32.66 #对端ip
}
authentication {
auth_type PASS
auth_pass zuanlan1437xi
}
virtual_ipaddress {
#192.168.112.210 dev ens33 label ens33:0
192.168.32.100
}
#执行上面定义的脚本
track_script {
chk_mysql
}
}
master-3:
global_defs {
router_id node-5 #一般是主机名称,通过hostname获取
}
#定义脚本。固定间隔时间执行
vrrp_script chk_mysql {
script "killall -0 mysqld" #检测haproxy状态,若无对应进程,则权重降级,备用keepalived启用
interval 2
weight -30
fall 5
rise 5
}
# 定义主机信息
vrrp_instance VI_1 {
state BACKUP #主机填写MASTER
interface ens192 #设置实例绑定的网卡
garp_master_delay 1
nopreempt
virtual_router_id 10 #虚拟路由器id号。主从必须一致
priority 80 #定义优先级,数字越大,优先级越高
advert_int 1 #心跳频率
unicast_src_ip 192.168.32.66 #本机ip
unicast_peer {
192.168.32.61 #对端ip
192.168.32.65 #对端ip
}
authentication {
auth_type PASS
auth_pass zuanlan1437xi
}
virtual_ipaddress {
#192.168.112.210 dev ens33 label ens33:0
192.168.32.100
}
#执行上面定义的脚本
track_script {
chk_mysql
}
}
3、启动并设置开机自启
service keepalived start
systemctl enable keepalived
systemctl status keepalived
4、修改 kubeadm-config 文件
kubectl edit cm -n kube-system kubeadm-config
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
data:
ClusterConfiguration: |
apiServer:
extraArgs:
authorization-mode: Node,RBAC
timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta3
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controllerManager: {}
dns: {}
etcd:
local:
dataDir: /var/lib/etcd
imageRepository: registry.cn-hangzhou.aliyuncs.com/google_containers
kind: ClusterConfiguration
kubernetesVersion: v1.28.0
controlPlaneEndpoint: "192.168.32.100:6443" # 写 vip
networking:
dnsDomain: cluster.local
podSubnet: 10.244.0.0/16
serviceSubnet: 10.96.0.0/12
scheduler: {}
kind: ConfigMap
metadata:
creationTimestamp: "2025-04-17T16:35:06Z"
name: kubeadm-config
namespace: kube-system
resourceVersion: "4104721"
uid: 63976c4a-5925-46be-b305-adcc337faecc
更多推荐




所有评论(0)