本文档介绍如何从 Seesaw 负载均衡器迁移到 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 控制器和音箱的 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
的 Service,并且这两个 Service 的外部地址是 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
类型的现有 Service 的外部 IP 地址 172.16.21.41 和 172.16.21.45 包含在 MetalLB 地址池中。
示例:kubeception 用户集群、DHCP
假设您有一个对其集群节点使用 DHCP 的用户集群。另外,该集群有两个类型为 LoadBalancer
的 Service,并且这两个 Service 的外部地址是 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
类型的现有 Service 的外部 IP 地址 172.16.21.61 和 172.16.21.65 包含在 MetalLB 地址池中。
示例:控制平面 V2 用户集群、DHCP
假设您有一个用户集群启用了控制平面 V2,并为工作器节点使用 DHCP。另外假设该集群有两个类型为 LoadBalancer
的 Service,并且这两个 Service 的外部地址是 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
类型的现有 Service 的外部 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 控制器和音箱的 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
Service 类型从 ClusterIP
更改为 LoadBalancer
。如有必要,请创建支持服务工单。