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

概览

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

  • 负载均衡器配置:

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

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

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

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

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

最佳做法

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

要求

规划迁移期间的停机时间

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

Kubernetes API 访问权限 用户工作负载

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

使用 ManualLB 的 HA 管理员集群

不受影响

不受影响

包含 MetalLBManualLB 的非 HA 管理员集群

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

受影响

不受影响

使用 F5 BIG-IP 的非 HA 管理员集群

使用 ManualLB 的 HA 管理员集群

受影响

不受影响

使用 Seesaw 的非 HA 管理员集群

带有 MetalLB 的 HA 管理员集群

受影响

不受影响

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

迁移准备工作

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

分配额外的 IP 地址

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

更新防火墙规则

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

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

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

F5 BIG-IP

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

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

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

loadBalancer:
vips:
  controlPlaneVIP: 192.0.2.6 192.0.2.50
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 字段的值。如果您的管理员集群已是高可用集群,您可以保留相同的值。如果从非 HA 管理员集群迁移到 HA 管理员集群,请将 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 192.0.2.50
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. 管理员集群配置文件中增加 keyVersion

  2. 更新管理员集群:

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

    这将创建与新版本号匹配的新密钥,重新加密每个 Secret,并安全地清除旧 Secret。所有后续的新 Secret 均使用新的加密密钥进行加密。

更新管理员集群配置文件

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

  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 以继续。

在从非 HA 迁移到 HA 期间,旧的控制平面 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 控制器和发言者的 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