本页面介绍了如何动态更新 Google Kubernetes Engine (GKE) Standard 集群中现有节点池的节点标签和节点污点。
您还可以在 GKE Autopilot 或 Standard 集群中动态应用和更新网络标记。如需了解相关说明,请参阅使用网络标记将防火墙规则应用于节点。
概览
节点污点和标签位于 Kubernetes 节点的对象元数据中。标签用于在特定节点上调度 Pod,在这些节点上可以使用污点来引导 Pod 离开这些节点。
使用 Kubernetes Engine API,您可以对现有 GKE 节点池的节点标签和节点污点应用更新,而无需重新创建节点池或中断正在运行的工作负载。更新后的节点池配置会保留在 GKE 中,因此未来的节点池升级和节点池中的新节点预配将使用新的配置。
限制
使用 Kubernetes Engine API 动态更新节点池配置存在一些局限性:
- 节点池的版本必须为 1.19.7-gke.1500 或更高版本。
- 集群的控制平面版本必须为 1.23.4-gke.300 或更高版本,才能为启用了集群自动扩缩器的现有节点池应用节点标签或节点污点更新。对于早期版本的集群,您可以使用以下解决方法:停用节点池的自动扩缩功能,然后更新节点标签和/或污点。应用更新后,再重新启用自动扩缩功能。
更新节点标签
如需更新节点池的节点标签,请使用以下命令:
gcloud container node-pools update NODEPOOL_NAME \
--node-labels=[NODE_LABEL,...] \
[--cluster=CLUSTER_NAME] [--region=REGION | --zone=ZONE]
[GCLOUD_WIDE_FLAG …]
替换以下内容:
NODEPOOL_NAME
:要更新的节点池的名称。[NODE_LABEL,...]
:所需的新节点标签(例如label1=value1,label2=value2
)。CLUSTER_NAME
:集群的名称。REGION
:集群的 Compute Engine 区域。ZONE
:集群的 Compute Engine 可用区。
更新节点污点
如需更新节点池的节点污点,请使用以下命令:
gcloud container node-pools update NODEPOOL_NAME \
--node-taints=[NODE_TAINT,...] \
[--cluster=CLUSTER_NAME] [--region=REGION | --zone=ZONE]
[GCLOUD_WIDE_FLAG …]
替换以下内容:
NODEPOOL_NAME
:要更新的节点池的名称。[NODE_TAINT,...]
:所需的新节点污点(例如key1=val1:NoSchedule,key2=val2:PreferNoSchedule
)。CLUSTER_NAME
:集群的名称。REGION
:集群的 Compute Engine 区域。ZONE
:集群的 Compute Engine 可用区。