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:
apiVersion: apiserver.config.k8s.io/v1
kind: AdmissionConfiguration
plugins:
- name: PodNodeSelector
  path: podnodeselector.yaml
...

 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  

内部行为

该准入控制器行为如下:

  1. 如果 Namespace 的注解带有键 scheduler.alpha.kubernetes.io/node-selector ,则将其值用作节点选择器。
  2. 如果命名空间缺少此类注解,则使用 PodNodeSelector 插件配置文件中定义的 clusterDefaultNodeSelector 作为节点选择器。
  3. 评估 pod 节点选择器和命名空间节点选择器是否存在冲突。存在冲突将导致拒绝。
  4. 评估 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/

posted @ 2020-08-12 15:30  人艰不拆_zmc  阅读(1611)  评论(0编辑  收藏  举报