Azure 上的 Anthos 集群适用于已与 Google Cloud 建立支持关系的客户。如需获取访问权限,请与您的客户代表联系。

管理节点池

本页面介绍如何管理节点池,包括有关集群自动扩缩器以及如何创建节点池的信息。

自动扩缩节点池

集群自动扩缩器会根据工作负载的需求自动调整给定节点池中的节点数量。您不需要手动添加或移除节点,也不需要过度预配节点池。您只需指定节点池的最小大小和最大大小即可,其他操作都是自动执行的。

在系统自动扩缩集群时,如果需要删除或移动资源,则工作负载可能会暂时中断。例如,如果工作负载包含具有单个副本的控制器,则在删除该副本的 Pod 的当前节点时,系统可能会将此 Pod 重新调度到其他节点上。因此,在启用集群自动扩缩器之前,您必须将工作负载设计为可以容忍潜在的中断或确保关键的 Pod 不会中断。

集群自动扩缩器的工作原理

集群自动扩缩器基于每个节点池工作。使用集群自动扩缩器配置节点池时,您可以指定节点池的最小大小和最大大小。

集群自动扩缩器会根据在该节点池中运行的 Pod 的资源请求(而不是实际资源利用率)自动增大或减小节点池的大小。如果无法调度 Pod 并且节点池中的节点不足,则集群自动扩缩器会添加节点。

如果节点未充分利用,并且所有 Pod 都可以安排在较少的节点上,则集群自动扩缩器也会将其移除。如果该节点无法在 10 分钟后正常排空,则会被强制终止。此时间段不可配置。

如果您的 Pod 请求的资源太少(例如,如果默认数量不足),则集群自动扩缩器不会纠正这种情况。您可以通过为所有工作负载创建足够的资源请求,帮助确保集群自动扩缩器尽可能准确地工作。如需了解详情,请参阅管理容器的资源

操作条件

集群自动扩缩器在调整节点池的大小时会做出以下假设:

  • 所有复制的 Pod 都可以在其他节点上重启,可能会导致短暂的中断。如果您的工作负载无法容忍中断,请将工作负载配置为在停用自动扩缩功能的节点池上运行。如需了解详情,请参阅使用节点污点控制调度

  • 集群自动扩缩器可以替换您执行的任何手动节点管理操作。

  • 单个节点池中的所有节点都具有一组相同的标签。

  • 纵向扩容后,集群自动扩缩器会选择空闲 CPU 或未使用内存最少的节点组。如果您在同一集群中有不同大小的节点(例如高 CPU 或高内存节点),则此行为会影响已扩容的节点池。

最小和最大节点池大小

您可以为集群中的每个节点池指定最小和最大大小。集群自动扩缩器会在这些范围内做出重新扩缩决策。 启用自动扩缩功能后,如果当前节点池大小低于指定的最小值或者大于指定的最大值,则自动扩缩器将等待生效,直至节点池中需要新节点或者节点为止可以安全地从节点池中删除。

自定义网络安全群组

如需自定义网络安全群组 (NSG),请参阅网络安全群组

创建节点池

在创建节点池之前,您需要做好以下准备:

  • 可以使用 az 命令行工具检索 Azure 子网 ID 的权限。
  • 访问用户集群的 SSH 公钥。

如需创建节点池,请运行以下命令:

  1. 将 Azure VNet 子网 ID 和 SSH 公钥保存到环境变量中:

    SUBNET_ID=$(az network vnet subnet show \
      --resource-group=VNET_RESOURCE_GROUP_NAME --vnet-name=VNET_NAME \
      --name default --query "id" -otsv)
    SSH_PUBLIC_KEY=$(cat KEY_PATH.pub)
    

    替换以下内容:

    • VNET_RESOURCE_GROUP_NAME:包含 VNet 的资源组名称
    • VNET_NAME:您的 VNet 的名称
    • KEY_PATH:密钥对的路径
  2. 使用 gcloud 命令行工具创建节点池:

    gcloud alpha container azure node-pools create NODE_POOL_NAME \
        --cluster=CLUSTER_NAME \
        --location GOOGLE_CLOUD_LOCATION \
        --node-version=1.20.10-gke.300 \
        --vm-size=VM_SIZE \
        --max-pods-per-node=110 \
        --min-nodes=MIN_NODES \
        --max-nodes=MAX_NODES \
        --ssh-public-key="${SSH_PUBLIC_KEY}" \
        --subnet-id="${SUBNET_ID}"
    

    替换以下内容:

    • NODE_POOL_NAME:节点池的唯一名称,例如 node-pool-1
    • CLUSTER_NAME:Anthos clusters on Azure 用户集群的名称
    • GOOGLE_CLOUD_LOCATION:托管用户集群的 Google Cloud 位置
    • VM_SIZE受支持的 Azure 虚拟机大小
    • MIN_NODES:节点池中的最小节点数 - 如需了解详情,请参阅自动扩缩节点池
    • MAX_NODES:节点池中的节点数上限。
  3. 检查节点池的状态:

    gcloud alpha container azure node-pools describe NODE_POOL_NAME \
        --cluster CLUSTER_NAME \
        --location GOOGLE_CLOUD_LOCATION
    

    替换以下内容:

    • NODE_POOL_NAME:节点池的唯一名称,例如 node-pool-1
    • CLUSTER_NAME:Anthos clusters on Azure 用户集群的名称
    • GOOGLE_CLOUD_LOCATION:托管用户集群的 Google Cloud 位置

    输出包含节点池的状态,包括是 PROVISIONING 还是 RUNNING

在特定可用区中创建节点池

如需在特定 Azure 可用性可用区中创建节点池,请在创建节点池时将 --azure-availability-zone 标志传递给 gcloud 命令行工具。

如需使用 gcloud 命令行工具在特定 Azure 可用性可用区中创建节点池,请运行以下命令:

gcloud alpha container azure node-pools create NODE_POOL_NAME \
    --cluster=CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION \
    --node-version=1.20.10-gke.300 \
    --vm-size=VM_SIZE \
    --max-pods-per-node=110 \
    --min-nodes=MIN_NODES \
    --max-nodes=MAX_NODES \
    --azure-availability-zone=AZURE_ZONE \
    --ssh-public-key="${SSH_PUBLIC_KEY}" \
    --subnet-id="${SUBNET_ID}"

替换以下内容:

  • NODE_POOL_NAME:节点池的唯一名称,例如 node-pool-1
  • CLUSTER_NAME:Anthos clusters on Azure 用户集群的名称
  • GOOGLE_CLOUD_LOCATION:托管用户集群的 Google Cloud 位置
  • VM_SIZE受支持的 Azure 虚拟机大小
  • MIN_NODES:节点池中的最小节点数 - 如需了解详情,请参阅自动扩缩节点池
  • MAX_NODES:节点池中的节点数上限。
  • AZURE_ZONE:Anthos clusters on Azure 启动节点池所在的 Azure 可用性可用区,例如 3

删除节点池

要删除节点池,请运行以下命令:

gcloud alpha container azure node-pools delete NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION

替换以下内容:

  • NODE_POOL_NAME:要删除的节点池的名称
  • CLUSTER_NAME:节点池所附加到的集群的名称
  • GOOGLE_CLOUD_LOCATION:托管节点池的 Google Cloud 位置

后续步骤

  • 试用快速入门,在 Anthos clusters on Azure 上启动您的第一个工作负载。