使用 Kubernetes 实现负载均衡

devtools/2025/1/19 1:05:13/

使用 Kubernetes 实现负载均衡,可以通过 Kubernetes 的内置服务(Service)资源,配合负载均衡器(如云平台提供的负载均衡器或 Ingress 控制器)来完成。以下是详细的步骤和调优案例。


一、Kubernetes 负载均衡的基本概念

  1. ClusterIP(默认类型)
    只能在集群内部访问,分发到 Pod 的流量通过 IPtables 或 IPVS 转发。

  2. NodePort
    通过每个节点的固定端口将流量暴露给外部,适合简单的开发或测试环境。

  3. LoadBalancer
    在云平台中使用负载均衡服务,将流量从外部分发到节点。

  4. Ingress
    提供基于域名和路径的 HTTP/HTTPS 负载均衡


二、实现负载均衡的步骤

1. 创建 Deployment

一个 Deployment 管理 Pod 副本,确保应用具有高可用性。

示例:运行一个 Nginx 服务的 Deployment。

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 3  # 创建三个副本selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.23ports:- containerPort: 80
 

创建 Deployment:

kubectl apply -f nginx-deployment.yaml 
2. 创建 Service

定义 Service 类型为 LoadBalancer,为 Nginx 提供外部访问能力。

示例:

apiVersion: v1
kind: Service
metadata:name: nginx-service
spec:selector:app: nginx  # 关联到 Deployment 的标签type: LoadBalancer  # 使用云平台负载均衡器ports:- protocol: TCPport: 80  # Service 端口targetPort: 80  # Pod 的端口

创建 Service:

kubectl apply -f nginx-service.yaml 
3. 使用 Ingress 提供基于域名的访问

Ingress 控制器(如 NGINX-Ingress)用于 HTTP/HTTPS 流量的负载均衡

安装 NGINX-Ingress 控制器:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/cloud/deploy.yaml 

定义 Ingress 资源:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: nginx-ingressannotations:nginx.ingress.kubernetes.io/rewrite-target: /
spec:rules:- host: example.com  # 替换为你的域名http:paths:- path: /pathType: Prefixbackend:service:name: nginx-serviceport:number: 80

创建 Ingress:

kubectl apply -f nginx-ingress.yaml 

三、调优案例

1. 调整 Pod 副本数

通过 HPA(Horizontal Pod Autoscaler)实现自动扩缩容:

以下是一个完整的 HPA YAML 文件,将其保存为 nginx-hpa.yaml

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: nginx-hpa
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: nginx-deploymentminReplicas: 3maxReplicas: 10metrics:- type: Resourceresource:name: cputarget:type: UtilizationaverageUtilization: 50  # CPU 使用率超过 50% 时扩容
2. 优化负载均衡算法

在 Ingress 的注解中 annotations:调整负载均衡策略:

nginx.ingress.kubernetes.io/load-balance: "least_conn" # 使用最少连接算法 

常用策略:

  • round_robin:默认轮询分发。
  • least_conn:最少连接优先。
  • ip_hash:基于客户端 IP 哈希。
3. 使用 readinessProbe 健康检查

这段代码用于 DeploymentPod,修改的是容器readinessProbe

配置 Pod 的健康检查,确保只有健康的实例接收流量:
readinessProbe: httpGet: path: / port: 80 initialDelaySeconds: 5 periodSeconds: 10 
4. 优化 Service 的 Session Sticky

通过设置 sessionAffinity 实现会话保持:

spec: sessionAffinity: ClientIP # 基于客户端 IP 保持会话 

四、完整部署命令

  1. 部署 Deployment 和 Service:

    kubectl apply -f nginx-deployment.yaml kubectl apply -f nginx-service.yaml 
  2. 部署 Ingress:

    kubectl apply -f nginx-ingress.yaml 
  3. 配置 HPA:

    kubectl apply -f nginx-hpa.yaml 
  4. 查看负载均衡服务的外部 IP:

    kubectl get service nginx-service 

五、总结

Kubernetes 提供了灵活的负载均衡机制,从基础的 ClusterIP 到基于域名的 Ingress,再到云平台的 LoadBalancer,都可以根据需求进行配置和优化。通过结合 HPA、负载均衡策略以及健康检查,可以实现高性能和高可用的系统架构。


http://www.ppmy.cn/devtools/151707.html

相关文章

Redisson分布式锁的原理和实践?

目录 Redisson分布式锁的原理和实践? 一、Redisson分布式锁的原理 二、Redisson分布式锁的实践 Redisson通过看门狗(Watchdog)定时任务自动续锁原理 一、看门狗机制的核心作用 二、看门狗机制的实现原理 三、看门狗机制的使用场景 四、注意事项 Redisson分布式锁的原…

Vue3使用vue-count-to数字滚动模块报错解决方案

小伙伴们是不是遇到了vue3项目使用vue-count-to出现报错的问题 报错如下: TypeError: Cannot read properties of undefined (reading _c) 这个错误信息具体是说没读取到_c的属性 具体不清楚是什么原因,排查还得去看源码,所以我们来解决&a…

代理模式实现

一、概念:代理模式属于结构型设计模式。客户端不能直接访问一个对象,可以通过代理的第三者来间接访问该对象,代理对象控制着对于原对象的访问,并允许在客户端访问对象的前后进行一些扩展和处理;这种设置模式称为代理模…

SK海力士(SK Hynix)是全球领先的半导体制造商之一,其在无锡的工厂主要生产DRAM和NAND闪存等存储器产品。

SK海力士(SK Hynix)是全球领先的半导体制造商之一,其在无锡的工厂主要生产DRAM和NAND闪存等存储器产品。以下是SK海力士的一些主要产品型号和类别: DRAM 产品 DDR4 DRAM 特点: 高速、低功耗,广泛应用于PC、服务器和移…

选择saas 还是源码主要考虑

公司业务规模:小型企业可能会发现SaaS提供的即用型解决方案更符合其需求,而大型企业可能需要源码以实现更高的定制性和控制权。 公司技术专长:缺乏技术团队的企业可能会倾向于使用SaaS,而那些拥有强大IT部门的企业可能更适合管理…

【优选算法】三数之和(双指针算法)

必须有为成功付出代价的决心,然后想办法付出这个代价。 目录 一、【题目:15. 三数之和 - 力扣(LeetCode)】 二、【代码原理】 三、【代码】 一、【题目:15. 三数之和 - 力扣(LeetCode)】 需…

LLM实现视频切片合成 前沿知识调研

1.相关产品 产品链接腾讯智影https://zenvideo.qq.com/可灵https://klingai.kuaishou.com/即梦https://jimeng.jianying.com/ai-tool/home/Runwayhttps://aitools.dedao.cn/ai/runwayml-com/Descripthttps://www.descript.com/?utm_sourceai-bot.cn/Opus Cliphttps://www.opu…

VSCode 的部署

一、VSCode部署 (1)、简介 vsCode 全称 Visual Studio Code,是微软出的一款轻量级代码编辑器,免费、开源而且功能强大。它支持几乎所有主流的程序语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比Diff、版本管理GIT等特性&…