二进制文件部署k8s方式(5)

二进制文件部署k8s方式(5)

Haproxy+KeepAlived负载均衡部署

HAProxy + Keepalived 是一对经典的高可用负载均衡解决方案:HAProxy 负责智能分发流量和健康检查,Keepalived 则通过 VIP(虚拟IP)机制实现故障转移,两者结合能为关键服务(如Kubernetes API Server)提供稳定可靠的外部访问入口,确保业务在单点故障时无缝切换。

安装Haproxy与KeepAlived

所有master节点执行

bash 复制代码
dnf -y install haproxy keepalived
HAProxy配置
bash 复制代码
cat > /etc/haproxy/haproxy.cfg << EOF
global
  maxconn 2000
  ulimit-n 16384
  log 127.0.0.1 local0 err
  stats timeout 30s

defaults
  log global
  mode http
  option httplog
  timeout connect 5000
  timeout client 50000
  timeout server 50000
  timeout http-request 15s
  timeout http-keep-alive 15s

frontend monitor-in
  bind *:33305
  mode http
  option httplog
  monitor-uri /monitor
listen stats
  mode http
  bind *:8888
  stats auth admin:password
  stats refresh 5s
  stats realm HAProxy\ Statistics
  stats uri /stats
  log 127.0.0.1 local3 err
  
frontend kube-apiserver
  bind 0.0.0.0:16443
  bind 127.0.0.1:16443
  mode tcp
  option tcplog
  tcp-request inspect-delay 5s
  default_backend kube-apiservers

backend kube-apiservers
  mode tcp
  option tcplog
  option tcp-check
  balance roundrobin
  default-server inter 10s downinter 5s rise 2 fall 2 slowstart 60s maxconn 250 maxqueue 256 weight 100
  server master1 192.168.153.161:6443 check
  server master2 192.168.153.162:6443 check
  server master3 192.168.153.163:6443 check
EOF

配置解析

bash 复制代码
==================== 全局配置 ====================
global
  maxconn 2000          # 最大并发连接数限制
  ulimit-n 16384        # 系统文件描述符限制
  log 127.0.0.1 local0 err  # 错误日志发送到本地syslog的local0设施
  stats timeout 30s     # 统计页面连接超时时间

==================== 默认配置 ====================
defaults
  log global            # 继承全局日志设置
  mode http             # 默认使用HTTP模式(七层代理)
  option httplog        # 启用HTTP请求日志记录
  timeout connect 5000  # 后端服务器连接超时5秒
  timeout client 50000  # 客户端空闲超时50秒
  timeout server 50000  # 服务器响应超时50秒
  timeout http-request 15s      # HTTP请求处理超时
  timeout http-keep-alive 15s   # HTTP长连接保持时间

==================== 健康检查端点 ====================
frontend monitor-in
  bind *:33305          # 监听33305端口用于健康检查
  mode http             # HTTP模式
  option httplog        # 记录HTTP日志
  monitor-uri /monitor  # 定义健康检查URI路径

==================== 统计监控页面 ====================
listen stats
  mode http                      # 使用HTTP模式
  bind *:8888                    # 监控页面监听8888端口
  stats auth admin:password      # 访问监控页面的账号密码
  stats refresh 5s               # 页面自动刷新间隔5秒
  stats realm HAProxy\ Statistics # 认证领域名称
  stats uri /stats               # 统计页面访问路径
  log 127.0.0.1 local3 err       # 统计相关日志输出

==================== Kubernetes API Server 前端配置 ====================
frontend kube-apiserver
  bind 0.0.0.0:16443     # 对外监听所有IP的16443端口
  bind 127.0.0.1:16443   # 同时监听本地回环地址(本地访问)
  mode tcp                # 使用TCP模式(四层代理,不解析HTTP)
  option tcplog           # 启用TCP连接日志
  tcp-request inspect-delay 5s  # TCP请求检查延迟时间
  default_backend kube-apiservers  # 默认转发到后端kube-apiservers

==================== Kubernetes API Server 后端配置 ====================
backend kube-apiservers
  mode tcp                # TCP模式(四层代理)
  option tcplog           # 记录TCP连接日志
  option tcp-check        # 启用TCP健康检查(检查端口连通性)
  balance roundrobin      # 使用轮询负载均衡算法
  
  # 后端服务器通用配置
  default-server inter 10s      # 健康检查间隔10秒
           downinter 5s         # 服务器宕机时的检查间隔5秒
           rise 2              # 连续2次健康检查成功标记为可用
           fall 2              # 连续2次健康检查失败标记为不可用
           slowstart 60s       # 新服务器或恢复服务器的慢启动时间
           maxconn 250         # 每台服务器最大连接数
           maxqueue 256        # 最大等待队列长度
           weight 100          # 服务器权重(100表示100%)
  
  # 实际Kubernetes Master节点配置
  server master1 192.168.153.161:6443 check  # Master1节点,启用健康检查
  server master2 192.168.153.162:6443 check  # Master2节点,启用健康检查
  server master3 192.168.153.163:6443 check  # Master3节点,启用健康检查
