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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM