创建和管理节点池

在用户集群中,您可以通过填写 集群配置文件nodePools 部分创建一组具有相同配置的节点。然后,您可以管理节点池,而不会影响集群中的其他节点。详细了解节点池

您还可以更新节点池以使用其他 osImageType

准备工作

删除节点池会导致系统立即移除池中的节点,无论这些节点是否正在运行工作负载。

您可以更新 nodePool 部分的 replicas 字段,而不中断工作负载。但是,如果您更新任何其他字段,则池中的节点会被删除并重新创建。

如果要将标记附加到节点池中的所有虚拟机,您的 vCenter 用户帐号必须具有以下 vSphere 标记权限

  • vSphere 标记。分配或取消分配 vSphere 标记
  • vSphere 标记。在对象上分配或取消分配 vSphere 标记 (vSphere 7)

更新 nodePool 部分时,Anthos clusters on VMware 会创建一个新节点,然后删除旧节点。它会重复此过程,直至所有旧节点替换为新节点。这意味着集群必须具有在更新期间可用的额外 IP 地址。

假设节点池在更新结束时将有 N 个节点。那么,您必须至少有 N+1 个 IP 地址可用于该池中的节点。这意味着,如果要通过向一个或多个池添加节点来调整集群大小,则在结束大小调整时,您所拥有的的 IP 地址数量应该至少比集群的所有节点池中的节点总数多出一个。 如需了解详情,请参阅验证是否有足够的可用 IP 地址

填写集群配置文件的 nodePools 部分

用户集群配置文件中,填写 nodePools 部分。

对于每个节点池,您必须指定以下字段:

  • nodePools.[i].name
  • nodePools[i].cpus
  • nodePools.[i].memoryMB
  • nodePools.[i].replicas

以下字段是可选的:

  • nodePools[i].labels
  • nodePools[i].taints
  • nodePools[i].bootDiskSizeGB
  • nodePools[i].osImageType
  • nodePools[i].vsphere.datastore
  • nodePools[i].vsphere.tags

在新集群中创建节点池

在用户集群配置文件中,填写 nodePools 部分,然后创建集群:

gkectl create cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

请替换以下内容:

  • ADMIN_CLUSTER_KUBECONFIG:管理员集群的 kubeconfig 文件

  • USER_CLUSTER_CONFIG:用户集群配置文件

更新现有集群中的节点池

在用户集群配置文件中,修改 nodePools 部分,然后更新集群:

gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG

验证您的更改

如需验证节点池是否已创建或更新,请检查集群节点:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes --output wide

如果需要还原更改,请修改集群配置文件并运行 gkectl update cluster

删除节点池

要从用户集群中删除节点池,请执行以下操作:

  1. 从用户集群配置文件的 nodePools 部分移除其定义。

  2. 确保受影响的节点上没有工作负载运行。

  3. 更新集群:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

示例

以下示例配置中有四个节点池,每个节点池具有不同的特性:

  • pool-1:仅指定了所需的最少属性
  • pool-2:包括 vsphere.datastorevsphere.tags
  • pool-3:包括 taintslabels
  • pool-4:包括 osImageTypebootDiskSizeGB
nodePools:
- name: pool-1
  cpus: 4
  memoryMB: 8192
  replicas: 5
- name: pool-2
  cpus: 8
  memoryMB: 16384
  replicas: 3
  vsphere:
    datastore: my_datastore
    tags:
    - category: "purpose"
      name: "testing"
- name: pool-3
  cpus: 4
  memoryMB: 8192
  replicas: 5
  taints:
    - key: "example-key"
      effect: NoSchedule
  labels:
    environment: production
    app: nginx
- name: pool-4
  cpus: 4
  memoryMB: 8192
  replicas: 5
  osImageType: cos
  bootDiskSizeGB: 40

更新节点池使用的 osImageType

您可以更新节点池以使用其他 osImageType。更新节点池的配置文件(如以下示例所示),然后运行 gkectl update cluster

nodePools:
- name: np-1
  cpus: 4
  memoryMB: 8192
  replicas: 3
  osImageType: ubuntu_containerd

问题排查

  • 通常,gkectl update cluster 命令会在失败时提供详细信息。如果命令成功并且您没有看到节点,则可以使用诊断集群问题指南进行问题排查。

  • 集群资源可能不足,例如在创建或更新节点池期间缺少可用的 IP 地址。请参阅调整用户集群大小主题,详细了解如何验证是否有可用的 IP 地址。

  • 您还可以查看常规问题排查指南。

  • 卡在 Creating node MachineDeployment(s) in user cluster…

    创建或更新用户集群中的节点池可能需要一些时间。但是,如果等待时间非常长并且您怀疑某些操作可能失败,则可以运行以下命令:

    1. 运行 kubectl get nodes 以获取节点的状态。
    2. 对于任何未准备就绪的节点,运行 kubectl describe node NODE_NAME 以获取详细信息。