将管理员集群迁移到推荐功能

概览

本页介绍了如何将版本 1.30 或更高版本的管理员集群迁移到以下推荐功能:

  • 负载均衡器配置:

    • 集成式 F5 BIG-IP 负载均衡器配置为 ManualLB。

      或

    • 将捆绑式 Seesaw 负载均衡器迁移到 MetalLB。

  • 从非高可用性 (HA) 管理员集群迁移到高可用性 (HA) 管理员集群。使用相同数量的虚拟机时,高可用性管理员集群可显著提高可用性。非高可用性管理员集群有一个控制平面节点和两个插件节点。高可用性管理员集群的三个节点都是控制平面节点,没有插件节点。

本页面适用于管理底层技术基础架构生命周期的 IT 管理员和运维人员。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务。

如需详细了解迁移规划,请参阅规划将集群迁移到推荐功能。

最佳做法

如果您有多个环境(例如测试环境、开发环境和生产环境),我们建议您先迁移最不重要的环境(例如测试环境)。验证迁移成功后,请对每个环境重复此过程,最后再迁移生产环境。这样,您就可以在迁移到下一个更关键的环境之前,验证每次迁移是否成功,并确保工作负载正常运行。

要求

规划迁移期间的停机时间

在迁移期间,控制平面会有一些停机时间。非高可用性管理集群的 Kubernetes API 访问权限将无法使用约 20 分钟,但 Kubernetes 控制平面仍可用于使用 F5 的高可用性管理集群。在迁移期间,Kubernetes 数据平面会继续处于稳定状态。

来源 目标 Kubernetes API 访问权限 用户工作负载

使用 F5 BIG-IP 的高可用性管理员集群

使用 ManualLB 的高可用性管理员集群

不受影响

不受影响

包含 MetalLB 或 ManualLB 的非高可用性管理员集群

具有相同类型负载均衡器的 HA 管理员集群

受影响

不受影响

使用 F5 BIG-IP 的非高可用性管理员集群

使用 ManualLB 的高可用性管理员集群

受影响

不受影响

使用 Seesaw 的非高可用性管理员集群

使用 MetalLB 的高可用性管理员集群

受影响

不受影响

  • 受影响:迁移期间服务中断明显。
  • 不受影响:服务中断不会发生,或者几乎不会被察觉。

迁移准备工作

如果您的管理员集群是非高可用集群,请按照本部分中的步骤准备迁移到高可用集群。如果您的管理员集群已具有高可用性,请跳转到下一部分为负载均衡器迁移做好准备。

分配额外的 IP 地址

将管理员集群从非高可用性迁移到高可用性时,请额外分配四个 IP 地址。确保这些 IP 地址与现有管理员集群节点位于同一 VLAN,并且未被任何现有节点使用:

更新防火墙规则

将管理员集群从非高可用性集群迁移到高可用性集群时,请更新管理员集群上的防火墙规则。这样可确保为控制平面节点新分配的 IP 地址可以访问所有必需的 API 和其他目的地,如管理员集群的防火墙规则中所述。

为负载均衡器迁移做好准备

如果您的管理员集群使用的是集成式 F5 BIG-IP 配置或捆绑式 Seesaw 负载均衡器,请按照本部分中的步骤对管理员集群配置文件进行必要的更改。否则,请跳转到下一部分:准备从非高可用性迁移到高可用性。

F5 BIG-IP

如果您的管理员集群使用的是集成 F5 BIG-IP 配置,请对管理员集群配置文件进行以下更改:

  1. 将 loadBalancer.kind 字段设置为 "ManualLB"。
  2. 设置或保留 loadBalancer.vips.controlPlaneVIP 字段的值。如果您的管理员集群已具有高可用性,请保持相同的值。如果您要从非高可用性管理员集群迁移到高可用性管理员集群,请将 loadBalancer.vips.controlPlaneVIP 字段的值更改为您分配的 IP 地址。
  3. 删除整个 loadBalancer.f5BigIP 部分。

