文章转载自:https://mp.weixin.qq.com/s?__biz=MzI1MDgwNzQ1MQ==&mid=2247483796&idx=1&sn=347664dead91e978bd0d9bfcf3dca5f9&chksm=e9fdd460de8a5d768dd29e9cc8156e380be2cd0a2bd34cd015c67acce6ff42ed0a03ce060a36&cur_album_id=1341273083637989377&scene=189#wechat_redirect

二进制安装kubernetes 1.17.0版本时,要想对kube-apiserver高可用,有很多种方式方法可供选择,网上大部分使用Haproxy+keepalived、Nginx+keepalived、或者单独使用Nginx等,条条大路通罗马,只要根据公司或者个人掌握的知识点进行选择即可,工具没有好坏之分,关键看什么人使用,这里我们选择使用Nginx+keepalived(Nginx在1.9.0版本及以后,都新增了TCP代理支持,还是很好使用的,不过需要在编译时,指定负载均衡模块stream)。

部署Nginx

登录nginx01.k8s.vip,下载并安装,如下脚本,此过程中有可能遇到有些库文件或者依赖不存在的情况,可根据实际情况解决。

#!/bin/bash

# 创建安装目录及nginx日志目录
mkdir -p /data/nginx/ /data/logs/nginx # 下载nginx
cd /data/
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar -zxf nginx-1.16.1.tar.gz && cd nginx-1.16.1 # 编译安装
./configure --with-stream --without-http --prefix=/data/nginx --without-http_uwsgi_module
make && make install

注意要编译--with-stream这个模块,否则不能使用TCP代理,安装完成后,配置文件修改如下

[root@nginx01 conf]# cat nginx.conf
#user nobody;
worker_processes 4;
events {
worker_connections 1024;
} stream {
log_format main '$remote_addr [$time_local]'
'$protocol $status $bytes_sent $bytes_received'
'$session_time "$upstream_addr" '
'"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"'; access_log /data/logs/nginx/access.log main;
error_log /data/logs/nginx/error.log warn;
upstream backend {
hash $remote_addr consistent;
server 192.168.16.104:6443 max_fails=3 fail_timeout=30s;
server 192.168.16.105:6443 max_fails=3 fail_timeout=30s;
server 192.168.16.106:6443 max_fails=3 fail_timeout=30s;
}
server {
listen *:8443;
proxy_connect_timeout 1s;
proxy_pass backend;
}
}
[root@nginx01 conf]# pwd
/data/nginx/conf
[root@nginx01 conf]#

启动并验证

[root@nginx01 conf]# /data/nginx/sbin/nginx -t
nginx: the configuration file /data/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /data/nginx/conf/nginx.conf test is successful
[root@nginx01 conf]# /data/nginx/sbin/nginx
[root@nginx01 conf]# netstat -antp | grep 8443
tcp 0 0 0.0.0.0:8443 0.0.0.0:* LISTEN 31759/nginx: master
[root@nginx01 conf]#

登录nginx02.k8s.vip,按上面操作部署,执行即可完成nginx的安装及配置。

部署keepalived

keepalived起初是为LVS设计,专门用来监控集群中realserver的状态,如果服务器节点出现异常或故障,keepalived可以及时检测到,并将故障服务器从集群系统中剔除,不需要人工干预。后来它被应用到Linux服务器的各种应用中,目前它已经是Linux服务器上面的一个轻量级的高可用解决方案,应该广泛,目前引入了VRRP协议等。在Linux服务器上面,安装方式极其简单如下。

[root@nginx01 conf]# yum install -y keepalived

安装完成后,默认配置在/etc/keepalived/keepalived.conf下面,在这里简单配置如下:

