从 Seesaw 负载均衡器迁移到 MetalLB

本文档介绍如何从 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: MetalLB Seesaw
  seesaw:
    ipBlockFilePath: "user-cluster-1-ipblock.yaml"
    vrid: 1
    masterIP: ""
    cpus: 4
    memoryMB: 3072
  metalLB:
    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: MetalLB Seesaw
  seesaw:
    ipBlockFilePath: "user-cluster-2-ipblock.yaml"
    vrid: 1
    masterIP: ""
    cpus: 4
    memoryMB: 3072
  metalLB:
    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: MetalLB Seesaw
  seesaw:
    ipBlockFilePath: "user-cluster-2-ipblock.yaml"
    vrid: 1
    masterIP: ""
    cpus: 4
    memoryMB: 3072
  metalLB:
    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: MetalLB Seesaw
  seesaw:
    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: MetalLB Seesaw
  seesaw:
    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。如有必要,请创建支持服务工单。