KeepAlived配置

各master节点配置,部分地方不同

bash 复制代码
cat >/etc/keepalived/keepalived.conf<<EOF
! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL
   script_user root
   enable_script_security
}
vrrp_script checkhaproxy {
   script "/etc/keepalived/check_haproxy.sh"
   interval 5
   weight -5
   fall 2
   rise 1
}
vrrp_instance VI_1 {
   state MASTER
   interface ens32
   mcast_src_ip 192.168.153.161		# 当前节点ip
   virtual_router_id 51
   priority 100		#当前节点作为虚拟路由器优先级,这里设置master1优先级100,其余master依次递减
   advert_int 2
   authentication {
       auth_type PASS
       auth_pass K8SHA_KA_AUTH
   }
   virtual_ipaddress {
       192.168.153.200
   }
   track_script {
      checkhaproxy
   }
}
EOF

配置解释

bash 复制代码
==================== 全局定义部分 ====================
global_defs {
   router_id LVS_DEVEL               # 当前节点的路由器标识符,用于识别节点
   script_user root                  # 执行脚本的用户身份
   enable_script_security            # 启用脚本安全机制(防止恶意脚本执行)
}

==================== VRRP 健康检查脚本定义 ====================
vrrp_script checkhaproxy {           # 定义一个名为 checkhaproxy 的监控脚本
   script "/etc/keepalived/check_haproxy.sh"  # 要执行的脚本路径,检查HAProxy服务状态
   interval 5                        # 脚本执行间隔:每5秒执行一次
   weight -5                         # 如果脚本执行失败(HAProxy异常),优先级减少5
   fall 2                            # 连续2次检测失败才认为真正失败
   rise 1                            # 1次检测成功就认为恢复
}

==================== VRRP 实例配置 ====================
vrrp_instance VI_1 {                 # 定义一个VRRP实例,名称VI_1
   state MASTER                      # 初始状态:MASTER(主节点),其他节点可设为BACKUP
   interface ens32                   # 绑定的网络接口名称(网卡)
   mcast_src_ip 192.168.153.161      # 组播源IP地址(当前节点的实际IP)
   virtual_router_id 51              # 虚拟路由器ID,同一组VRRP实例必须相同(范围1-255)
   priority 100                      # 初始优先级(范围1-254),值越高越优先成为MASTER
   advert_int 2                      # 组播通告发送间隔:2秒
   
==================== 认证配置 ====================
   authentication {
       auth_type PASS                # 认证类型:密码认证(简单密码)
       auth_pass K8SHA_KA_AUTH       # 认证密码,同一VRRP组所有节点必须相同
   }
   
==================== 虚拟IP地址配置 ====================
   virtual_ipaddress {
       192.168.153.200                # 要管理的虚拟IP(VIP),即浮动IP地址
       # 可以配置多个VIP,每行一个
       # 格式:IP地址/子网掩码 [dev 接口] [scope 作用域] [label 标签]
   }
   
==================== 跟踪脚本配置 ====================
   track_script {
      checkhaproxy                    # 引用前面定义的checkhaproxy脚本
                                      # 如果HAProxy异常,会降低优先级触发主备切换
   }
}
健康检测脚本配置

各master节点执行

bash 复制代码
cat > /etc/keepalived/check_haproxy.sh << "EOF"
#!/bin/bash
count=`netstat -apn | grep 16443 | wc -l`
if [ $count -gt 0 ]; then
   exit 0
else
   exit 1
fi
EOF
sh 复制代码
chmod +x /etc/keepalived/check_haproxy.sh
启动服务
bash 复制代码
systemctl daemon-reload
systemctl enable --now haproxy
systemctl enable --now keepalived

验证

bash 复制代码
ip address show

访问vip:8888

账号密码为前面设置的admin/password

相关推荐
java_logo2 小时前
QWEN3 企业级 Docker 容器化部署指南
运维·docker·容器·qwen3部署·qwen3部署文档·qwen3部署教程·qwen3部署方案
taihexuelang2 小时前
大模型部署
人工智能·docker·容器
2301_810746312 小时前
CKA冲刺40天笔记 - day24 Kubernetes Clusterrole 和 Clusterrole Binding
笔记·容器·kubernetes
释怀不想释怀3 小时前
3.3 DockerCompose(快速部署)
云原生·eureka
释怀不想释怀3 小时前
Docker(项目部署)
运维·docker·容器
ICT董老师4 小时前
通过kubernetes部署nginx + php网站环境
运维·nginx·云原生·容器·kubernetes·php
原神启动14 小时前
K8S(八)—— Kubernetes Pod 资源限制 + 探针(Probe)解析
云原生·容器·kubernetes
zxnbmk4 小时前
【7】Kubernetes存储(本章知识密度较高,仅浅浅了解后续详解)
linux·云原生·容器·kubernetes
叫致寒吧4 小时前
pod详解
云原生·kubernetes