管理节点池

创建 Google Distributed Cloud (GDC) 网闸隔离 Kubernetes 集群时,您指定的节点数量和节点类型会创建集群的第一个节点池。随着计算需求的变化,您可以对现有集群执行以下节点池任务:

  • 添加新节点池:随着集群工作负载需求的增加,添加新的节点池。

  • 查看节点池:查看现有节点池的特征和状态。

  • 调整节点池大小:手动扩缩节点池,以适应工作负载流量波动。

  • 删除节点池:如果集群工作负载的需求减少,或者您想删除不再适合容器操作的机器类型,请移除节点池。

如需详细了解集群中的节点池,请参阅节点简介。

本文档适用于应用运维人员组中的应用开发者和平台管理员组中的 IT 管理员,他们负责管理其组织内的 Kubernetes 集群。如需了解详情,请参阅适用于 GDC 网闸隔离配置文档的受众群体。

准备工作

如需完成本文档中的任务,您必须请求必要的权限并准备环境。

申请 IAM 角色

您必须拥有特定角色,才能获得管理 Kubernetes 集群中的节点池所需的权限。您所需的角色取决于您是在组织级共享集群还是项目级标准集群中工作。如需了解详情,请参阅 Kubernetes 集群配置。

共享集群角色

如需创建、删除、修改或查看共享集群的节点池,请与您的 IAM 组织管理员联系,请求 User Cluster Admin (user-cluster-admin) 角色。此角色未绑定到命名空间。

标准集群角色

请与您的 IAM 项目管理员联系,申请获得以下角色:

  • Standard 集群管理员 (standard-cluster-admin):创建、删除、修改或查看 Standard 集群的节点池。

  • Cluster Developer (cluster-developer):创建、删除、修改或查看标准集群。需要此角色才能从 GDC 控制台查看集群的节点池详细信息。

这些角色会绑定到您的项目命名空间。

准备环境

如需使用 API 对 Kubernetes 集群运行命令,请确保您拥有以下资源:

  • 找到 Kubernetes 集群名称,或向平台管理员群组的成员询问集群名称。

  • 在这些说明中,请使用 Kubernetes 集群名称替换 KUBERNETES_CLUSTER_NAME。

  • 登录并生成 Kubernetes 集群的管理 API 服务器 kubeconfig 文件。

  • 在这些说明中,请使用 Management API 服务器的 kubeconfig 路径替换 MANAGEMENT_API_SERVER。

添加节点池

如需将节点池添加到现有 Kubernetes 集群,请完成以下步骤:

控制台

  1. 在项目选择器中,选择您的项目或组织。

    标准集群属于项目级范围,共享集群属于组织级范围。选择正确的范围以查看适当的 Kubernetes 集群类型。

  2. 在导航菜单中,依次选择 Kubernetes Engine > 集群。

  3. 在集群列表中点击相应集群。系统随即会显示集群详情页面。

  4. 依次选择节点池 > 添加节点池。

  5. 为节点池分配名称。创建节点池后,您将无法修改名称。

  6. 指定要在节点池中创建的工作器节点数。

  7. 选择最契合您工作负载要求的机器类别。机器类别显示在以下设置中:

    • 机器类型
    • vCPU
    • 内存
  8. 点击保存。

API

  1. 使用 kubectl CLI 通过交互式编辑器打开 Cluster 自定义资源规范:

    kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig MANAGEMENT_API_SERVER
    

    替换以下内容:

    • KUBERNETES_CLUSTER_NAME:集群的名称。
    • KUBERNETES_CLUSTER_NAMESPACE:集群的命名空间。对于共享集群,请使用 platform 命名空间。对于标准集群,请使用集群的项目命名空间。
    • MANAGEMENT_API_SERVER:托管 Kubernetes 集群的可用区级 API 服务器的 kubeconfig 路径。
  2. 在 nodePools 部分中添加一个新条目:

    nodePools:
    # Several lines of code are omitted here.
    - machineTypeName: MACHINE_TYPE
      name: NODE_POOL_NAME
      nodeCount: NUMBER_OF_WORKER_NODES
      taints: TAINTS
      labels: LABELS
      acceleratorOptions:
        gpuPartitionScheme: GPU_PARTITION_SCHEME
    

    替换以下内容:

    • MACHINE_TYPE:节点池的工作器节点的机器类型。查看可用的机器类型,了解可配置的类型。
    • NODE_POOL_NAME:节点池的名称。
    • NUMBER_OF_WORKER_NODES:要在节点池中预配的工作器节点数。
    • TAINTS:要应用于此节点池的节点的污点。此为可选字段。
    • LABELS:要应用于此节点池的节点的标签。它包含一个键值对列表。此为可选字段。
    • GPU_PARTITION_SCHEME:GPU 分区方案(如果您运行的是 GPU 工作负载)。例如 mixed-2。如果未设置此字段,则不会对 GPU 进行分区。如需了解可用的多实例 GPU (MIG) 配置文件,请参阅支持的 MIG 配置文件。
  3. 保存文件并退出编辑器。

查看节点池

如需查看 Kubernetes 集群中的现有节点池,请完成以下步骤:

控制台

  1. 在项目选择器中,选择您的项目或组织。

    标准集群属于项目级范围,共享集群属于组织级范围。选择正确的范围以查看适当的 Kubernetes 集群类型。

  2. 在导航菜单中,依次选择 Kubernetes Engine > 集群。

  3. 在集群列表中点击相应集群。系统随即会显示集群详情页面。

  4. 选择节点池。

系统会显示集群中运行的节点池列表。您可以通过此页面管理集群的节点池。

