☰
Harbor+K8s高可用集群部署与优化实践
2026/10/28 12:52:15 网站建设 项目流程
## 1. 项目背景与架构设计 在容器化技术普及的今天,企业级容器镜像仓库与Kubernetes集群的高可用部署已成为生产环境刚需。本次实施的Harbor+K8s高可用集群方案,采用独立负载均衡层(HAProxy+Keepalived)配合Calico网络插件,基于kubeasz工具实现快速部署。这套架构特别适合需要稳定运行容器化应用的中大型企业,能同时满足镜像管理、容器编排、存储分离等核心需求。 > 关键设计原则:每个组件都实现多节点冗余,且流量路径完全分离。这种"鸡蛋不放同一个篮子"的设计,避免了单点故障导致整个平台崩溃的风险。 ### 1.1 核心组件选型解析 **负载均衡层**: - HAProxy 2.6:支持四层(TCP)和七层(HTTP)代理,实测单节点可处理10万+并发连接 - Keepalived 2.2:实现VIP漂移,故障切换时间<3秒 **容器编排层**: - Kubernetes 1.28:采用kubeasz部署的二进制版本,相比kubeadm更易定制 - Calico 3.26:BGP模式实现Pod网络高性能通信,支持NetworkPolicy **存储层**: - MinIO 4节点集群:对象存储用于Harbor后端,EC编码实现数据冗余 - 本地NVMe缓存:热点镜像数据加速读取 **镜像仓库**: - Harbor 2.8:企业级镜像仓库,集成漏洞扫描和签名验证 ## 2. 基础环境准备 ### 2.1 服务器规划 | 角色 | 数量 | 配置示例 | IP范围 | 备注 | |---------------|------|-------------------|---------------|--------------------------| | K8s Master | 3 | 8C16G 500GB NVMe | 10.0.0.101-103| 复用ETCD和Control Plane | | K8s Worker | 2 | 16C32G 1TB NVMe | 10.0.0.104-105| 同时运行Harbor和HAProxy | | MinIO节点 | 4 | 12C24G 10TB HDD | 10.0.0.106-109| 每个节点挂载12块HDD | | 负载均衡VIP | - | - | 10.0.0.110-112| 分别对应K8s/Harbor/MinIO | ### 2.2 系统统一配置 #### 2.2.1 内核参数优化 ```bash # /etc/sysctl.d/99-k8s.conf # 连接追踪表大小 net.netfilter.nf_conntrack_max = 1048576 # 端口范围扩展 net.ipv4.ip_local_port_range = 1024 65535 # ARP缓存优化 net.ipv4.neigh.default.gc_thresh1 = 2048 net.ipv4.neigh.default.gc_thresh2 = 4096 net.ipv4.neigh.default.gc_thresh3 = 8192
2.2.2 文件描述符调整
# /etc/security/limits.conf * soft nofile 1048576 * hard nofile 1048576 root soft nofile 1048576 root hard nofile 1048576

3. 负载均衡层实施

3.1 HAProxy配置详解

3.1.1 四层与七层代理对比
特性四层(TCP)模式七层(HTTP)模式
适用场景K8s APIHarbor Web/MinIO Console
性能损耗约5%约15%
会话保持源IP哈希Cookie插入
健康检查TCP端口检测HTTP状态码校验
3.1.2 关键配置片段
listen k8s-api-6443 bind 10.0.0.110:6443 mode tcp option tcplog balance leastconn # 适合长连接场景 server master1 10.0.0.101:6443 check inter 3s rise 2 fall 3 server master2 10.0.0.102:6443 check inter 3s rise 2 fall 3 server master3 10.0.0.103:6443 check inter 3s rise 2 fall 3

生产环境建议:为K8s API单独配置2台物理负载均衡器,避免与业务流量竞争资源

3.2 Keepalived高可用机制

3.2.1 VRRP协议工作流程
  1. 主节点定期发送ADVERTISEMENT报文(默认1秒)
  2. 备节点超过3倍间隔未收到报文时发起选举
  3. 优先级高的节点(priority值)成为新Master
  4. 新Master发送GARP报文更新交换机MAC表
3.2.2 健康检查脚本增强
#!/bin/bash # 新增API端点可用性检查 if ! curl -k -m2 https://127.0.0.1:6443/healthz &>/dev/null; then logger "K8s API health check failed" exit 1 fi

