热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[k8s集群系列-05]KubernetesMaster高可用

使用阿里云SLB使master节点高可用服务器是在阿里云上的,17年的时候vpc网络是有HAVIP的,就可以使用haproxy+keepalived.今年阿里云可能关闭了这个功能,需要对应的客户经

使用阿里云SLB使master节点高可用

服务器是在阿里云上的,17年的时候vpc网络是有HAVIP的,就可以使用haproxy+keepalived.今年阿里云可能关闭了这个功能,需要对应的客户经理去申请开通,只能使用VPC内的SLB

监听配置

使用tcp 4层负载均衡,不使用7层,跳过证书验证的环节,tcp 4层不能关闭健康检查

前端端口 后端端口 健康检查端口
80 8080 8080
443 6443 6443

配置hosts

ip  fqdn

注意:阿里云的负载均衡是四层TCP负责,不支持后端ECS实例既作为Real Server又作为客户端向所在的负载均衡实例发送请求。因为返回的数据包只在云服务器内部转发,不经过负载均衡,所以在后端ECS实例上去访问负载均衡的服务地址是不通的。什么意思?就是如果你要使用阿里云的SLB的话,那么你不能在apiserver节点上使用SLB(比如在apiserver 上安装kubectl,然后将apiserver的地址设置为SLB的负载地址使用),因为这样的话就可能造成回环了,所以简单的做法是另外用两个新的节点做HA实例,然后将这两个实例添加到SLB 机器组中。

使用haproxy+keepalived实现

安装配置haproxy

下载

wget http://www.haproxy.org/download/1.8/src/haproxy-1.8.9.tar.gz
tar -xf haproxy-1.8.9.tar.gz -C /usr/local/src/

编译安装haproxy

yum install gcc gcc-c++ autoconf automake -y
cd /usr/local/src/haproxy-1.8.9/
make TARGET=linux2628 ARCH=x86_64 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy

> /usr/local/haproxy/sbin/haproxy -v
HA-Proxy version 1.8.9-83616ec 2018/05/18
Copyright 2000-2018 Willy Tarreau 

创建相关目录,默认配置文件

mkdir /etc/haproxy

cat > /etc/sysconfig/haproxy <

systemd unit服务启动脚本

cat > /usr/lib/systemd/system/haproxy.service <

haproxy的配置

cat > /etc/haproxy/haproxy.cfg <

haproxy日志
Haproxy默认不会直接输出文件日志,需要借助Linux的rsyslog输出日志。

haproxy.cfg配置文件中global和defaults域中添加如下字段:

global
    ......
    log 127.0.0.1 local0 info
    log 127.0.0.1 local1 warning
    ......

defaults
    ......
    log global
    ......

global中的配置,是将info级别及以上的日志输出到rsyslog的local0接口,将warn级别及以上的日志输出到rsyslog。 info会打印每个请求的日志,生产环境中建议将日志级别设置为notice

为ryslog添加haproxy日志的配置/etc/rsyslog.d/haproxy.conf

mkdir /var/log/haproxy

cat > /etc/rsyslog.d/haproxy.conf <

修改ryslog的启动参数/etc/sysconfig/rsyslog:

SYSLOGD_OPTIOnS="-c 2 -r -m 0"

重启rsyslog:

systemctl restart rsyslog

启动haproxy

systemctl daemon-reload
systemctl start haproxy
systemctl enable haproxy
systemctl status haproxy

然后我们可以通过上面9000端口监控我们的haproxy的运行状态(192.168.16.245:9000/stats):

另外一台也这样安装配置

安装配置keepalived

节点 ip
192.168.16.245 Master
192.168.16.246 Backup
192.168.16.247 Vip

下载

wget http://www.keepalived.org/software/keepalived-1.4.4.tar.gz
tar -xf keepalived-1.4.4.tar.gz -C /usr/local/src/

编译安装keepalived

yum install libnl-devel libnfnetlink-devel openssl-devel -y

cd /usr/local/src/keepalived-1.4.4/
./configure --prefix=/usr/local/keepalived
make -j 4 && make install

注册为系统服务
安装完成后在/usr/lib/systemd/system/keepalived.service自动生成

/usr/local/src/keepalived-1.4.4/keepalived/keepalived.service

配置keepalived

ln -sf /usr/local/keepalived/etc/keepalived/ /etc/keepalived
cd /etc/keepalived
mv keepalived.conf keepalived.conf.default

Master

cat > /etc/keepalived/keepalived.conf <

Backup

cat > /etc/keepalived/keepalived.conf <

haproxy检查脚本

cat /etc/keepalived/chk_haproxy_master.sh
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
   systemctl start haproxy
   sleep 3

   if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
        systemctl stop keepalived
   fi
fi

chmod +x /etc/keepalived/chk_haproxy_master.sh

启动keepalived服务

systemctl enable keepalived
systemctl start keepalived

2: ens192:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:98:2e:9c brd ff:ff:ff:ff:ff:ff
    inet 192.168.16.245/24 brd 192.168.16.255 scope global noprefixroute ens192
       valid_lft forever preferred_lft forever
    inet 192.168.16.247/32 scope global ens192
       valid_lft forever preferred_lft forever
    inet6 fe80::822:4c72:993b:a056/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
    inet6 fe80::6450:5694:d6c3:b30e/64 scope link tentative noprefixroute dadfailed
       valid_lft forever preferred_lft forever

另外节点也这样安装

后面验证下vip漂移就ok

kube-controller-manager 和kube-scheduler 的高可用

Kubernetes 的管理层服务包括kube-schedulerkube-controller-managerkube-schedulerkube-controller-manager使用一主多从的高可用方案,在同一时刻只允许一个服务处以具体的任务。Kubernetes中实现了一套简单的选主逻辑,依赖Etcd实现scheduler和controller-manager的选主功能。如果scheduler和controller-manager在启动的时候设置了leader-elect参数,它们在启动后会先尝试获取leader节点身份,只有在获取leader节点身份后才可以执行具体的业务逻辑。它们分别会在Etcd中创建kube-scheduler和kube-controller-manager的endpoint,endpoint的信息中记录了当前的leader节点信息,以及记录的上次更新时间。leader节点会定期更新endpoint的信息,维护自己的leader身份。每个从节点的服务都会定期检查endpoint的信息,如果endpoint的信息在时间范围内没有更新,它们会尝试更新自己为leader节点。scheduler服务以及controller-manager服务之间不会进行通信,利用Etcd的强一致性,能够保证在分布式高并发情况下leader节点的全局唯一性。整体方案如下图所示:

当集群中的leader节点服务异常后,其它节点的服务会尝试更新自身为leader节点,当有多个节点同时更新endpoint时,由Etcd保证只有一个服务的更新请求能够成功。通过这种机制sheduler和controller-manager可以保证在leader节点宕机后其它的节点可以顺利选主,保证服务故障后快速恢复。当集群中的网络出现故障时对服务的选主影响不是很大,因为scheduler和controller-manager是依赖Etcd进行选主的,在网络故障后,可以和Etcd通信的主机依然可以按照之前的逻辑进行选主,就算集群被切分,Etcd也可以保证同一时刻只有一个节点的服务处于leader状态。


推荐阅读
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 本文探讨了如何通过编程手段在Linux系统中禁用硬件预取功能。基于Intel® Core™微架构的应用性能优化需求,文章详细介绍了相关配置方法和代码实现,旨在帮助开发人员有效控制硬件预取行为,提升应用程序的运行效率。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 本文详细介绍了如何在 Linux 系统上安装 JDK 1.8、MySQL 和 Redis,并提供了相应的环境配置和验证步骤。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 在Ubuntu上安装MySQL时解决缺少libaio.so.1错误及libaio在MySQL中的重要性分析
    在Ubuntu系统上安装MySQL时,遇到了缺少libaio.so.1的错误。本文详细介绍了如何解决这一问题,并深入探讨了libaio库在MySQL性能优化中的重要作用。对于初学者而言,理解这些依赖关系和配置步骤是成功安装和运行MySQL的关键。通过本文的指导,读者可以顺利解决相关问题,并更好地掌握MySQL在Linux环境下的部署与管理。 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • 如何高效地安装并配置 PostgreSQL 数据库系统?本文将详细介绍从下载到安装、配置环境变量、初始化数据库、以及优化性能的全过程,帮助读者快速掌握 PostgreSQL 的核心操作与最佳实践。文章还涵盖了常见问题的解决方案,确保用户在部署过程中能够顺利解决遇到的各种挑战。 ... [详细]
  • 在JavaWeb项目架构中,NFS(网络文件系统)的实现与优化是关键环节。NFS允许不同主机系统通过局域网共享文件和目录,提高资源利用率和数据访问效率。本文详细探讨了NFS在JavaWeb项目中的应用,包括配置、性能优化及常见问题的解决方案,旨在为开发者提供实用的技术参考。 ... [详细]
  • IIS 7及7.5版本中应用程序池的最佳配置策略与实践
    在IIS 7及7.5版本中,优化应用程序池的配置是提升Web站点性能的关键步骤。具体操作包括:首先定位到目标Web站点的应用程序池,然后通过“应用程序池”菜单找到对应的池,右键选择“高级设置”。在一般优化方案中,建议调整以下几个关键参数:1. **基本设置**: - **队列长度**:默认值为1000,可根据实际需求调整队列长度,以提高处理请求的能力。此外,还可以进一步优化其他参数,如处理器使用限制、回收策略等,以确保应用程序池的高效运行。这些优化措施有助于提升系统的稳定性和响应速度。 ... [详细]
  • 黄聪:MySQL主从复制配置,实现高效读写分离
    大型网站为应对高并发访问,不仅需要在前端实现分布式负载均衡,还需在数据业务和访问层采取有效措施。采用传统的数据结构已无法满足需求,通过配置MySQL主从复制,可实现高效的读写分离,显著提升系统性能和稳定性。 ... [详细]
author-avatar
手机用户2602910191_702
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有