API

  • 查看特定 Kubernetes 集群的节点池:

    kubectl get clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        -o json --kubeconfig MANAGEMENT_API_SERVER | \
        jq .status.workerNodePoolStatuses
    

    替换以下内容:

    • KUBERNETES_CLUSTER_NAME:集群的名称。
    • KUBERNETES_CLUSTER_NAMESPACE:集群的命名空间。对于共享集群,请使用 platform 命名空间。对于标准集群,请使用集群的项目命名空间。

    输出类似于以下内容:

    [
      {
        "conditions": [
          {
            "lastTransitionTime": "2023-08-31T22:16:17Z",
            "message": "",
            "observedGeneration": 2,
            "reason": "NodepoolReady",
            "status": "True",
            "type": "Ready"
          },
          {
            "lastTransitionTime": "2023-08-31T22:16:17Z",
            "message": "",
            "observedGeneration": 2,
            "reason": "ReconciliationCompleted",
            "status": "False",
            "type": "Reconciling"
          }
        ],
        "name": "worker-node-pool",
        "readyNodes": 3,
        "readyTimestamp": "2023-08-31T18:59:46Z",
        "reconcilingNodes": 0,
        "stalledNodes": 0,
        "unknownNodes": 0
      }
    ]
    

调整节点池的大小

您可以通过纵向扩容或纵向缩容来手动调整 Kubernetes 集群中节点池的大小。缩减节点池时,您无法选择要移除的特定节点。

如需在现有集群中扩缩节点池,请完成以下步骤:

控制台

  1. 在项目选择器中,选择您的项目或组织。

    标准集群属于项目级范围,共享集群属于组织级范围。选择正确的范围以查看适当的 Kubernetes 集群类型。

  2. 在信息中心内,选择要修改的集群所在的项目。

  3. 在导航菜单中,依次选择 Kubernetes Engine > 集群。

  4. 选择与节点池关联的集群名称。系统会显示集群详细信息页面。

  5. 点击节点池标签页。

  6. 选择要调整大小的节点池对应的 修改图标。系统会显示修改节点池提示。

  7. 更新节点数字段,以反映节点池中所需的新节点数量。您可以增加或减少节点数量,以满足工作负载要求。

  8. 点击保存。

  9. 返回到集群的节点池标签页,确认调整大小后的节点池具有 Ready 状态,并且具有正确数量的节点。节点池可能需要几分钟时间才能扩缩到您的规范。

    使用控制台确认节点池已准备就绪。

API

  1. 使用 kubectl CLI 通过交互式编辑器打开 Cluster 自定义资源规范:

    kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig MANAGEMENT_API_SERVER
    

    替换以下内容:

    • KUBERNETES_CLUSTER_NAME:托管节点池的集群的名称。
    • KUBERNETES_CLUSTER_NAMESPACE:集群的命名空间。对于共享集群,请使用 platform 命名空间。对于标准集群,请使用集群的项目命名空间。
    • MANAGEMENT_API_SERVER:托管 Kubernetes 集群的可用区级 API 服务器的 kubeconfig 路径。
  2. 更新要调整大小的节点池的 nodeCount 字段:

    nodePools:
    # Several lines of code are omitted here.
    - machineTypeName: n2-standard-2-gdc
      name: nodepool-1
      nodeCount: NUMBER_OF_WORKER_NODES
    

    将 NUMBER_OF_WORKER_NODES 替换为要在节点池中预配的更新后的工作器节点数。

  3. 保存文件并退出编辑器。

  4. 通过检查节点池的配置,验证节点伸缩是否已完成:

    kubectl get clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE -o json \
        --kubeconfig MANAGEMENT_API_SERVER | jq .status.workerNodePoolStatuses
    

    确认 readyNodes 数量反映了您为节点池设置的节点数量。节点池可能需要几分钟时间才能扩缩到您指定的规模。

删除节点池

如果删除节点池,则节点及指向节点的路由也将随之删除。这些节点会逐出并重新安排在其上运行的所有 Pod。如果 Pod 具有特定的节点选择器,且如果集群中的其他节点均不符合标准,则 Pod 可能仍处于无法安排的状态。

在删除节点池之前,请确保您至少有三个工作器节点,以确保集群有足够的计算空间来有效运行。

如需删除节点池,请完成以下步骤:

控制台

  1. 在项目选择器中,选择您的项目或组织。

    标准集群属于项目级范围,共享集群属于组织级范围。选择正确的范围以查看适当的 Kubernetes 集群类型。

  2. 在导航菜单中,依次选择 Kubernetes Engine > 集群。

  3. 点击托管要删除的节点池的集群。

  4. 选择节点池。

  5. 点击要删除的节点池旁边的 删除。

API

  1. 使用 kubectl CLI 通过交互式编辑器打开 Cluster 自定义资源规范:

    kubectl edit clusters.cluster.gdc.goog/KUBERNETES_CLUSTER_NAME \
        -n KUBERNETES_CLUSTER_NAMESPACE \
        --kubeconfig MANAGEMENT_API_SERVER
    

    替换以下内容:

    • KUBERNETES_CLUSTER_NAME:集群的名称。
    • KUBERNETES_CLUSTER_NAMESPACE:集群的命名空间。对于共享集群,请使用 platform 命名空间。对于标准集群,请使用集群的项目命名空间。
    • MANAGEMENT_API_SERVER:托管 Kubernetes 集群的可用区级 API 服务器的 kubeconfig 路径。
  2. 从 nodePools 部分中移除节点池条目。例如,在以下代码段中,您必须移除 machineTypeName、name 和 nodeCount 字段:

    nodePools:
    # Several lines of code are omitted here.
    - machineTypeName: n2-standard-2-gdc
      name: nodepool-1
      nodeCount: 3
    

    请务必移除要删除的节点池的所有字段。

  3. 保存文件并退出编辑器。

后续步骤