Kubernetes 如何将名称空间分配给某些节点?

Kubernetes 如何将名称空间分配给某些节点?,kubernetes,Kubernetes,有没有办法在名称空间级别配置节点选择器 我只想在此命名空间的某些节点上运行工作负载。要实现这一点,您可以使用PodNodeSelectoracmission controller 首先,需要在kubernetes apiserver中启用它: 编辑/etc/kubernetes/manifests/kube-apiserver.yaml: 查找——启用许可插件= 添加PodNodeSelector参数 现在,您可以在名称空间的注释中指定scheduler.alpha.kubernetes

有没有办法在名称空间级别配置
节点选择器


我只想在此命名空间的某些节点上运行工作负载。

要实现这一点,您可以使用
PodNodeSelector
acmission controller

首先,需要在kubernetes apiserver中启用它:

  • 编辑
    /etc/kubernetes/manifests/kube-apiserver.yaml
    • 查找
      ——启用许可插件=
    • 添加
      PodNodeSelector
      参数
现在,您可以在名称空间的注释中指定
scheduler.alpha.kubernetes.io/node selector
选项,例如:

apiVersion: v1
kind: Namespace
metadata:
 name: your-namespace
 annotations:
   scheduler.alpha.kubernetes.io/node-selector: env=test
spec: {}
status: {}
完成这些步骤后,在此命名空间中创建的所有POD都将自动添加此部分:

nodeSelector
  env: test
有关
PodNodeSelector
的更多信息,请参阅Kubernetes官方文档:


kubeadm用户 如果您使用kubeadm部署集群,并且希望使此配置持久化,则必须更新kubeadm配置文件:

kubectl edit cm -n kube-system kubeadm-config
apiServer
部分下使用自定义值指定
extraArgs

apiServer: 
  extraArgs: 
    enable-admission-plugins: NodeRestriction,PodNodeSelector
然后在所有控制平面节点上更新kube apiserver静态清单:

kubeadm config view > kubeadm-config.yaml
kubeadm init phase control-plane apiserver --config kubeadm-config.yaml

库布斯凯用户 您只需使用
kube\u apiserver\u enable\u acmission\u plugins
变量作为api服务器配置变量:

 kube_apiserver_enable_admission_plugins:
   - PodNodeSelector

我完全同意@kvaps的答案,但缺少一点:有必要在节点中添加标签:

kubectl label node <yournode> env=test
kubectl标签节点env=test

与此类似,在名称空间中使用
scheduler.alpha.kubernetes.io/node-selector:env=test
创建的pod只能在带有
env=test
label

的节点上进行调度,我已经通过ssh连接到我的一个节点,但在该位置/etc/kubernetes/manifests只有一个名为kube-proxy.manifest的文件,没有kube-apiserver.yaml。我需要创建它吗?我相信您需要访问kubernetes主机,它不是节点的功能。我们如何在EKS之类的托管kubernetes群集中实现这一点?当运行
kubeadm init phase control plane apiserver--config kubeadm config.yaml
时,我得到了GroupVersionKind/v1的
无效配置,种类=配置映射:种类和apiVersion是必须指定的必填信息
具体取决于此。如果您可能正在使用多个nodepool,那么每个nodepool都已经带有一个唯一的标签,该标签将向下延伸到节点,因此无需单独标记