以下管理员集群配置文件示例显示了这些更改:

loadBalancer:
vips:
  controlPlaneVIP: 192.0.2.6
kind: "F5BigIP" "ManualLB"
f5BigIP:
    address: "203.0.113.20"
  credentials:
    fileRef:
      path: ""my-config-folder/user-creds.yaml"
      entry: "f5-creds"
  partition: "my-f5-user-partition"
  

Seesaw

如果您的管理员集群使用 Seesaw 负载均衡器,请对管理员集群配置文件进行以下更改:

  1. 将 loadBalancer.kind 字段设置为“MetalLB”。
  2. 保留 network.hostConfig 部分。
  3. 设置或保留 loadBalancer.vips.controlPlaneVIP]5 字段的值。如果您的管理员集群已是高可用集群,您可以保留相同的值。如果从非高可用性管理员集群迁移到高可用性管理员集群,请将 loadBalancer.vips.controlPlaneVIP 字段的值更改为您分配的 IP 地址。
  4. 移除 loadBalancer.seesaw 部分。

以下管理员集群配置文件示例显示了这些更改:

network:
hostConfig:
  dnsServers:
  - "203.0.113.1"
  - "203.0.113.2"
  ntpServers:
  - "203.0.113.3"
loadBalancer:
vips:
  controlPlaneVIP: 192.0.2.6
kind: "MetalLB" "Seesaw"
seesaw:
  ipBlockFilePath: "user-cluster-1-ipblock.yaml"
  vrid: 1
  masterIP: ""
  cpus: 4
  memoryMB: 3072

准备从非高可用性迁移到高可用性

如果您的管理员集群是非高可用集群,请按照本部分中的步骤准备迁移到高可用集群。

如果您的管理员集群已是高可用集群,请跳至下一部分迁移管理员集群。

如果您的管理员集群版本为 1.29.0-1.29.600 或 1.30.0-1.30.100,并且如果在 1.14 或更低版本的管理员集群中启用了始终启用的密钥加密,则您必须先轮替加密密钥,然后再开始迁移。否则,新的高可用性管理员集群将无法解密 Secret。

如需检查集群是否可能使用旧的加密密钥,请执行以下操作:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get secret -n kube-system admin-master-component-options -o jsonpath='{.data.data}' | base64 -d | grep -oP '"GeneratedKeys":\[.*?\]'

如果输出显示空密钥(如以下示例所示),则必须按照此已知问题中的步骤轮替加密密钥。

"GeneratedKeys":[{"KeyVersion":"1","Key":""}]

更新管理员集群配置文件

对管理员集群配置文件进行以下更改:

  1. 使用您为控制平面节点分配的三个 IP 地址填充 network.controlPlaneIPBlock。
  2. 确保您已填写 network.hostConfig 部分。本部分包含有关集群节点虚拟机使用的 NTP 服务器、DNS 服务器和 DNS 搜索网域的信息。
  3. 请确保您已将 loadBalancer.vips.controlPlaneVIP 的值替换为您分配的 IP 地址。
  4. 将 adminMaster.replicas 设置为 3。
  5. 移除 vCenter.dataDisk 字段。对于高可用性管理员集群,控制平面节点使用的三个数据磁盘的路径会在数据存储区根目录 anthos 下自动生成。
  6. 如果 loadBalancer.kind 设置为 "ManualLB",请将 loadBalancer.manualLB.controlPlaneNodePort 设置为 0。

以下管理员集群配置文件示例显示了这些更改:

vCenter:
  address: "my-vcenter-server.my-domain.example"
  datacenter: "my-data-center"
  dataDisk: "xxxx.vmdk"
...
network:
  hostConfig:
    dnsServers:
    - 203.0.113.1
    - 203.0.113.2
    ntpServers:
    - 203.0.113.3
  ...
  controlPlaneIPBlock:
    netmask: "255.255.255.0"
    gateway: "198.51.100.1"
    ips:
    - ip: "192.0.2.1"
      hostname: "admin-cp-hostname-1"
    - ip: "192.0.2.2"
      hostname: "admin-cp-hostname-2"
    - ip: "192.0.2.3"
      hostname: "admin-cp-hostname-3"
