Skip to main content
版本:Next

编辑节点池

OpenYurt NodePool 资源的最新版本为 apps.openyurt.io/v1beta2

字段说明请参阅最新的 API 参考

概述

编辑 NodePool 会更新其 spec允许修改的字段(以及可选地更新 NodePool 对象 metadata 上的标签或注解)。部分 spec 字段在创建后不可变更,见下文 创建后不可修改的字段。nodepool 控制器会将允许下发的配置同步到池内节点:例如在 NodePool spec 中定义的标签、注解和污点,会下发到属于该池的节点。

本文说明如何使用 kubectl 修改 NodePool。

创建后不可修改的字段

以下 spec 字段在创建时确定,创建后不支持再编辑。若尝试修改,API 服务器或准入控制会拒绝该更新:

  • spec.typeCloudEdge
  • spec.hostNetwork
  • spec.interConnectivity

若需要不同的取值,请新建 NodePool 并在创建时写入目标配置,再按运维流程迁移节点(见 创建节点池接入节点)。

开始之前

  • 需已安装并运行 Yurt-Manager(其中包含 nodepool 控制器)。
  • 需要具备在 apps.openyurt.io API 组下 更新 nodepools 的 RBAC 权限。

查看当前 NodePool

kubectl get nodepool <NodePoolName>
kubectl get np <NodePoolName> -o yaml

支持使用短名称 np

编辑 NodePool

方式一:kubectl edit(交互式)

在编辑器中打开集群中的实时对象,保存退出后即向 API 提交变更。

kubectl edit nodepool <NodePoolName>

若校验或准入拒绝该变更,编辑器通常会重新打开并显示错误信息。

方式二:kubectl apply(声明式)

维护 YAML 清单文件,修改所需字段后执行:

kubectl apply -f nodepool.yaml

与操作其他 Kubernetes 对象一样,注意 apiVersionkindmetadata.name 以及并发修改时的 resourceVersion,避免意外覆盖他人变更。

方式三:kubectl patch(局部更新)

适合脚本或小范围修改。示例:在节点模板中新增或更新一个标签:

kubectl patch nodepool <NodePoolName> --type merge -p '{"spec":{"labels":{"apps.openyurt.io/example":"updated"}}}'

请勿通过 patch(或其它更新方式)修改 创建后不可修改的字段 中所列项。

常见可修改项

各字段含义见 创建节点池。创建后通常仍可调整的包括:

类别示例字段
节点模板spec.annotationsspec.labelsspec.taints
Hub Leaderspec.enableLeaderElectionspec.leaderElectionStrategyspec.leaderReplicasspec.leaderNodeLabelSelectorspec.poolScopeMetadata

更新 NodePool 上的标签、注解或污点后,请等待控制器完成同步,必要时在成员节点上核对:

kubectl get node <NodeName> -o yaml

限制与相关说明

  • 不可变的 spec 字段spec.typespec.hostNetworkspec.interConnectivity 在节点池创建后不可修改,详见 创建后不可修改的字段
  • 资源名称:不能通过修改 metadata.name 为 NodePool「改名」。若需使用新名称,应新建 NodePool 并按流程关联节点(见 接入节点)。
  • 节点归属:节点属于哪个池由节点标签及控制器行为决定,不能仅靠任意编辑 NodePool 来「迁移」节点。节点上的绑定标签 apps.openyurt.io/nodepool 由 OpenYurt 管理,请勿依赖手工修改来移动节点,详见 删除节点池
  • 删除节点池:见 删除节点池

编辑后验证

kubectl get nodepool <NodePoolName> -o yaml
kubectl get nodepools

若启用了 Leader 选举,可查看 status.leaderEndpoints 以及 kubectl get nodepools 的扩展列,说明见 创建节点池