keepalived_ins
在6台ubuntu20.04机器上通过keepalive维护一个虚拟IP实现ingress服务高可用:
IP: 10.201.81.54-59
VIP: 10.201.81.6
apt -y install keepalived
直接安装
主节点 54 配置
vim /etc/keepalived/keepalived.conf
! 精简版 Keepalived 配置(仅维护 VIP)
global_defs {
router_id INGRESS_MASTER # 节点标识,自定义即可,不参与算法,可随意
}
vrrp_instance VI_1 {
state MASTER # 主节点标识
interface ens18 # 替换为你的实际网卡名(如 ens33)
virtual_router_id 6 # 所有节点必须一致(1-255)
priority 100 # 主节点优先级最高
advert_int 1 # 心跳间隔 1 秒
nopreempt # 非抢占模式(避免主节点恢复后抢占 VIP)
# 认证配置(所有节点必须一致)
authentication {
auth_type PASS
auth_pass 1111 # 自定义认证密码,建议修改
}
# 虚拟 IP 配置(VIP)
virtual_ipaddress {
10.201.81.6/24 dev ens18 # VIP + 子网掩码 + 网卡
}
}
systemctl enable keepalived
systemctl start keepalived
其他节点配置
global_defs {
router_id INGRESS_BACKUP # 备节点标识,自定义
}
vrrp_instance VI_1 {
state BACKUP # 备节点标识
interface ens18 # 与主节点一致的网卡
virtual_router_id 6 # 与主节点一致
priority PRIORITY_PLACEHOLDER # 备节点优先级(主节点100最高,其余节点随意降低)
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111 # 与主节点一致
}
virtual_ipaddress {
10.201.81.6/24 dev ens18 # 与主节点一致
}
}
Ansible安装
先装keepalived
ansible uat_k8s --module-name apt --args "name=keepalived state=present update_cache=true cache_valid_time=3600" --limit "10.10.10.103,10.10.10.104,10.10.10.105" --become --become-method sudo --forks 3 --timeout 10
ansible 10.10.10.103,10.10.10.104,10.10.10.105 -m shell -a 'apt -y install keepalived' -b -f3
通过ansible 给23,24,25三台机器配个10的vip,在ens18往口上
23=MASTER/100,24=BACKUP/90,25=BACKUP/80,只做vrrp,不做健康检查
ansible 10.10.10.23,10.10.10.24,10.10.10.25 --become --forks 3 --timeout 12 --module-name shell --args 'set -eu
case "{{ inventory_hostname }}" in
10.10.10.23) STATE=MASTER; PRIORITY=100; RID=kv23 ;;
10.10.10.24) STATE=BACKUP; PRIORITY=90; RID=kv24 ;;
10.10.10.25) STATE=BACKUP; PRIORITY=80; RID=kv25 ;;
*) echo "unexpected_host={{ inventory_hostname }}"; exit 1 ;;
esac
mkdir -p /etc/keepalived
if [ -f /etc/keepalived/keepalived.conf ] && ! grep -q "managed-by-ansible-hc-pro" /etc/keepalived/keepalived.conf; then
cp -a /etc/keepalived/keepalived.conf "/etc/keepalived/keepalived.conf.bak.$(date +%Y%m%d%H%M%S)"
fi
cat > /etc/keepalived/keepalived.conf <<EOF
# managed-by-ansible-hc-pro
global_defs {
router_id ${RID}
}
vrrp_instance VI_HC_PRO {
state ${STATE}
interface ens18
virtual_router_id 51
priority ${PRIORITY}
advert_int 1
authentication {
auth_type PASS
auth_pass Keepalive@2026
}
virtual_ipaddress {
10.10.10.10/24
}
}
EOF
systemctl enable keepalived >/dev/null
systemctl restart keepalived
sleep 2
echo "host={{ inventory_hostname }} state=${STATE} priority=${PRIORITY} active=$(systemctl is-active keepalived)"
ip -4 -brief addr show ens18
journalctl -u keepalived -n 20 --no-pager' && ansible 10.10.10.23,10.10.10.24,10.10.10.25 --become --forks 3 --timeout 8 --module-name shell --args 'echo "host={{ inventory_hostname }}"; ip -4 addr show ens18 | grep -E "inet |10.10.10.10" || true; ping -c 1 -W 1 10.10.10.10 >/dev/null && echo vip_ping=ok || echo vip_ping=fail'