4. Kubernetes集群部署

4.1 kubeasz定制化调整

4.1.1 网络插件选型对比
方案性能损耗网络策略适用规模调试复杂度
Calico BGP8%支持大高
Flannel15%不支持中低
Cilium5%支持任意中

最终选择Calico的原因:

  • 需要严格的NetworkPolicy隔离
  • 已有BGP路由器基础设施
  • 对性能敏感的业务场景
4.1.2 关键配置参数
# /etc/kubeasz/clusters/k8s-ha/config.yml kube_network_plugin: calico calico_network_backend: bird kube_proxy_mode: ipvs ipvs_scheduler: "wrr" # 加权轮询

4.2 高可用验证方案

4.2.1 Master节点故障模拟
# 随机停止一个Master节点的kube-apiserver ssh master2 "docker stop k8s_kube-apiserver" # 观察服务恢复情况 watch -n1 kubectl get nodes

预期现象:

  • 30秒内节点状态更新为NotReady
  • 已有Pod继续运行不受影响
  • 新调度请求自动转移到健康节点

5. Harbor与MinIO集成

5.1 存储架构设计

用户上传镜像 -> Harbor -> MinIO集群(4节点) -> 按对象拆分为32个分片 -> 使用EC(8+4)编码存储 -> 分散在12块硬盘
5.1.1 性能调优参数
# harbor.yml storage_service: s3: chunksize: 16777216 # 从5MB调整为16MB multipartcopychunksize: 33554432 multipartcopymaxconcurrency: 20

5.2 安全加固措施

  1. 传输加密:所有MinIO节点配置TLS1.3
  2. 访问控制:基于IAM策略的精细化权限
  3. 日志审计:记录所有API调用到Elasticsearch
  4. 网络隔离:MinIO集群使用独立VLAN

6. 监控体系搭建

6.1 指标采集架构

Prometheus -> K8s核心指标 -> Node Exporter -> MinIO集群指标 -> HAProxy统计 AlertManager -> 企业微信告警 -> 邮件通知 -> PagerDuty集成
6.1.1 关键告警规则
# minio.rules - alert: MinIONodeDown expr: minio_cluster_nodes_offline_total > 1 for: 5m labels: severity: critical annotations: summary: "MinIO节点宕机 (instance {{ $labels.instance }})" description: "超过1个MinIO节点不可用,当前值:{{ $value }}"

7. 运维实战技巧

7.1 日常维护命令速查

证书更新:

# 批量更新K8s证书 kubeasz ezctl renew-cert k8s-ha all

节点隔离:

kubectl cordon node-1 kubectl drain node-1 --ignore-daemonsets

7.2 故障排查流程图

API访问失败? ├─ 检查VIP是否漂移 (ip addr show) ├─ 检查HAProxy日志 (journalctl -u haproxy) └─ 测试后端直接连接 (curl -k https://master1:6443/healthz)

8. 性能基准测试

8.1 压力测试结果

场景请求量平均延迟99分位备注
镜像推送(单个1GB)50并发12.3s15.8sMinIO集群带宽饱和
Pod创建(1000个Nginx)100并发1.2s2.5setcd写入性能成为瓶颈
API查询(/api/v1/pods)1000QPS23ms56ms开启API聚合缓存后

9. 扩展规划建议

  1. 多集群联邦:未来可通过Kubefed实现跨机房集群管理
  2. Harbor复制:设置异地镜像仓库同步策略
  3. MinIO分层:热数据存NVMe,冷数据自动归档到对象存储
  4. 服务网格:逐步接入Istio实现细粒度流量管理

10. 踩坑经验分享

  1. 时间不同步导致证书失效:所有节点必须配置chronyd并指向同一NTP服务器
  2. 内核参数未优化导致连接泄漏:需调整nf_conntrack相关参数
  3. Calico BGP对等体配置错误:交换机需要明确配置peer passive模式
  4. MinIO EC编码选择不当:8+4方案在4节点下实际容错能力只有1节点

特别提醒:Keepalived的virtual_router_id必须在同一VLAN内唯一,曾经因重复配置导致VIP漂移失败

附录:常用工具集

  1. 网络诊断:mtr、tcptraceroute、iperf3
  2. K8s调试:kubectl-debug、k9s、stern
  3. 存储分析:mc admin top、rclone ncdu
  4. 性能剖析:perf、bpftrace、kubectl flame

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询