文章转载自: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. appium简单使用

    App 测试通常会用到的工具 adb :Android 的控制工具,用于获取Android的各种数据和控制 Appium Desktop:内嵌了Appium Server和Inspector的综合工具 ...

  2. 第十天python3 函数的销毁

    全局函数销毁 三种方式: 1.重新定义同名函数 2.del语句删除函数对象 3.程序结束时 局部函数销毁 三种方式: 1.重新在上级作用域定义同名函数: 2.del语句删除函数对象: 3.上级作用域销 ...

  3. php去除bom头

    //去掉bom头 $result = trim($result, "\xEF\xBB\xBF"); print_r(json_decode($result, true));

  4. 后端Python3+Flask结合Socket.io配合前端Vue2.0实现简单全双工在线客服系统

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_158 在之前的一篇文章中:为美多商城(Django2.0.4)添加基于websocket的实时通信,主动推送,聊天室及客服系统,详 ...

  5. php里的$this的 含义

    $this 的含义是表示    实例化后的 具体对象! 我们一般是先声明一个类,然后用这个类去实例化对象! 但是,当我们在声明这个类的时候,想在类本身内部使用本类的属性或者方法.应该怎么表示呢? 例如 ...

  6. DBPack 限流熔断功能发布说明

    上周我们发布了 v0.4.0 版本,增加了限流熔断功能,现对这两个功能做如下说明. 限流 DBPack 限流熔断功能通过 filter 实现.要设置限流规则,首先要定义 RateLimitFilter ...

  7. C++ 运行单个实例,防止程序多次启动

    利用内核对象 封装的类,使用运行单个实例,防止多次启动Demo 例子下载地址:http://pan.baidu.com/share/link?shareid=3202369154&uk=303 ...

  8. C++11实现的数据库连接池

    它什么是? 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:类似的还有线程池. 为什么要用? 一个数据库连接对象均对应一个物理数据库连接, ...

  9. [Noi2010]能量采集 (莫比乌斯反演)

    [Noi2010]能量采集 Description 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后, 栋栋再使用一个能量汇集机器把这些植物采集到的能 ...

  10. pod资源的健康检查-liveness探针的exec使用

    使用探针的方式对pod资源健康检查 探针的种类 livenessProbe:健康状态检查,周期性检查服务是否存活,检查结果失败,将重启容器 readinessProbe:可用性检查,周期性检查服务是否 ...