16.5.4. 控制 Pod 放置到项目
Pod Node Selector 准入控制器允许您将 pod 强制到与特定项目关联的节点上,并防止 pod 调度到这些节点上。
Pod Node Selector 准入控制器使用项目中的标签和在 pod 中指定的节点选择器决定 pod 放置的位置。只有 pod 中的节点选择器与项目中的标签匹配时,才会将新 pod 放置到与项目关联的节点上。
在 pod 创建后,节点选择器合并到 pod 中,以便 pod 规格包括最初包含在规格中的标签以及节点选择器中的任何新标签。以下示例说明了合并效果。
Pod Node Selector 准入控制器还允许您创建在特定项目中允许的标签列表。此列表充当 白名单,使开发人员能够知道可在项目中使用哪些标签,并让管理员更好地控制集群中的标签。
激活 Pod Node Selector 准入控制器:
使用以下方法之一配置 Pod Node Selector 准入控制器和白名单:
将以下内容添加到 master 配置文件 /etc/origin/master/master-config.yaml 中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建包含准入控制器信息的文件:
podNodeSelectorPluginConfig: clusterDefaultNodeSelector: "k3=v3" ns1: region=west,env=test,infra=fedora,os=fedora
podNodeSelectorPluginConfig: clusterDefaultNodeSelector: "k3=v3" ns1: region=west,env=test,infra=fedora,os=fedora
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 然后,在 master 配置中引用该文件:
admissionConfig: pluginConfig: PodNodeSelector: location: <path-to-file>
admissionConfig: pluginConfig: PodNodeSelector: location: <path-to-file>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果项目没有指定节点选择器,则与该项目关联的 pod 将使用默认节点选择器(
clusterDefaultNodeSelector
)进行合并。
重启 OpenShift Container Platform 以使更改生效。
master-restart api master-restart controllers
# master-restart api # master-restart controllers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建包含
scheduler.alpha.kubernetes.io/node-selector
注解和标签的项目对象。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 创建标签以匹配项目标签选择器的注释。此处的键/值标签是
env=test
和infra=fedora
。
注意使用 Pod Node Selector 准入控制器时,您无法使用
oc adm new-project <project-name>
来设置项目节点选择器。当您使用oc adm new-project myproject --node-selector='type=user-node,region=<region>
命令设置项目节点选择器时,OpenShift Container Platform 会设置openshift.io/node-selector
注解,该注解由 NodeEnv 准入插件处理。创建在节点选择器中包含标签的 pod 规格,例如:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 与项目标签匹配的节点选择器。
在项目中创建 pod:
oc create -f pod.yaml --namespace=ns1
# oc create -f pod.yaml --namespace=ns1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查节点选择器标签是否已添加到 pod 配置中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 节点选择器合并到 pod 中,容器集应当调度到适当的项目中。
如果您创建了一个没有在项目规格中指定的标签的 pod,则 pod 不会被调度到该节点上。
例如,这里的标签 env: production
不在任何项目规格中:
nodeSelector: "env: production" "infra": "fedora", "os": "fedora"
nodeSelector:
"env: production"
"infra": "fedora",
"os": "fedora"
如果有一个没有节点选择器注解的节点,则 pod 会在该处调度。