Kubernetes如何限制新建节点池仅运行指定Pod 无需重打所有Pod标签
Kubernetes多集群合并专属节点池隔离方案
核心逻辑
采用K8s原生的污点(Taint) + 容忍度(Toleration) 搭配节点亲和性实现隔离,全程不需要修改/重新部署现有集群的普通业务Pod,也不需要给普通Pod新增任何标签。
具体操作步骤
1. 给专属节点池配置污点
直接在节点池的初始化配置中添加专属污点,后续新扩容的节点会自动继承该配置,不需要手动逐个给节点打污点:
- 污点规则示例:
dedicated=cluster2-migrated:NoSchedule - 手动给已有节点打污点的命令:
kubectl taint nodes [节点名称] dedicated=cluster2-migrated:NoSchedule
该污点的作用是:所有没有对应容忍度的Pod,都无法被调度到这些节点上,节点上已运行的无对应容忍度的Pod也会被自动驱逐。
2. 给迁移的集群2业务配置匹配规则
迁移原集群2的工作负载(Deployment/StatefulSet等)时,仅需要给这部分资源新增两类配置即可:
- 新增污点容忍度,允许其调度到专属节点:
tolerations: - key: "dedicated" operator: "Equal" value: "cluster2-migrated" effect: "NoSchedule"
- 新增节点亲和性规则,保证这部分Pod只会调度到你提前打了专属标签的节点池上(避免被调度到普通业务节点):
假设你给专属节点池打的标签为
node-role.kubernetes.io/cluster2-dedicated: "true"
affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: node-role.kubernetes.io/cluster2-dedicated operator: In values: - "true"
额外说明
- 如果需要监控、日志采集、CNI插件等系统级DaemonSet正常运行在专属节点上,只需要给对应DaemonSet新增上述容忍度即可,无其他额外配置。
- 原集群2的业务全部迁移完成后,直接删除专属节点池即可完成下线,无残留配置。
内容的提问来源于stack exchange,提问作者SebastianStehle
相关产品推荐
相关产品推荐

