You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

K3s集群指定namespace的Deployment仅运行在特定节点方案咨询

K3s集群指定Namespace工作负载强制调度到特定节点实现方案

背景说明

K3s默认未启用Kubernetes原生的PodNodeSelector准入插件,因此你找不到对应配置入口,无需额外查找第三方插件,两种原生适配方案如下:

方案1:启用原生PodNodeSelector准入插件(无需额外组件)

操作步骤

  • 编辑K3s server服务配置文件(默认路径为/etc/systemd/system/k3s.service),在ExecStart启动项的k3s server后追加参数:
    --kube-apiserver-arg=enable-admission-plugins=NodeRestriction,PodNodeSelector
    
    注意不要遗漏默认启用的NodeRestriction插件,否则会导致集群节点认证异常
  • 重载配置并重启K3s server服务生效:
    systemctl daemon-reload && systemctl restart k3s
    
  • 给已创建的testing命名空间添加调度注解,替换下文中的<标签键>=<标签值>为你给节点打的实际test标签:
    kubectl annotate namespace testing scheduler.alpha.kubernetes.io/node-selector=<标签键>=<标签值>
    
    示例:如果节点标签为run=test,则命令为:
    kubectl annotate namespace testing scheduler.alpha.kubernetes.io/node-selector=run=test
    

生效说明

所有后续在testing命名空间下创建的Pod,都会被自动注入上述nodeSelector配置,强制调度到符合标签要求的节点,无需单独修改Deployment配置。存量Pod需要重建后生效。

方案2:策略引擎强制注入(无需修改K3s启动参数)

如果不希望修改集群核心组件启动参数,可以部署Kyverno/Gatekeeper这类Kubernetes原生策略引擎,编写全局规则匹配testing命名空间下的所有Pod,强制注入目标nodeSelector,还可额外添加校验规则防止用户手动修改配置绕过调度限制,适合多租户、规则复杂的场景。

轻量临时方案

如果仅需要对少量Deployment做限制,可直接在Deployment的spec.template.spec字段下添加nodeSelector配置,示例:

spec:
  template:
    spec:
      nodeSelector:
        <标签键>: <标签值>

内容的提问来源于stack exchange,提问作者Tomáš Klas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:45:02