本文档介绍如何从 Seesaw 负载均衡器迁移到 1.16 到 1.29 版的 MetalLB 负载均衡器。如果您的集群为 1.30 版或更高版本,我们建议您按照规划将集群迁移到推荐功能中的说明操作。
与其他负载均衡选项相比,使用 MetalLB 具有多项优势。
1.28 和 1.29:正式版
1.16:预览版
如需检查 externalTrafficPolicy
,请运行以下命令:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get svc -A -o yaml | grep "externalTrafficPolicy: Local"
请与 Google 支持团队联系,以寻求有关此问题的帮助。
停机时间注意事项
迁移过程中工作负载会出现停机时间。以下说明仅适用于非高可用性(非 HA)管理员集群,因为 SeeSaw 负载均衡器不支持 HA 管理员集群。
迁移管理员集群时:
在迁移
controlPlaneVIP
时,kubeception 用户集群的控制平面会出现停机时间。停机时间应少于 10 分钟,但具体时长取决于您的基础设施。管理员集群控制平面会出现停机时间,因为管理员主节点需要使用直接附加到虚拟机的
controlPlaneVIP
重新创建。停机时间应少于 20 分钟,但具体时长取决于您的基础设施。
迁移用户集群时,在 Seesaw 负载均衡器关闭电源且 MetalLB Pod 启动之前,VIP 会出现中断。此过程通常需要大约一分钟时间。
用户集群迁移
您必须选择一个节点池并将其启用,以便与 MetalLB 搭配使用。MetalLB 将部署在此节点池中的节点上。
在用户集群配置文件中,选择一个节点池,并将 enableLoadBalancer
设置为 true
:
nodePools: - name: pool-1 replicas: 3 enableLoadBalancer: true
更新集群:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
替换以下内容:
ADMIN_CLUSTER_KUBECONFIG:管理员集群 kubeconfig 文件的路径
USER_CLUSTER_CONFIG:用户集群配置文件的路径
接下来,从文件中移除 Seesaw 部分,并添加 MetalLB 部分。
然后,再次更新集群:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
验证 MetalLB 组件是否已成功运行:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get pods \ --namespace kube-system --selector app=metallb
输出结果会显示 MetalLB controller 和 speaker 的 Pod。例如:
metallb-controller-744884bf7b-rznr9 1/1 Running metallb-speaker-6n8ws 1/1 Running metallb-speaker-nb52z 1/1 Running metallb-speaker-rq4pp 1/1 Running
迁移成功后,手动删除用户集群的已关机的 Seesaw 虚拟机。您可以在配置目录的 seesaw-for-[USERCLUSTERNAME].yaml
文件的 vmnames
部分中找到 Seesaw 虚拟机名称。
示例:用户集群,静态 IP 地址
假设您有一个用户集群,其集群节点使用静态 IP 地址。此外,假设该集群有两项 LoadBalancer
类型的服务,并且这些服务的外部地址分别为 172.16.21.41 和 172.16.21.45。
调整用户集群配置文件,如下所示:
- 保留
network.hostConfig
部分。 - 将
loadBalancer.kind
设置为MetalLB
。 - 移除
loadBalancer.seesaw
部分。 - 添加
loadBalancer.metalLB
部分。
示例:
network: hostConfig: dnsServers: - "172.16.255.1" - "172.16.255.2" ntpServers: - "216.239.35.0" loadBalancer: vips: controlPlaneVIP: "172.16.20.30" ingressVIP: "172.16.20.31" kind: MetalLBSeesawseesaw: ipBlockFilePath: "user-cluster-1-ipblock.yaml" vrid: 1 masterIP: "" cpus: 4 memoryMB: 3072metalLB: addressPools: - name: "address-pool-1" addresses: - "172.16.20.31/32" - "172.16.20.40 - 172.16.21.49"
上述示例中的要点:
即使集群不再使用 Seesaw 负载均衡器,也需要
network.hostConfig
部分,因为集群节点使用静态 IP 地址。ingressVIP
的值会显示在 MetalLB 地址池中。现有
LoadBalancer
类型的服务的外部 IP 地址 172.16.21.41 和 172.16.21.45 包含在 MetalLB 地址池中。
示例:kubeception 用户集群、DHCP
假设您有一个对其集群节点使用 DHCP 的用户集群。此外,假设该集群有两项 LoadBalancer
类型的服务,并且这些服务的外部地址分别为 172.16.21.61 和 172.16.21.65。
调整用户集群配置文件,如下所示:
- 移除
network.hostConfig
部分。 - 将
loadBalancer.kind
设置为MetalLB
。 - 移除
loadBalancer.seesaw
部分。 - 添加
loadBalancer.metalLB
部分。
示例:
enableControlplaneV2: false network:hostConfig: dnsServers: - "172.16.255.1" - "172.16.255.2" ntpServers: - "216.239.35.0"loadBalancer: vips: controlPlaneVIP: "172.16.20.50" ingressVIP: "172.16.20.51" kind: MetalLBSeesawseesaw: ipBlockFilePath: "user-cluster-2-ipblock.yaml" vrid: 1 masterIP: "" cpus: 4 memoryMB: 3072metalLB: addressPools: - name: "address-pool-1" addresses: - "172.16.20.51/32" - "172.16.20.60 - 172.16.21.69"
上述示例中的要点:
集群将不再使用 Seesaw 负载均衡器,并且集群也不会为其集群节点使用静态 IP 地址。因此,不需要
network.hostConfig
部分。ingressVIP
的值会显示在 MetalLB 地址池中。现有
LoadBalancer
类型的服务的外部 IP 地址 172.16.21.61 和 172.16.21.65 包含在 MetalLB 地址池中。
示例:Controlplane V2 用户集群、DHCP
假设您有一个启用了 Controlplane V2 的用户集群,并对其工作器节点使用 DHCP。此外,假设该集群有两项 LoadBalancer
类型的服务,并且这些服务的外部地址分别为 172.16.21.81 和 172.16.21.85。
调整用户集群配置文件,如下所示:
- 保留
network.hostconfig
部分。 - 将
loadBalancer.kind
设置为MetalLB
。 - 移除
loadBalancer.seesaw
部分。 - 添加
loadBalancer.metalLB
部分。
示例:
enableControlplaneV2: true network: hostConfig: dnsServers: - "172.16.255.1" - "172.16.255.2" ntpServers: - "216.239.35.0" loadBalancer: vips: controlPlaneVIP: "172.16.20.70" ingressVIP: "172.16.20.71" kind: MetalLBSeesawseesaw: ipBlockFilePath: "user-cluster-2-ipblock.yaml" vrid: 1 masterIP: "" cpus: 4 memoryMB: 3072metalLB: addressPools: - name: "address-pool-1" addresses: - "172.16.20.71/32" - "172.16.20.80 - 172.16.21.89"
上述示例中的要点:
集群将不再为工作器节点使用静态 IP 地址,但会为控制平面节点使用静态 IP 地址。因此,需要
network.hostConfig
部分。ingressVIP
的值会显示在 MetalLB 地址池中。现有
LoadBalancer
类型的服务的外部 IP 地址 172.16.21.81 和 172.16.21.85 包含在 MetalLB 地址池中。
管理员集群迁移
在管理员集群配置文件中,将 loadBalancer.kind
设置为 MetalLB
,并移除 loadBalancer.seesaw
部分。
更新集群:
gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG
替换以下内容:
ADMIN_CLUSTER_KUBECONFIG:管理员集群 kubeconfig 文件的路径
ADMIN_CLUSTER_CONFIG:管理员集群配置文件的路径
验证 MetalLB 组件是否已成功运行:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods \ --namespace kube-system --selector app=metallb
输出结果会显示 MetalLB controller 和 speaker 的 Pod。例如:
metallb-controller-744884bf7b-rznr9 1/1 Running metallb-speaker-6n8ws 1/1 Running metallb-speaker-nb52z 1/1 Running metallb-speaker-rq4pp 1/1 Running
迁移成功后,手动删除管理员集群的已关机的 Seesaw 虚拟机。您可以在配置目录的 seesaw-for-gke-admin.yaml
文件的 vmnames
部分中找到 Seesaw 虚拟机名称。
示例:管理员集群,静态 IP 地址
假设您有一个管理员集群,其集群节点使用静态 IP 地址。
调整管理员集群配置文件,如下所示:
- 保留
network.hostConfig
部分。 - 将
loadBalancer.kind
设置为MetalLB
。 - 移除
loadBalancer.seesaw
部分。
示例:
network: hostConfig: dnsServers: - "172.16.255.1" - "172.16.255.2" ntpServers: - "216.239.35.0" loadBalancer: vips: controlPlaneVIP: "172.16.20.30" kind: MetalLBSeesawseesaw: ipBlockFilePath: "user-cluster-1-ipblock.yaml" vrid: 1 masterIP: "" cpus: 4 memoryMB: 3072
上述示例中的要点:
- 即使集群不再使用 Seesaw 负载均衡器,也需要
network.hostConfig
部分,因为集群节点使用静态 IP 地址。
示例:管理员集群、DHCP
假设您有一个对其集群节点使用 DHCP 的管理员集群。
调整管理员集群配置文件,如下所示:
- 移除
network.hostConfig
部分。 - 将
loadBalancer.kind
设置为MetalLB
。 - 移除
loadBalancer.seesaw
部分。
示例:
network:hostConfig: dnsServers: - "172.16.255.1" - "172.16.255.2" ntpServers: - "216.239.35.0"loadBalancer: vips: controlPlaneVIP: "172.16.20.30" kind: MetalLBSeesawseesaw: ipBlockFilePath: "user-cluster-1-ipblock.yaml" vrid: 1 masterIP: "" cpus: 4 memoryMB: 3072
上述示例中的要点:
- 集群将不再使用 Seesaw 负载均衡器,并且集群也不会为其集群节点使用静态 IP 地址。因此,不需要
network.hostConfig
部分。
问题排查
如果 gkectl update
在用户集群迁移期间失败,并且 MetalLB Pod 未在用户集群中运行,请手动为用户集群 Seesaw 虚拟机开机。这会将流量重新传输到当前使用的 VIP 地址。但是,如果 load-balancer-seesaw
Pod 未运行,Seesaw 虚拟机可能无法为新创建的 VIP 提供服务。如果发生这种情况,请创建支持服务工单。
如果 gkectl update
在管理员集群迁移期间失败,并且 MetalLB Pod 未在管理员集群中运行,请手动为管理员集群 Seesaw 虚拟机开机。这可能允许流量传输到当前使用的控制平面 VIP 地址,以便用户集群再次运行。但是,管理员集群本身的控制平面的 VIP 地址可能无法运行。在这种情况下,请修改管理员集群的 kubeconfig 文件,以直接使用管理员集群控制平面节点的 IP 地址。
此外,在 kube-system
命名空间中,将 kube-apiserver
服务类型从 ClusterIP
更改为 LoadBalancer
。如有必要,请创建支持服务工单。