为了达到这个目的,你可以使用PodNodeSelector
准入控制器。
首先,您需要在您的kubernetes apiserver:
- Edit
/etc/kubernetes/manifests/kube-apiserver.yaml
:
- find
--enable-admission-plugins=
- add
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 官方文档中找到:https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#podnodeselector https://kubernetes.io/docs/reference/access-authn-authz/admission-controllers/#podnodeselector
kubeadm 用户
如果您使用 kubeadm 部署集群并且想要使此配置持久化,则必须更新 kubeadm 配置文件:
kubectl edit cm -n kube-system kubeadm-config
specify extraArgs
自定义值如下apiServer
部分:
apiServer:
extraArgs:
enable-admission-plugins: NodeRestriction,PodNodeSelector
然后更新所有控制平面节点上的 kube-apiserver 静态清单:
# Kubernetes 1.22 and forward:
kubectl get configmap -n kube-system kubeadm-config -o=jsonpath="{.data}" > kubeadm-config.yaml
# Before Kubernetes 1.22:
# "kubeadmin config view" was deprecated in 1.19 and removed in 1.22
# Reference: https://github.com/kubernetes/kubeadm/issues/2203
kubeadm config view > kubeadm-config.yaml
# Update the manifest with the file generated by any of the above lines
kubeadm init phase control-plane apiserver --config kubeadm-config.yaml
kubespray 用户
你可以只使用kube_apiserver_enable_admission_plugins
api-server 配置变量的变量:
kube_apiserver_enable_admission_plugins:
- PodNodeSelector