[root@nginx01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs {
notification_email {
}
router_id kube_api
} vrrp_script check_nginx {
script "killall -0 nginx"
interval 3
weight 5
} vrrp_instance nginx-vip {
unicast_src_ip 192.168.16.108
unicast_peer {
192.168.16.109
}
state MASTER #实例初始状态,实际的MASTER和BACKUP是启动后选举决定的
interface eth0 #指定VIP绑定的在哪张网卡上面
virtual_router_id 51 #设置虚拟路由ID,相同集群相同,不同集群不同原则
priority 100 #优先级,优先级高的被竞选为Master
advert_int 1 #检查的时间间隔,默认是1秒
authentication {
auth_type PASS #认证方式选择官方推荐的PASS,还有一个AH
auth_pass 12345 #认证密码
}
virtual_ipaddress {
192.168.16.253 # 设置VIP
}
track_script {
check_nginx
}
} virtual_server 192.168.16.253 443 {
delay_loop 5 #健康检查时间间隔
persistence_timeout 1800 #会话保持时间
protocol TCP #使用协议是TCP real_server 192.168.16.108 8443 {
weight 1
TCP_CHECK {
connect_port 8443
connect_timeout 3
}
} real_server 192.168.16.109 8443 {
weight 1
TCP_CHECK {
connect_port 8443
connect_timeout 3
}
}
}
[root@nginx01 ~]#

登录nginx02.k8s.vip,配置如下

[root@nginx02 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs {
notification_email {
}
router_id kube_api
} vrrp_script check_nginx {
script "killall -0 nginx"
interval 3
weight 5
} vrrp_instance nginx-vip {
unicast_src_ip 192.168.16.109
unicast_peer {
192.168.16.108
}
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 12345
}
virtual_ipaddress {
192.168.16.253
}
track_script {
check_nginx
}
} virtual_server 192.168.16.253 443 {
delay_loop 5
persistence_timeout 1800
protocol TCP real_server 192.168.16.108 8443 {
weight 1
TCP_CHECK {
connect_port 8443
connect_timeout 3
}
} real_server 192.168.16.109 8443 {
weight 1
TCP_CHECK {
connect_port 8443
connect_timeout 3
}
}
}
[root@nginx02 ~]#

两台服务器分别启动服务如下

[root@nginx01 ~]# systemctl start keepalived

查看运行结果

