说明
PodPreset 准入控制器,当启用后,PodPreset 会将应用创建请求传入到该控制器上
当有 Pod 创建请求发生时,系统将执行以下操作:
- 检索所有可用的 PodPreset
- 检查有 PodPreset 的标签选择器上的标签与正在创建的 Pod 上的标签是否匹配
- 尝试将由 PodPreset 定义的各种资源合并到正在创建的 Pod 中
- 出现错误时,在该 Pod 上引发记录合并错误的事件,PodPreset 不会注入任何资源到创建的 Pod 中
注释刚生成的修改过的 Pod spec,以表明它已被 PodPreset 修改过。注释的格式为
podpreset.admission.kubernetes.io/podpreset-
“: “ “
每个 Pod 可以匹配零个或多个 PodPrestet;并且每个 PodPreset 可以应用于零个或多个 Pod。 PodPreset 应用于一个或多个 Pod 时,Kubernetes 会修改 Pod Spec。对于 Env、EnvFrom 和 VolumeMounts 的更改,Kubernetes 修改 Pod 中所有容器的容器 spec;对于 Volume 的更改,Kubernetes 修改 Pod Spec。
可能在某些情况下,希望 Pod 不会被任何 Pod Preset 所改变。可以在 Pod 的 Pod Spec 中添加上这样一个 annotation:podpreset.admission.kubernetes.io/exclude:”true”
启用
APIServer 启动参数中添加如下配置:
- —enable-admission-plugins=NodeRestriction,PodPreset
- —runtime-config=settings.k8s.io/v1alpha1=true
示例:预设 时间同步
time-preset.yamlapiVersion: settings.k8s.io/v1alpha1kind: PodPresetmetadata:name: time-presetnamespace: defaultspec:selector:matchLabels:volumeMounts:- name: localtimemountPath: /etc/localtimevolumes:- name: localtimehostPath:path: /etc/localtime
time-pod.yamlapiVersion: v1kind: Podmetadata:name: time-podlabels:app: timespec:containers:- name: time-pod-nginximage: nginxports:- containerPort: 80
