# haproxy和keepalived部署
```
apt-get install haproxy
#配置文件
global
log 127.0.0.1 local0 info
maxconn 4096
chroot /var/lib/haproxy
user haproxy
group haproxy
daemon
defaults
log global
mode tcp
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
listen stats
bind *:9000
mode http
stats enable
stats hide-version
stats uri /stats
stats refresh 30s
stats realm Haproxy\ Statistics
stats auth admin:P@ssw0rd
frontend k8s-api
bind *:6443
mode tcp
option tcplog
default_backend k8s-api
backend k8s-api
mode tcp
option tcplog
option tcp-check
balance leastconn
default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
server k8s-master1 192.168.11.212:6443 check
server k8s-master2 192.168.11.213:6443 check
server k8s-master3 192.168.11.214:6443 check
```
# keepalived部署
```
apt-get install keepalived
配置文件:
root@ubuntu:/etc/keepalived# ls
check_haproxy.sh keepalived.conf
#vim check_haproxy.sh
#!/bin/sh
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
systemctl restart haproxy
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
killall keepalived
fi
#chmod +x check_haproxy.sh
# vim keepalived.conf
! Configuration File for keepalived
# global setting , notify email setting
global_defs {
#存在于同一個網段中,一組keepalived的各個節點都有不同的名字
#在全局設置中,我們還可以設置管理員的email信息等。
router_id LVS_V1
}
#這個是我們在上一小結講到的haproxy檢查腳本,我們保存在這個文件中(注意文件權限)
vrrp_script chkhaproxy {
script "/etc/keepalived/check_haproxy.sh"
#每10秒鐘,檢查一次
interval 10
}
#keepalived實例設置,是最重要的設置信息
vrrp_instance VI_1 {
#state狀態MASTER表示是主要工作節點。
#一個keepalived組中,最多只有一個MASTER節點,當然也可以沒有
state MASTER
#實例所綁定的網卡設備,我的網卡設備是ens33。您按照您自己的來
interface ens160
#同一個keepalived組,節點的設置必須一樣,這樣才會被識別
virtual_router_id 52
#節點優先級,BACKUP的優先級一定要比MASTER的優先級低
priority 100
#組播信息發送間隔,兩個節點設置必須一樣
advert_int 1
#實際的ens33上的固定ip地址
mcast_src_ip 192.168.11.215
#驗證信息,只有驗證信息相同,才能被加入到一個組中。
authentication {
auth_type PASS
auth_pass 1111
}
#虛擬地址和綁定的端口,如果有多個,就綁定多個
#dev 是指定浮動IP要綁定的網卡設備號
virtual_ipaddress {
192.168.11.230/24 dev ens160
}
#設置的檢查腳本
#關聯上方的“vrrp_script chkhaproxy”
track_script {
chkhaproxy
}
}
!注意
#節點優先級,BACKUP的優先級一定要比MASTER的優先級低
priority 100
這里就是來區分haproxy主從的關鍵點一定要寫好
啟動服務:
systemctl start keepalived
ps -ef | grep keepalived
netstat -anptu | grep :6443
注意:如果該虛擬ip的端口沒有起來,node節點的kubelet組件無法連接到master的kube-apiserver組件,無法啟動kubelet服務。
啟動服務后,嘗試用master節點和node節點去Ping一下該虛擬ip,看是否可以互相通信。否則,檢查keepalived的端口。
root@a4:/etc/keepalived# netstat -ntpul | grep :6443
tcp 0 0 0.0.0.0:6443 0.0.0.0:* LISTEN 3428/haproxy
```