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/