创建和管理节点池

创建用户集群时,您必须配置至少一个节点池,即一组具有相同配置的节点。创建集群后,您可以添加新的节点池、更新节点池设置和删除节点池。

如何创建、更新和删除节点池取决于集群是否由 Anthos On-Prem API 管理。如果满足以下任一条件,则用户集群由 Anthos On-Prem API 管理:

  • 集群是在 Google Cloud 控制台中创建的,该控制台自动将 Anthos On-Prem API 配置为管理集群。

  • 在用户集群上运行命令 gkectl enroll cluster,该命令将其配置为由 Anthos On-Prem API 管理

如果用户集群由 Anthos On-Prem API 管理,则您可以使用 Google Cloud 控制台管理节点池。如果用户集群不是由 Anthos On-Prem API 管理,请在管理员工作站的命令行中使用 gkectl 来管理节点池。

添加节点池

如果您在 Google Cloud 控制台中创建了集群,则可以使用 Google Cloud 控制台添加节点池;但是,您需要使用命令行配置以下节点池设置:

在添加其他节点池之前,请验证集群上是否有足够的可用 IP 地址

控制台

  1. 在 Google Cloud 控制台中,转到“Anthos 集群”页面。

    转到“Anthos 集群”页面

  2. 选择用户集群所在的 Google Cloud 项目。

  3. 在集群列表中,点击集群的名称,然后点击详细信息面板中的查看详细信息

  4. 点击添加节点池

  5. 配置节点池:

    1. 输入节点池名称
    2. 输入池中每个节点的 vCPU 数量(每个用户集群工作器最少 4 个)。
    3. 输入池中每个节点的内存大小(以兆字节 (MiB) 为单位,每个用户集群工作器节点最少 8192 MiB,并且必须是 4 的倍数)。
    4. 节点字段中,输入池中的节点数(最少 3 个)。
    5. 选择操作系统映像类型Ubuntu ContainerdUbuntuCOS

    6. 输入启动磁盘大小(以吉比字节 (GiB) 为单位,默认值为 40 GiB)。

  6. 节点池元数据(可选)部分中,如果您要添加 Kubernetes 标签污点,请执行以下操作:

    1. 点击 + 添加 Kubernetes 标签。输入标签的。根据需要重复上述步骤。
    2. 点击 + 添加污点。输入污点的效果。根据需要重复上述步骤。
  7. 点击创建

  8. Google Cloud 控制台会显示集群状态:正在更改。点击显示详情,以查看资源状态条件状态消息

命令行

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

    您必须指定以下字段:

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

    以下字段是可选的。如果您未添加 nodePools[i].bootDiskSizeGBnodePools[i].osImageType,则系统会使用默认值。

    • nodePools[i].labels
    • nodePools[i].taints
    • nodePools[i].bootDiskSizeGB
    • nodePools[i].osImageType
    • nodePools[i].vsphere.datastore
    • nodePools[i].vsphere.tags
  2. 运行以下命令:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    替换以下内容:

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

    • [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

更新节点池

您可以使用命令行更新用户集群配置文件的 nodePools 部分中的所有字段。目前,您只能使用 Google Cloud 控制台更新以下节点池字段:

  • 副本数量
  • 内存
  • vCPU 数量

在增加副本数量时,Anthos clusters on VMware 会将所需数量的节点添加到用户集群,并且在减少副本数量时节点会移除。更改节点池的副本数量不会中断工作负载。如果增加副本数量,请确保有可用的 IP 地址。

如果更新任何其他节点池字段,则会触发集群滚动更新。在滚动更新中,Anthos clusters on VMware 会创建新节点,然后删除旧节点。系统会重复此过程,直到所有旧节点都替换为新节点。此过程不会导致停机,但在更新期间集群必须有一个额外的 IP 地址可供使用。

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

如需更新用户集群上的节点池,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,转到“Anthos 集群”页面。

    转到“Anthos 集群”页面

  2. 选择用户集群所在的 Google Cloud 项目。

  3. 在集群列表中,点击集群的名称,然后点击详细信息面板中的查看详细信息

  4. 点击节点标签页。

  5. 点击要修改的节点池的名称。

  6. 点击要修改的字段旁边的 修改,然后点击完成

  7. 点击 以返回到上一页。

  8. Google Cloud 控制台会显示集群状态:正在更改。点击显示详情,以查看资源状态条件状态消息

命令行

  1. 在用户集群配置文件的 nodePools 部分中修改要更改的字段的值。

  2. 更新集群:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    替换以下内容:

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

    • [USER_CLUSTER_CONFIG] 替换为用户集群配置文件的路径。

更新节点池使用的 osImageType

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

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

验证您的更改

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

控制台

  1. 在 Google Cloud 控制台中,转到“Anthos 集群”页面。

    转到“Anthos 集群”页面

  2. 选择用户集群所在的 Google Cloud 项目。

  3. 在集群列表中,点击集群的名称,然后点击详细信息面板中的查看详细信息

  4. 点击节点标签页。

  5. 点击要查看的节点池的名称。

命令行

运行以下命令:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get nodes -o wide

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

删除节点池

虽然您可以删除节点池,但用户集群必须至少具有一个节点池。删除节点池会导致系统立即移除池中的节点,无论这些节点是否正在运行工作负载。

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

控制台

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

  2. 在 Google Cloud 控制台中,前往 Anthos 集群页面。

    转到“Anthos 集群”页面

  3. 选择用户集群所在的 Google Cloud 项目。

  4. 在集群列表中,点击集群的名称,然后点击详细信息面板中的查看详细信息

  5. 点击节点标签页。

  6. 点击要删除的节点池的名称。

  7. 点击 删除

  8. 点击 以返回到上一页。

  9. Google Cloud 控制台会显示集群状态:正在更改。点击显示详情,以查看资源状态条件状态消息

命令行

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

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

  3. 更新集群:

    gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
    

    替换以下内容:

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

    • [USER_CLUSTER_CONFIG] 替换为用户集群配置文件的路径。

问题排查

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

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

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

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

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

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