返回

K8S集群与负载均衡的完美结合:LoadBalancer的奥秘

后端

K8s LoadBalancer 服务类型详解

简介

在 Kubernetes(K8s)中,服务是一种抽象概念,它定义了一组 Pod 的逻辑集合,并提供统一的访问入口。LoadBalancer 服务类型是一种特殊类型,使用云平台提供的负载均衡器将流量均匀地分发到后端 Pod,实现负载均衡。

原理

LoadBalancer 服务类型基于简单原理,它利用云平台的负载均衡器来分发流量。创建 LoadBalancer 服务时,K8s 会自动在云平台上创建负载均衡器,并将服务的 IP 地址映射到负载均衡器的 IP 地址。当客户端向服务的 IP 地址发送请求时,负载均衡器会将请求均衡地转发到后端 Pod 上。

使用场景

LoadBalancer 服务类型适用于以下场景:

  • 需要将流量均衡分发到多个 Pod 时。
  • 需要使用域名访问后端 Pod 资源时。
  • 在 Pod 之间进行滚动更新时。

如何使用

要使用 LoadBalancer 服务类型,请创建一个服务对象。在对象的 spec 字段中,将 type 字段设置为 LoadBalancer。

示例:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  selector:
    app: my-app

创建服务后,K8s 会自动在云平台上创建负载均衡器。您可以使用 kubectl get svc my-service 命令查看负载均衡器的 IP 地址。

域名访问

要通过域名访问后端 Pod 资源,请在服务的 spec 字段中将 externalTrafficPolicy 字段设置为 Cluster

示例:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  externalTrafficPolicy: Cluster
  selector:
    app: my-app

设置此字段后,K8s 会创建 DNS 记录,将服务的域名映射到负载均衡器的 IP 地址。您可以使用 kubectl get endpoints my-service 命令查看 DNS 记录。

滚动更新

LoadBalancer 服务类型支持滚动更新,允许您逐步部署和更新 Pod。创建新的服务对象,并在其 spec 字段中将 revisionHistoryLimit 字段设置为大于 1 的值。

示例:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  revisionHistoryLimit: 2
  selector:
    app: my-app

设置此字段后,K8s 会保留旧服务对象一段时间。部署新的 Pod 时,K8s 会将它们添加到新服务对象,并从旧服务对象中删除旧 Pod。这允许您逐渐将流量从旧服务对象转移到新服务对象,实现滚动更新。

后台运行创建

podManagementPolicy 字段设置为 Parallel 时,LoadBalancer 服务类型支持后台运行创建,它在每个节点上创建相同方式和版本运行的容器。

示例:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  podManagementPolicy: Parallel
  selector:
    app: my-app

设置此字段后,K8s 会在每个节点上创建相同的 Pod,使用相同的镜像和参数运行,提供相同的功能。

查看 Pod 状态

使用以下命令查看 Pod 状态:

kubectl get pods

常见问题解答

1. LoadBalancer 服务类型的优势是什么?

  • 均衡流量分发
  • 域名访问
  • 滚动更新
  • 后台运行创建

2. 如何配置域名访问?
在服务的 spec 字段中设置 externalTrafficPolicy 字段为 Cluster

3. 如何进行滚动更新?
创建新的服务对象,并将 revisionHistoryLimit 字段设置为大于 1 的值。

4. 如何实现后台运行创建?
在服务的 spec 字段中设置 podManagementPolicy 字段为 Parallel

5. LoadBalancer 服务类型有什么缺点?

  • 可能产生额外成本
  • 配置和管理负载均衡器可能很复杂