...

...
loadBalancer:
  vips:
    controlPlaneVIP: 192.0.2.6 192.0.2.50
  kind: ManualLB
  manualLB:
    controlPlaneNodePort: 30003 0

...
adminMaster:
  replicas: 3
  cpus: 4
  memoryMB: 8192
...

如有需要,请调整负载均衡器中的映射

如果您的管理员集群一直在使用手动负载均衡,请完成本部分中的步骤。

如果您要从集成的 F5 BIG-IP 迁移到手动负载均衡,或者要迁移到 MetalLB,请跳到下一部分迁移管理集群。

对于您在 network.controlPlaneIPBlock 部分中指定的三个新控制平面节点 IP 地址中的每一个,请在外部负载均衡器(例如 F5 BIG-IP 或 Citrix)中配置此映射:

(old controlPlaneVIP:443) -> (NEW_NODE_IP_ADDRESS:old controlPlaneNodePort)

这可确保旧的控制平面 VIP 在迁移期间继续正常运行。

迁移管理员集群

仔细查看您对管理员集群配置文件所做的所有更改。除非更新集群以进行迁移,否则所有设置都是不可变的。

更新集群:

gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG \
    --config ADMIN_CLUSTER_CONFIG

Replace the following:

  • ADMIN_CLUSTER_KUBECONFIG:管理员集群 kubeconfig 文件的路径。
  • ADMIN_CLUSTER_CONFIG:管理员集群配置文件的路径。

该命令会显示迁移进度。

当系统提示时,输入 Y 以继续。

在从非高可用性迁移到高可用性期间,旧的控制平面 VIP 会继续运行,并且可用于访问新的高可用性管理员集群。迁移完成后,管理员集群的 kubeconfig 文件会自动更新为使用新的控制平面 VIP。

迁移后

更新完成后,验证管理员集群是否正在运行:

kubectl get nodes --kubeconfig ADMIN_CLUSTER_KUBECONFIG

负载均衡器迁移

如果您迁移了负载均衡器,请验证负载均衡器组件是否已成功运行。

MetalLB

如果您已迁移到 MetalLB,请使用以下命令验证 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 虚拟机名称。

ManualLB

将集群更新为使用手动负载均衡后,集群的流量不会中断。这是因为现有的 F5 资源仍然存在,您可以通过运行以下命令来查看:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG \

预期输出如下所示:

Warning: v1 ComponentStatus is deprecated in v1.19+
NAMESPACE     NAME                        TYPE     DATA   AGE
kube-system   secret/bigip-login-xt697x   Opaque   4      13h
NAMESPACE     NAME                              SECRETS   AGE
kube-system   serviceaccount/bigip-ctlr         0         13h
kube-system   serviceaccount/load-balancer-f5   0         13h
NAMESPACE     NAME                                        READY   UP-TO-DATE   AVAILABLE   AGE
kube-system   deployment.apps/k8s-bigip-ctlr-deployment   1/1     1            1           13h
kube-system   deployment.apps/load-balancer-f5            1/1     1            1           13h
NAME                                                                                ROLE                                       AGE
clusterrolebinding.rbac.authorization.k8s.io/bigip-ctlr-clusterrole-binding         ClusterRole/bigip-ctlr-clusterrole         13h
clusterrolebinding.rbac.authorization.k8s.io/load-balancer-f5-clusterrole-binding   ClusterRole/load-balancer-f5-clusterrole   13h
NAME                                                                 CREATED AT
clusterrole.rbac.authorization.k8s.io/bigip-ctlr-clusterrole         2024-03-25T04:37:34Z
clusterrole.rbac.authorization.k8s.io/load-balancer-f5-clusterrole   2024-03-25T04:37:34Z