yum install keepalived nginx -y yum install keepalived nginx -t ======================================================== ======================================================== nginx配置文件 加上这一段: 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.1.63:6443; server 192.168.1.64:6443; } server { listen 6443; proxy_pass k8s-apiserver; } } keepalived配置文件 ! 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 NGINX_MASTER } vrrp_script check_nginx { script "/usr/local/nginx/sbin/check_nginx.sh" ###检测脚本 } vrrp_instance VI_1 { state BACKUP interface enp0s3 ##改成你网卡的设备名去配置文件看看在写 virtual_router_id 51 # VRRP 路由 ID实例,每个实例是唯一的 (主备一致) priority 100 # 优先级,主比备高,备写90 advert_int 1 # 指定VRRP 心跳包通告间隔时间,默认1秒 authentication { auth_type PASS ##密码验证 auth_pass 1111 } virtual_ipaddress { ####vip地址 192.168.1.60/24 } track_script { #指定脚本检测 check_nginx } } systemctl start nginx sysremctl start keepalived 总结: 1,ip add查看master节点,会发现多出来一个ip地址60,这个就是vip,当master正常运行时,backup是没有这个ip的 2,可以用ping命令检测,当master节点挂了,60这个ip会漂移到bakcup节点继续提供服务 3,中间会有1次ping断层 ======================================================== ======================================================== 将node01和node02 添加到负载均衡集群中 1,node01操作 root@k8s-node01: /opt/kubernetes/cfg 16:00:20 $ grep 60 * bootstrap.kubeconfig: server: https://192.168.1.60:6443 bootstrap.kubeconfig: token: 0fb61c46f8991b718eb38d27b605b008 kubelet.kubeconfig: server: https://192.168.1.60:6443 kube-proxy.kubeconfig: server: https://192.168.1.60:6443 root@k8s-node01: /opt/kubernetes/cfg 16:00:25 $ ##将grep出来的60位置原来是master节点ip,全部替换成60,指向负载ip地址,node-2同样操作 重启node节点kubelet,kube-proxy 2,验证 lb-master查看日志,node节点通过两个master链接lb root@lb-master: /opt 14:36:30 $ tail -f /var/log/nginx/k8s-access.log 192.168.1.65 192.168.1.64:6443 - [25/Mar/2019:11:43:02 +0800] 200 1119 192.168.1.65 192.168.1.63:6443 - [25/Mar/2019:13:27:07 +0800] 200 1119 192.168.1.66 192.168.1.63:6443 - [25/Mar/2019:13:27:07 +0800] 200 1119 192.168.1.65 192.168.1.63:6443 - [25/Mar/2019:13:27:07 +0800] 200 1566 192.168.1.66 192.168.1.63:6443 - [25/Mar/2019:13:27:07 +0800] 200 1118 192.168.1.65 192.168.1.64:6443 - [25/Mar/2019:13:27:07 +0800] 200 1566 192.168.1.66 192.168.1.64:6443 - [25/Mar/2019:13:27:07 +0800] 200 1566 192.168.1.66 192.168.1.64:6443 - [25/Mar/2019:13:27:07 +0800] 200 1118 192.168.1.65 192.168.1.64:6443 - [25/Mar/2019:13:27:07 +0800] 200 1117 192.168.1.65 192.168.1.64:6443 - [25/Mar/2019:13:27:07 +0800] 200 1117 ======================================================== ======================================================== k8s双master节点 1,将master节点配置文件systemctl管理工具考到master02上 scp -r /opt/kubernetes/ root@192.168.1.64:/opt/ scp /usr/lib/systemd/system/{kube-apiserver,kube-scheduler,kube-controller-manager}.service root@192.168.1.64:/usr/lib/systemd/system/ scp /usr/bin/kubectl root@192.168.1.64:/usr/bin/ 2,修改master02节点kube-apiserver,kube-scheduler,kube-controller-manager配置文件ip地址改成master02的 root@master02: /opt/kubernetes/cfg 15:47:12 $ pwd /opt/kubernetes/cfg root@master02: /opt/kubernetes/cfg 15:47:12 $ ls kube-apiserver kube-controller-manager kube-scheduler token.csv ##这是已经改完了的了,正常是grep 63,会显示文件中含有master01节点ip63的所有。 root@master02: /opt/kubernetes/cfg 15:47:15 $ grep 64 * kube-apiserver:--bind-address=192.168.1.64 \ kube-apiserver:--secure-port=6443 \ kube-apiserver:--advertise-address=192.168.1.64 \ root@master02: /opt/kubernetes/cfg 15:47:19 $ ps: 因为kube-ctroller-manager kube-scheduler配置文件写的都是127.0.0.1所有没有改动 3,启动master02 systemctl restart kube-apiserver systemctl restart kube-ctroller-manager systemctl restart kube-scheduler 4,验证 root@master02: /opt/kubernetes/cfg 15:50:18 $ kubectl get node NAME STATUS ROLES AGE VERSION 192.168.1.65 Ready <none> 63m v1.13.4 192.168.1.66 Ready <none> 4d22h v1.13.4 root@master02: /opt/kubernetes/cfg 15:50:22 $ kubectl get csr NAME AGE REQUESTOR CONDITION node-csr-XMad_RYrooh4SENAIOWeD2VIGEZOR-5jVG3QASPBZzA 65m kubelet-bootstrap Approved,Issued root@master02: /opt/kubernetes/cfg 15:50:25 $ kubectl get cs NAME STATUS MESSAGE ERROR controller-manager Healthy ok scheduler Healthy ok etcd-0 Healthy {"health":"true"} etcd-2 Healthy {"health":"true"} etcd-1 Healthy {"health":"true"} root@master02: /opt/kubernetes/cfg 15:50:28 $ kubectl get pod NAME READY STATUS RESTARTS AGE java-84767655bc-5rlth 0/1 CrashLoopBackOff 15 57m nginx-7cdbd8cdc9-2jwmj 1/1 Running 0 51m nginx-7cdbd8cdc9-bwp9v 1/1 Running 0 57m nginx-7cdbd8cdc9-zc2rl 1/1 Running 0 57m root@master02: /opt/kubernetes/cfg 15:50:30 $ ======================================================== ========================================================