从集群中移除静态 IP 地址

本文档介绍如何从 GKE on VMware 集群中移除静态 IP 地址。

创建为节点使用静态 IP 地址的集群时,您会在 IP 地址块文件中指定一组 IP 地址。如果您之后发现指定的 IP 地址数量超出需求,则可以从集群中移除部分 IP 地址。

从用户集群中移除 IP 地址

请确保在移除后剩余足够的 IP 地址。每个集群节点都需要一个 IP 地址,此外,升级过程中的临时节点还需要一个额外的 IP 地址。例如,如果您有三个集群节点,则移除后需要剩余四个 IP 地址。

请按照以下步骤操作:

  1. 对于每个关联的用户集群,管理员集群都有一个 OnPremUserCluster 自定义资源。在管理员集群中,修改用户集群的 OnPremUserCluster 自定义资源:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG edit onpremusercluster USER_CLUSTER_NAME \
        --namespace USER_CLUSTER_NAME-gke-onprem-mgmt
    

    替换以下内容:

    • ADMIN_CLUSTER_KUBECONFIG:管理员集群 kubeconfig 文件的路径
    • USER_CLUSTER_NAME:您的用户集群的名称
  2. ipBlocks 部分移除所选 IP 地址:

    network:
      ...
      ipMode:
        ipBlocks:
        - gateway: 198.51.100.254
          ips:
          - hostname: user-host1
            ip: 198.51.100.1
          - hostname: user-host2
            ip: 198.51.100.2
          - hostname: user-host3
            ip: 198.51.100.3
          - hostname: user-host4
            ip: 198.51.100.4
          - hostname: user-host5
            ip: 198.51.100.5
          netmask: 255.255.255.0
        type: static
    
  3. 关闭修改会话。

  4. 在用户集群中,查看默认命名空间中的所有 Machine 对象:

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get machines --output yaml
    
  5. 删除使用已移除 IP 地址的所有 Machine 对象。例如,假设您移除了地址 198.51.100.1,并且发现 my-node-pool-1234 Machine 对象使用了该地址:

    Name:         my-node-pool-1234
    Namespace:    default
    Labels:       kubernetes.googleapis.com/cluster-name=my-cluster
                  kubernetes.googleapis.com/cluster-namespace=default
                  ...
    Annotations:  ...
                  vm-ip-address: 198.51.100.1
    

    那么您必须移除 my-node-pool-1234 Machine 对象。

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG delete machine my-node-pool-1234
    
  6. 几分钟后,查看集群节点地址:

    kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes --output wide
    
  7. 确认已移除的 IP 地址未显示在输出中。例如:

    myhost2   Ready ... 198.51.100.2
    myhost3   Ready ... 198.51.100.3
    myhost4   Ready ... 198.51.100.4
    

从管理员集群中移除 IP 地址

请确保在移除后剩余足够的 IP 地址。管理员集群控制平面节点需要一个 IP 地址,插件节点需要两个地址,升级过程中的临时节点还需要一个 IP 地址。此外,对于每个关联的用户集群,您需要一个或三个用户集群控制平面地址。每个高可用性 (HA) 用户集群需要管理员集群中的三个节点作为用户集群的控制平面。每个非 HA 用户集群需要管理员集群中的一个节点作为用户集群的控制平面。

例如,假设您的管理员集群与一个 HA 用户集群和一个非 HA 用户集群相关联。在移除后,必须剩下 8 个 IP 地址供以下节点使用:

  • 管理员集群控制平面节点
  • 2 个插件节点
  • 用作 HA 用户集群控制平面的 3 个节点
  • 用作非 HA 用户集群控制平面的 1 个节点
  • 升级过程中使用的 1 个临时节点

请按照以下步骤操作:

  1. 确定用于管理员集群的控制平面节点的 IP 地址:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get nodes --output wide
    

    在输出中,找到列为控制平面的节点。记下其 IP 地址。

    gke-admin-master-hdn4z   Ready   control-plane,master … 198.51.100.101
    ...
    
  2. 在管理员集群中,修改 OnPremAdminCluster 自定义资源:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG edit onpremadmincluster --namespace kube-system
    

    ADMIN_CLUSTER_KUBECONFIG 替换为管理员集群 kubeconfig 文件的路径。

  3. ipBlocks 部分中移除所选 IP 地址。切勿移除用于管理员集群的控制平面节点的 IP 地址。

    network:
      ...
      ipMode:
        ipBlocks:
        - gateway: 198.51.100.254
          ips:
          - hostname: admin-host1
            ip: 198.51.100.101
          - hostname: admin-host2
            ip: 198.51.100.102
          - hostname: admin-host3
            ip: 198.51.100.103
          - hostname: admin-host4
            ip: 198.51.100.104
          - hostname: admin-host5
            ip: 198.51.100.105
          - hostname: admin-host6
            ip: 198.51.100.106
          - hostname: admin-host7
            ip: 198.51.100.107
          - hostname: admin-host8
            ip: 198.51.100.108
          - hostname: admin-host9
            ip: 198.51.100.109
          netmask: 255.255.255.0
        type: static
    
  4. 关闭修改会话。

  5. 在管理员集群中,查看默认命名空间中的所有 Machine 对象:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get machines --output yaml
    
  6. 删除使用已移除 IP 地址的所有 Machine 对象。例如,假设您移除了地址 198.51.100.102,并且发现 gke-admin-node- Machine 对象使用了该地址:

    Name:         gke-admin-node-5678
    Namespace:    default
    ...
    Status:
    Addresses:
    Address:       198.51.100.102
    Type:          ExternalIP
    ...
    

    那么您必须移除 gke-admin-node-5678 Machine 对象。

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG delete machine gke-admin-node-5678
    
  7. 查看集群节点地址:

    kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get nodes --output wide
    
  8. 确认已移除的 IP 地址未显示在输出中。例如:

    gke-admin-master-hdn4z  Ready  control-plane,master  198.51.100.101
    gke-admin-node-abcd   Ready ... 198.51.100.103
    gke-admin-node-efgh   Ready ... 198.51.100.104
    my-user-cluster-ijkl  Ready ... 198.51.100.105
    my-user-cluster-mnop  Ready ... 198.51.100.106
    my-user-cluster-qrst  Ready ... 198.51.100.107
    my-user-cluster-uvwx  Ready ... 198.51.100.108