2019独角兽企业重金招聘Python工程师标准>>>
Keepalived是一个用于虚拟IP自动切换的软件,可以在多个节点指定一个虚拟IP地址,遇到主节点故障时将该虚拟IP漂移到其它可用的节点,从而保障服务可以持续,用于k8s中master节点的服务IP(即kube-apiserver监听的地址)的容错。
- 注意
- 服务所依赖的环境需要在所有节点上预先配置好。
- Keepalived仅对IP地址进行漂移,当前应用状态会丢失。
- 当前应用的状态和数据需要应用自身在多节点间进行同步。
在Ubuntu18.04 LTS 安装软件(http://www.keepalived.org/):
sudo apt install keepalived
刚安装完,配置文件目录/etc/keepalived/是空的,把下面的内容保存为文件keepalived.conf和chk_k8s_master.sh,放到该目录下。
- 注意:
- 虚拟IP会占用一个物理网卡地址。通过配置文件指定。
- 使用 ifconfig查看网卡的de vice接口信息,选择其它服务不用的网卡用于虚拟IP。
- 因为keepalived会动态改变绑定网卡的IP地址,不要把其它服务绑定到该网卡端口和IP地址上。
虚拟 ip 绑定的网卡
interface enp0s31f6
配置文件
配置文件/etc/keepalived/keepalived.conf:
! Configuration File for keepalived
global_defs {
}
vrrp_script check_k8s {
# 自身状态检测
script "/etc/keepalived/chk_k8s_master.sh"
interval 3
weight 5
}
vrrp_instance VI_1 {
# 初始化状态
state MASTER
# 虚拟 ip 绑定的网卡
interface enp0s31f6
# 此 ID 要与 Backup 配置一致
virtual_router_id 80
# 默认启动优先级,要比 Backup 大点,但要控制量,保证自身状态监测生效
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# 虚拟 ip 地址
10.1.1.201
}
track_script {
check_k8s
}
}
故障检测
存活状态检测模块/etc/keepalived/chk_k8s_master.sh:
#!/bin/bash
count=`ss -tnl | grep 6443 | wc -l`
if [ $count = 0 ]; then
exit 1
else
exit 0
fi
服务切换
$ vi /etc/keepalived/back_k8s.sh
#!/bin/bash
systemctl stop kube-apiserver.service
sleep 5s
systemctl restart kube-kubelet.service
systemctl start kube-apiserver.service
然后重启:
sudo systemctl restart keepalived
现在,可以ping一下设定的虚拟地址10.1.1.201,看是否可用(该地址使用ifconfig显示不出来)。
K8s中使用
Keepalived可以用于k8s中master节点的服务IP(即kube-apiserver监听的地址)的容错。其它副节点需安装所有的master服务(kube-apiserver/kube-scheduler/kube-control-manager)和etcd集群元数据服务。
更多参考:
- Netplan配置实例,https://netplan.io/examples
- Kubernetes探秘—配置文件目录结构
- Kubernetes探秘-多master节点容错部署
- Kubernetes集群的主节点备份与恢复
- Kubernetes探秘—etcd状态数据及其备份
- Kubernetes探秘—etcd节点和实例扩容
- Kubernetes 1.13.1的etcd集群扩容实战技巧
- Kubernetes的etcd数据查看和迁移
- etcd集群备份和数据恢复
-
使用 keepalived 部署高可用 Kubernetes Master