搭建高可用Kubernetes集群之Nginx+Keepalived集群搭建(二)

Keepalived简介

说到Keepalived,首先介绍一下什么是VRRP(Virtual Router Redundancy Protocol)协议,即虚拟器路由冗余协议,是为了解决局域网内默认网关单点失效的问题。

VRRP 将局域网内的一组路由器组成一个虚拟路由器组,每个路由器都有自己的局域网地址, 根据设置的优先级最高决定那个是master路由器。然后网关地址赋给该主路由器, 该主路由器定时发送VRRP报文向虚拟路由器组公布健康状况, 备份的路由器根据波纹判断Master路由器是否工作正常,从而决定是否要接替它. VRRP说白了就是实现IP地址漂移的,是一种容错协议。在下图中,Router A(10.100.10.1)、Router B(10.100.10.2)和Router C(10.100.10.3) 组成一个虚拟路由器。各虚拟路由器都有自己的IP地址。局域网内的主机将虚拟路由器设置为缺省网关。 Router A、Router B和Router C中优先级最高的那台路由器作为Master路由器,比如A,承担网关的功能。局域网内的服务 只知道这台主master路由器A的存在,将自己缺省路由下一跳地址设置为该路由的ip地址10.100.10.1, 其余两台路由器作为Backup路由器。当master路由器出故障后, backup路由器会根据优先级重新选举出新的master路由器承担网关功能。Master路由器周期性地发送VRRP报文, 在虚拟路由器中公布其配置信息(优先级等)和工作状况。Backup路由器通过接收到VRRP报文的情况来判断Master路由器是否工作工常。


 
 

Keepalived是基于vrrp协议的一款高可用软件,它是作用在主机上,而不是路由器上。Keepailived把多台主机虚拟在一起,提供一个虚拟IP对外提供服务,它拥有一台master服务器和多台backup服务器,当主服务器出现故障时,虚拟IP地址会自动漂移到备份服务器,实现故障转移的高可用可能,即双机热备。注意:服务器的时间一定要一致。

Haproxy简介

HAProxy 提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是开源、快速并且可靠的一种解决方案。HAProxy 特别适用于那些负载特大的 web 站点, 这些站点通常又需要会话保持或七层处理(和Nginx比较有优势的地方)。HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整 合进您当前的架构中, 同时可以保护你的 web 服务器不被暴露到网络上。

它在kubernetes高可用集群中的作用如下图,负责接收各节点发送给API Server的消息,然后负载均衡到任一个主节点,保证了数据的一致性:

 

思路大致就是lb这个集群中vip地址所在的节点负责监听kubernetes集群的各组件发送给api的消息,然后haproxy利用负载均衡实现消息分发到各个kubernetes的master节点,keepalived则保证这个接收请求的“大门“保持敞开。

备注:一般推荐使用Haproxy+Keepalived来实现LB集群,不过本人对Nginx比较熟悉,所以我选择Nginx+Keepalived来实现LB集群。

环境规划

LB(Master)  192.168.248.202 Nginx Keepalived 
LB(Backup)  192.168.248.206 Nginx Keepalived nfs-server
VIP:192.168.248.209

安装Keepalived

192.168.248.202服务器:

yum install -y keepalived
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {  #接收人邮箱地址
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc #发送人邮箱
   smtp_server 127.0.0.1 #邮箱服务器
   smtp_connect_timeout 30
   router_id 192.168.248.202  #主机名,每个节点不同
   vrrp_skip_check_adv_addr
   # vrrp_strict  注释,不然严格遵守vvrp,访问不了vip
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

#nginx配置 vrrp_script check_nginx { script "/etc/keepalived/check_nginx.sh" } vrrp_instance VI_1 { state MASTER #主服务器 interface ens32 #VIP 漂移到的网卡 virtual_router_id 51 #多个节点必须相同 priority 100 #优先级,备服务器比这个低 advert_int 1 #指定VRRP 心跳包通告间隔时间,默认1秒 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.248.209/26 #vip } }

192.168.248.206服务器:

yum install -y keepalived
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id linsrv2
}

#nginx配置
vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx.sh"
}

vrrp_instance VI_1 {
    state MASTER
    interface em1
    virtual_router_id 51
    priority 90  #优先级,备份服务器比这个低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.248.209/26
    }
}

然后在192.168.248.202、192.168.248.206节点执行下列命令启动Keepalived

systemctl start keepalived
systemctl enable keepalived

现在你可以尝试关闭主节点,看看vip是否漂移到其他节点去了,然后再打开主节点,vip又重新绑定到主节点的网卡上。

安装Nginx

192.168.248.202、192.168.248.206服务器:

rpm -vih http://nginx.org/packages/rhel/7/x86_64/RPMS/nginx-1.16.0-1.el7.ngx.x86_64.rpm
vim /etc/nginx/nginx.conf
#配置文件最后一行追加如下内容
stream {

    log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';

    access_log  /var/log/nginx/k8s-access.log  main;

    upstream k8s-apiserver {
                server 192.168.248.161:6443; 
                server 192.168.248.162:6443;
            }

    server {
       listen 6443;
       proxy_pass k8s-apiserver;
    }
}

启动nginx

systemctl start nginx
systemctl enable nginx

Nginx+keepalived高可用配置 

cat /etc/keepalived/check_nginx.sh 

#!/bin/bash
count=$(ps -ef |grep nginx |egrep -cv "grep|$$")

if [ "$count" -eq 0 ];then
    exit 1
else
    exit 0
fi

 并将此脚本加入到keepalived配置文件中(上面keepalived配置文件已加入)

vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx.sh"
} 

至此Nginx+Keepalived搭建完毕。

参考:https://www.jianshu.com/p/7a41f0294f32

原文地址:https://www.cnblogs.com/zhangmingcheng/p/13646907.html