[root@nginx01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 06:2f:16:00:07:6e brd ff:ff:ff:ff:ff:ff
inet 192.168.16.108/24 brd 192.168.16.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.16.253/32 scope global eth0
valid_lft forever preferred_lft forever
[root@nginx01 ~]#

现在把nginx01上面的keepalived stop,然后登录nginx02查看如下

[root@nginx02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 06:37:46:1e:17:6d brd ff:ff:ff:ff:ff:ff
inet 192.168.16.109/24 brd 192.168.16.255 scope global eth0
valid_lft forever preferred_lft forever
inet 192.168.16.253/32 scope global eth0
valid_lft forever preferred_lft forever
[root@nginx02 ~]#

把nginx01上面的keepalived start后,VIP又会飘移到nginx01上面.

总结

keepalived的使用方式多种多样,只要能到达所想要的结果即可,这里使用的是类似配置LVS的方式,指定realserver。

至此我们的Nginx+Keepalived即安装完成,后面在部署kubernetes时,我们就可以使用这里的VIP 192.168.16.253,把它解析成api.k8s.vip来使用。

6.第五篇 安装keepalived与Nginx的更多相关文章

  1. ELK 二进制安装并收集nginx日志

    对于日志来说,最常见的需求就是收集.存储.查询.展示,开源社区正好有相对应的开源项目:logstash(收集).elasticsearch(存储+搜索).kibana(展示),我们将这三个组合起来的技 ...

  2. keepalived与nginx安装

    目的: 当用户请求访问时,会通过nginx来访问web服务应用,因此我们必须要保证nginx的高可用,要保证nginx的高可用,我们需要通过keepalived来监控nginx,并对外提供1个虚拟的v ...

  3. Centos7安装keepalived(自定义路径安装)-高级篇

    0.Keepalived介绍 Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat.corosync.pacemaker.但 ...

  4. Nginx安装(我觉得我这篇可能是全网最清晰的一篇安装步骤了)

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/46aadb8f-5 ...

  5. (五) Docker 安装 Nginx

    参考并感谢 官方文档 https://hub.docker.com/_/nginx 下载nginx镜像(不带tag标签则表示下载latest版本) docker pull nginx 启动 nginx ...

  6. linux安装Nginx 以及 keepalived 管理Nginx

    linux安装Nginx 1.1将Nginx素材内容上传到/usr/local目录(pcre,zlib,openssl,nginx)(注意:必须登录用对这个文件具有操作权限的) 1.2安装pcre库 ...

  7. Net分布式系统之三:Keepalived+LVS+Nginx负载均衡之高可用

    上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常运行.针对系统架构设计的高可用要求,我们需要解决Nginx ...

  8. nginx+keepalived实现nginx双主高可用的负载均衡

    http://kling.blog.51cto.com/3320545/1253474 一.前言: 在互联网上面,网站为用户提供原始的内容访问,同时为用户提供交互操作.提供稳定可靠的服务,可以给用户带 ...

  9. Keepalived+LVS+Nginx负载均衡之高可用

    Keepalived+LVS+Nginx负载均衡之高可用 上一篇写了nginx负载均衡,此篇实现高可用(HA).系统整体设计是采用Nginx做负载均衡,若出现Nginx单机故障,则导致整个系统无法正常 ...

随机推荐

  1. XML方式配置切面

    1. 概述  一个切面中需要包含什么,才能够作用到连接点?切面中是包含通知的,通知作用到连接点需要有切入点表达式. 除了使用AspectJ注解声明切面,Spring也支持在bean配置文件中声明切面. ...

  2. IDEA的概述和IDEA的安装

    开发工具概述 IDEA是一个专门针对Java的集成开发工具(IDE),由Java语言编写.所以,需要有JRE运行环境并配置好环境变量. 它可以极大地提升我们的开发效率.可以自动编译,检查错误.在公司中 ...

  3. -bash: nignx: 未找到命令

    nignx -t 如果报错: 因为没有配置环境变量吧,把nginx路径 配置到环境变量里面就可以. 按照配置: 1:进入 vim /etc/profile 文件 在配置文件的最后面添加PATH(PAT ...

  4. Pytorch Tensor 维度的扩充和压缩

    维度扩展 x.unsqueeze(n) 在 n 号位置添加一个维度 例子: import torch x = torch.rand(3,2) x1 = x.unsqueeze(0) # 在第一维的位置 ...

  5. EFCore高级Saas系统下一个DbContext如何支持多数据库迁移

    EFCore高级玩法单DbContext支持多数据库迁移 前言 随着系统的不断开发和迭代默认的efcore功能十分强大,但是随着Saas系统的引进efcore基于表字段的多租户模式已经非常完美了,但是 ...

  6. 搞懂前端二进制系列(一):🍇 认识Blob对象

    参考资料: https://juejin.cn/post/6844904183661854727 [你不知道的Blob] https://juejin.cn/post/6844904144453517 ...

  7. 《HelloGitHub》第 76 期

    兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣.入门级的开源项目. https://github.com/521xueweiha ...

  8. YII扩展功能图

  9. odoo 14 一些常见问题集

    1 # 当你往tree或者form视图中增加action的时候 2 # 记住!千万别重名 3 # 一旦重名,Export.Delete.Archive.Unarchive都会消失不见 4 # tree ...

  10. Java 在PDF中添加水印

    在日常工作和学习中,PDF的普及给人们带来了极大的便利,但同时也出现了很多问题. PDF文件容易复制和传播,版权难以保护. 在海量文件中也很难区分信息,例如,你有没有打开一个文件夹,里面有这么多同名的 ...