Kubernetes准入控制器PodNodeSelector、PodTolerationRestriction
PodNodeSelector:
该准入控制器通过读取命名空间注解和全局配置,来为命名空间中可以使用的节点选择器设置默认值并实施限制。
配置文件格式
PodNodeSelector
使用配置文件来设置后端行为的选项。 请注意,配置文件格式将在将来某个版本中迁移为版本化文件。 该文件可以是 json 或 yaml,格式如下:
podNodeSelectorPluginConfig: clusterDefaultNodeSelector: name-of-node-selector namespace1: name-of-node-selector namespace2: name-of-node-selector
从文件中引用 PodNodeSelector
配置文件,提供给 API 服务器命令行标志 --admission-control-config-file
:
apiserver.config.k8s.io/v1:
apiserver.k8s.io/v1alpha1:
# Deprecated in v1.17 in favor of apiserver.config.k8s.io/v1 apiVersion: apiserver.k8s.io/v1alpha1 kind: AdmissionConfiguration plugins: - name: PodNodeSelector path: podnodeselector.yaml ...
配置注解格式
PodNodeSelector
使用键为 scheduler.alpha.kubernetes.io/node-selector
的注解将节点选择器分配给命名空间。
apiVersion: v1 kind: Namespace metadata: annotations: scheduler.alpha.kubernetes.io/node-selector: name-of-node-selector name: namespace3
内部行为
该准入控制器行为如下:
- 如果
Namespace
的注解带有键scheduler.alpha.kubernetes.io/node-selector
,则将其值用作节点选择器。 - 如果命名空间缺少此类注解,则使用
PodNodeSelector
插件配置文件中定义的clusterDefaultNodeSelector
作为节点选择器。 - 评估 pod 节点选择器和命名空间节点选择器是否存在冲突。存在冲突将导致拒绝。
- 评估 pod 节点选择器和命名空间的白名单定义的插件配置文件是否存在冲突。存在冲突将导致拒绝。
说明:PodNodeSelector 允许 Pod 强制在特定标签的节点上运行。另请参阅 PodTolerationRestriction 准入插件,该插件可防止 Pod 在特定污点的节点上运行。
PodTolerationRestriction:
该准入控制器首先验证 Pod 的容忍度与其命名空间的容忍度之间的冲突。如果存在冲突,则拒绝 Pod 请求。 然后,它将命名空间的容忍度合并到 pod 的容忍度中,之后根据命名空间的容忍度白名单检查所得到的容忍度结果。 如果检查成功,则将接受 pod 请求,否则拒绝该请求。
如果 pod 的命名空间没有任何关联的默认容忍度或容忍度白名单,则使用集群级别的默认容忍度或容忍度白名单(如果有的话)。
命名空间的容忍度通过注解健 scheduler.alpha.kubernetes.io/defaultTolerations
和 scheduler.alpha.kubernetes.io/tolerationsWhitelist
设置。
参考:https://kubernetes.io/zh/docs/reference/access-authn-authz/admission-controllers/